让程序支持语言国际化,这是个基础知识点,做android开发的或多或少都知道一些,只是可能大家在做工作的时候,可能并没有实际实践过,做法大家肯定不陌生。
在res目录下建立不同名称的values文件来调用不同的语言包,这里可能主要就是记不住对应国家应该创建的文件夹名字是什么,以下为参照表:
中文(中国):values-zh-rCN中文(台湾):values-zh-rTW
中文(香港):values-zh-rHK
英语(美国):values-en-rUS
英语(英国):values-en-rGB
英文(澳大利亚):values-en-rAU
英文(加拿大):values-en-rCA
英文(爱尔兰):values-en-rIE
英文(印度):values-en-rIN
英文(新西兰):values-en-rNZ
英文(新加坡):values-en-rSG
英文(南非):values-en-rZA
阿拉伯文(埃及):values-ar-rEG
阿拉伯文(以色列):values-ar-rIL
保加利亚文: values-bg-rBG
加泰罗尼亚文:values-ca-rES
捷克文:values-cs-rCZ
丹麦文:values-da-rDK
德文(奥地利):values-de-rAT
德文(瑞士):values-de-rCH
德文(德国):values-de-rDE
德文(列支敦士登):values-de-rLI
希腊文:values-el-rGR
西班牙文(西班牙):values-es-rES
西班牙文(美国):values-es-rUS
芬兰文(芬兰):values-fi-rFI
法文(比利时):values-fr-rBE
法文(加拿大):values-fr-rCA
法文(瑞士):values-fr-rCH
法文(法国):values-fr-rFR
希伯来文:values-iw-rIL
印地文:values-hi-rIN
克罗里亚文:values-hr-rHR
匈牙利文:values-hu-rHU
印度尼西亚文:values-in-rID
意大利文(瑞士):values-it-rCH
意大利文(意大利):values-it-rIT
日文:values-ja-rJP
韩文:values-ko-rKR
立陶宛文:valueslt-rLT
拉脱维亚文:values-lv-rLV
挪威博克马尔文:values-nb-rNO
荷兰文(比利时):values-nl-BE
荷兰文(荷兰):values-nl-rNL
波兰文:values-pl-rPL
葡萄牙文(巴西):values-pt-rBR
葡萄牙文(葡萄牙):values-pt-rPT
罗马尼亚文:values-ro-rRO
俄文:values-ru-rRU
斯洛伐克文:values-sk-rSK
斯洛文尼亚文:values-sl-rSI
塞尔维亚文:values-sr-rRS
瑞典文:values-sv-rSE
泰文:values-th-rTH
塔加洛语:values-tl-rPH
土耳其文:values–r-rTR
乌克兰文:values-uk-rUA
越南文:values-vi-rVN
如果我们提供多个values目录之后,那么程序运行的时候,会根据默认的Local配置进行相应的资源读取。比如你程序提供了中文和英文的支持,那么当手机通过设置,将语言系统更改为英文之后再运行程序,程序就会读取values-en下的资源。
有些程序在内部提供了语言切换功能,主要核心原理是更改Resource对象中的Local变量值,具体步骤参见:
1.在res下创建多个支持的values目录,比如values-zh-rCN ; values-en等
2.在功能清单文件中对要进行切换acitivity 进行配置
android:configChanges="locale"
3.更改Resources中的Local变量
// 应用内配置语言
Resources resources = getResources();// 获得res资源对象
Configuration config = resources.getConfiguration();// 获得设置对象
DisplayMetrics dm = resources.getDisplayMetrics();// 获得屏幕参数:主要是分辨率,像素等。
config.locale = Locale.ENGLISH; // 英文
resources.updateConfiguration(config, dm);
这样就可以把程序资源的Local更改为英文了。
这里要说的一点是:Locale提供了一些常用的数据,比如Locale.ENGLISH,但是假如你需要泰文的话,这个变量里面并没有提供可以调用的,所以这里需要自己new一个,具体代码:
Locale locale =newLocale("th","TH");
这两个的参数值怎么来的,主要是通过国家语言代码,比如中国简体是zh-TW,泰文是th-TH。其他的具体见地址:
http://www.cnblogs.com/linlf03/p/3680454.html
这里有个注意的地方就是,调用上述代码之后,已经加载了的界面并不会立即更改为对应的语言,需要重启已经加载了的界面,这个其实跟主题切换的概念几乎是一样的。
当然是应该是可以采取一些措施实现并不需要重启就完成语言和主体的切换。