java获取系统语言(区分简体中文和繁体中文)

之前做android应用时遇到过一个问题,就是根据语言的不同而显示不同的内容

网上很多代码都是错误的,起码无法区分简体和繁体,这里给出一种方法

不涉及android任何知识,所以就归类到java这边了

[java]

  1. Locale locale = Locale.getDefault();
  2. System.out.println(locale.getLanguage());
  3. System.out.println(locale.getCountry());

这里我们关注两个方法

public String getLanguage()

Since: API Level 1

Returns the language code for this Locale or the empty string if no language was set.

public String getCountry()

Since: API Level 1

Returns the country code for this locale, or "" if this locale doesn‘t correspond to a specific country.

返回的都是代码(code),需要解释下语言代码和国家代码

语言代码(或语言编码)是一组用来代表语言的代码。语言代码是由字母或数字组成的短字串,用于分类图书馆典藏、电脑程式上的本地化和翻译等用途。(转自中文维基百科)

国家代码(或国家编码)是一组用来代表国家和境外领土的地理代码。国家代码是由字母或数字组成的短字串,方便用于数据处理和通讯。世界上有许多不同的国家代码标准,其中最广为人知是为国际标准化组织的ISO 3166-1。国家代码也可以指国际长途电话国家号码,即国际电信联盟的国际电话区号(E.164)。(转自中文维基百科)(这里指的是前者)

那么语言代码和国家代码的对应关系是什么呢,我们可以参考下面两个文献

ISO 639:Codes for the representation of names of languages

ISO 3166:Codes for the representation of names of countries and their subdivisions

如果系统使用的是汉语,那么getLanguage()返回的字符串为zh,然后根据getCountry()返回结果可以判断出简体还是繁体了。如果是TW,那么就是繁体了,返回CN则是简体,如果返回了HK,这个自己看着办吧。。。

在android中,切换系统语言后,这两个函数的返回值就都会做出相应的改变

在android中,简体中文和繁体中文字符串资源要分别放到res/values-zh-rCN和res/values-zh-rTW下,这里为什么会有个r,我也不清楚

ps:ISO 3166-1 alpha-2中,TW的说明为:Taiwan, Province of China,还是有些令人欣慰的

转贴请保留以下链接

本人blog地址

http://su1216.iteye.com/

http://blog.csdn.net/su1216/

时间: 2024-10-16 15:56:44

java获取系统语言(区分简体中文和繁体中文)的相关文章

Android 项目开发填坑记 - 获取系统语言(兼容7.0)

如果移动端访问不佳,请访问–> Github版 关键词:Android7.0 .系统语言 .顺序不一致 获取系统当前语言是一个比较常用的功能,在 Android 7.0 系统上旧函数获取到的当前系统语言并不正确,或者说从 Android 7.0 起,Android 系统语言的规则变了. 背景 下面是未适配 Android 7.0 的代码: // 获取 Locale 的方式有二 Locale locale = getResources().getConfiguration().locale; Lo

UTF-8/UNICODE/简体中文/繁体中文之间的转换

简介 这几天一直在研究中文的简体和繁体之间的转换问题,网上查了一下资料,在此进行整理和备份. 繁体中文有GBK码和BIG5码两种编码,简体中文一般使用的是GB2312编码. 这些编码之间的转换基本都是使用下列3个函数:LCMapString.WideCharToMultiByte和MultiByteToWideChar,其中还会牵涉到UNICODE码和UTF-8码这两种编码. GB2312编码与GBK编码可以直接使用LCMapString转换,GB2312编码/GBK编码与BIG5编码则无法直接

Win8.1 MSDN各版本下载(64位/32位,简体中文,繁体中文,英文),X86&X64,EN,CHS,CHT

英文64位ed2k://|file|en_windows_8_1_x64_dvd_2707217.iso|3899295744|8E604054013D21209B851E41DC19F6F5|/ 英文32位ed2k://|file|en_windows_8_1_x86_dvd_2707392.iso|2915131392|CC72E0D238F94071A5104EAF8F0CEEC3|/ 简体中文64位ed2k://|file|cn_windows_8_1_x64_dvd_2707237.i

项目国际化时,简体中文转繁体的自己主动化方案

近期笔者所在的项目(该项目已经开发长达5年)要实现国际化.一想便知,大部分工作则是抽取中文简体资源文件,并再拷贝一份繁体中文的资源文件. 为了极大限度的降低反复劳动,同事们可谓八仙过海,各显神通.经过一段时间的查找.測试,共同交流各自的方式,并从中选取最佳方案.推广整个项目组. 下面是一同事的方案: 一.抽取中文简体的资源文件(这一步临时无法省略,所有手动完毕): 二.使用在线工具.将中文简体转为繁体中文(网址:http://xh.5156edu.com/jtof.php): 三.使用在线工具,

[转]Java后端,应该日常翻看的中文技术网站 -江南白衣

Java后端,应该日常翻看的中文技术网站 1.内容生产者 InfoQ 中文技术第一站,佩服霍老板,真金白银地为中国程序员们生产内容. ImportNew 专门面向Java的内容生产者兼聚合者,偶然也有些面向入门的小白文. 并发编程网 面向高并发,Java,开源的社区. 2. 内容聚合者 现在写博客,没人用RSS读了,在微博里的传播也就一两天,好在有它们负责挖掘整理散落在各个角落的技术文章. 开发者头条 与 <码农周刊> 人气慢慢上来了,我博客阅读量很大一部分源于它, APP也好用. <编

截取文本,区分中英文字符,中文算两个长度,英文算一个长度

/// <summary>    /// 截取文本,区分中英文字符,中文算两个长度,英文算一个长度   /// </summary>   /// <param name="str">待截取的字符串</param>   /// <param name="length">需计算长度的字符串</param>   /// <returns>string</returns>   p

java zip压缩和解压(支持中文)

package com.xeon.mis.utils; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.util.Enumeration; impor

Java开发,AWT控件的中文显示成乱码的解决方法

使用Java开发程序时,AWT控件上的中文在程序运行的时候显示成乱码,这是myeclipse的运行参数设置的问题. 解决方法: 第一:在你的具有main函数的类也即你应用运行的主类上点击右键,选择Run As中的Run Configurations,如下图: 第二,在Arguments标签下的VM arguments中添加下面这行参数代码,然后点击应用. -Dfile.encoding=GB18030 重新运行程序,就能够正常的显示中文了.Java开发,AWT控件的中文显示成乱码的解决方法

Java获取某月天数

Java获取某月天数 Calendar   cal   =   new   GregorianCalendar(); //或者用Calendar   cal   =   Calendar.getInstance(); /**设置date**/ SimpleDateFormat oSdf = new SimpleDateFormat ("",Locale.ENGLISH); oSdf.applyPattern("yyyyMM"); try { System.out.p