Android自适应国际化语言

                     

转载请标明出处:http://write.blog.****.net/mdeditor#!postId=52606459    文章出自:薛瑄的博客

你也可以查看我的其他同类文章,也会让你有一定的收货

前言

internationalization (国际化)简称 i18n,因为在i和n之间还有18个字符,localization(本地化 ),简称L10n。

一般用语言_地区的形式表示一种语言,如  zh_CN, zh_TW.

各国语言缩写  http://www.loc.gov/standards/iso639-2/php/code_list.php

国家和地区简写 https://www.iso.org/obp/ui/#search

官方文档的这个地址已经失效 http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html

国家_地区语言速查表:http://www.cnblogs.com/Mien/archive/2008/08/22/1273950.html

一键实现语言国际化

在使用这个插件的使用遇到任何问题,可以在github上,或者本博客进行提问。我会第一时间帮你解决

我们要装的插件是:AndroidLocalizationer,从github上down后,把下好的zip包解压,里面有个同名的压缩包就是我们的插件包,集成到studio里面就好了,看图:

Android自适应国际化语言

这样我们就把插件集成好了。然后找到string.xml——>右键——>

Android自适应国际化语言

这时我们就可以勾选自己要实现的国家的语言了。(这几十种语言应该涵盖了所有的吧,猜的)

Android自适应国际化语言

然后我们就来看下成果

Android自适应国际化语言

看见这几面旗子是不是感觉很开心啊,然后我们来看下strings.xml的内容,果然不负我望:

strings.xml

<resources>    <string name="app_name">MyZhihuapp</string>    <string name="hello_world">Hello world!</string>    <string name="action_settings">Settings</string>    <string name="file_path">multidownload</string>    <string name="image_data">imageData</string></resources>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

再看下values-ja (小日本鬼子的 ) strings.xml

<resources>   <string name="app_name">MyZhihuapp</string>   <string name="hello_world">ハローワールド!</string>   <string name="action_settings">設定</string>   <string name="file_path">multidownload</string>   <string name="image_data">imagedata を扱う</string></resources>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

接下来看下values-ko(韩国绊子的)strings.xml

<string name="app_name">MyZhihuapp</string><string name="hello_world">전 세계 여러분 안녕하세요!</string><string name="action_settings">설정</string><string name="file_path">multidownload</string><string name="image_data">imageData</string>
  • 1
  • 2
  • 3
  • 4
  • 5

个人感觉唯一不足的就是:我们改了values/string.xml里面的内容其他语言国际化语言不会自动重新编译(或clean重新编译),要是这样都实现了就更完美了

国际化

为支持多国语言,在res/中创建一个额外的values目录以连字符和ISO国家代码结尾命名,比如values-es/是为语言代码为”es”的资源文件的目录。Android会在运行时根据设备的区域设置,加载相应的资源。详见Providing Alternative Resources

自适应的知识与编程无关,关键在于配置文件的修改。自适应的内容包括:语言、屏幕、平台。今天就来说一下如何自适应国际化言。

internationalization (国际化)简称:i18n,因为在i和n之间还有18个字符。同理,localization(本地化 ),简称L10n。

操作方法:

为了支持国际化语言,我们只要在res/目录下在新建文件夹为:values-语言代号-地区代号。如values-zh-rCN表示简体中文,values-zh-rTW表示繁体等。

注:配置选项包括语言代号、地区代号。表示中文和中国的配置选项是 zh-rCN(zh表示中文,CN表示中国)。 表示英文和美国的配置选项是en-rUS(en表示英文,US表示美国)。前面的r是必须的。

有的博客,在介绍国际化时,并没有给出地区代码,例如:values-jp表示日语。那地区代码到底有什么作用呢?难道是根据不同的地区自动切换语言??知道的同学,指点我一下

举例:支持中文简体的国际化

现在新建一个Android工程Android_i18n,默认在res/values/strings.xml中的代码如下:

 <?xml version="1.0" encoding="utf-8"?> <resources>     <string name="app_name">" Android_i18n"</string>     <string name="hello_world">Hello world!</string>     <string name="action_settings">Settings</string> </resources>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

不做任何修改,直接在手机上运行程序,默认的效果如下:

Android自适应国际化语言

声明:我的手机默认的语言是设置为中文的:

Android自适应国际化语言

其实无论手机设置成什么语言,运行的效果都是一样的,因为我们还没有进行国际化设置。所以程序没有别的选择,只能显示res/values/strings.xml中的信息。那现在开始来设置吧。

现在来加一个中文简体的国际化:在res/目录下新建一个文件夹代表中文简体:values-zh-rCN,目录结构如下图所示:

Android自适应国际化语言

注:如果想再加一个英语的国际化,新建的文件夹为values-en-rUS,并使用相应的strings.xml文件。

修改res/values-zh-rCN/strings.xml的代码,如下:

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="app_name">" 安卓国际化"</string>    <string name="hello_world">你好,世界</string>    <string name="action_settings">设置</string></resources>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

此时运行程序,效果如下:

Android自适应国际化语言

常见问题:

问题一:

现在我并没有添加繁体中文的对应的资源,如果我将手机的语言设置为繁体中文,运行程序会是什么现象呢?

答案:如果没有定义繁体中文的资源,那默认加载的就是res/values/目录下的资源。

问题二:

现在定义一个字符串,只在res/values-zh-rCN/下定义,而不在res/values/定义,运行程序会是什么现象呢?

答案:

现在我们在activity_main.xml中添加一个按钮:

<Button          android:layout_width="match_parent"         android:layout_height="wrap_content"         android:text="@string/login_button"/>
  • 1
  • 2
  • 3
  • 4

第04行代码:按钮显示的名字引用了字符串login_button

此时,让res/values/strings.xml的代码保持不变:

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="app_name">" Android_i18n"</string>    <string name="hello_world">Hello world!</string>    <string name="action_settings">Settings</string></resources>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在res/values-zh-rCN/strings.xml中加一行login_button的声明:(第07行代码)

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="app_name">" 安卓国际化"</string>    <string name="hello_world">你好,世界</string>    <string name="action_settings">设置</string>    <string name="login_button">登陆按钮</string></resources>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

效果:

activity_main.xml的视图如下:

Android自适应国际化语言

运行程序,如果手机的语言设置为英文,效果如下:(非正常显示)
Android自适应国际化语言

如果手机的语言设置为中文,效果如下:(能正常显示)
Android自适应国际化语言

图片资源的国际化:

另外,我们不仅可以做字符资源的国际化,我们同样可以做图片资源的国际化。操作如下:

(1)在res/目录下新建一个文件夹代表中文简体的图片资源:drawable-zh-rCN。同理,在res/目录下新建一个文件夹代表日本的图片资源:drawable-jp。然后在这两个文件夹中放入不同的图片,但是要保证图片的文件名是一样的。

(2)于是,当我们在布局文件中通过R.drawable.ResId来引用图片的时候,就可以保证在不同的语言环境下,加载不同国家的图片。

国家_地区的语言缩写代码:

中文(中国):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

通过程序获取JAVA所有支持的语言和国家的

程序代码如下:

import java.util.Locale;public class Test { public static void main(String[] args) {  //调用Locale类的getAvailableLocales方法获取,该方法返回一个数组,其中包含JAVA支持的语言和国家  Locale[] localeList = Locale.getAvailableLocales();  //依次获取所支持的国家和语言  for (int i = 0; i < localeList.length; i++) {   System.out.println(localeList[i].getDisplayCountry() + "="     + localeList[i].getCountry() + ""     + localeList[i].getDisplayLanguage() + "="     + localeList[i].getLanguage());  } }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

输出结果如下(有些国家可能会使用多种语言):

马来西亚=MY马来文=ms卡塔尔=QA阿拉伯文=ar冰岛=IS冰岛文=is芬兰=FI芬兰文=fi=波兰文=pl马耳他=MT英文=en瑞士=CH意大利文=it比利时=BE荷兰文=nl沙特阿拉伯=SA阿拉伯文=ar伊拉克=IQ阿拉伯文=ar波多黎哥=PR西班牙文=es智利=CL西班牙文=es=芬兰文=fi奥地利=AT德文=de=丹麦文=da英国=GB英文=en巴拿马=PA西班牙文=es=塞尔维亚文=sr也门=YE阿拉伯文=ar马其顿王国=MK马其顿文=mk=马其顿文=mk加拿大=CA英文=en越南=VN越南文=vi荷兰=NL荷兰文=nl美国=US西班牙文=es中国=CN中文=zh洪都拉斯=HN西班牙文=es美国=US英文=en=法文=fr=泰文=th=阿拉伯文=ar摩洛哥=MA阿拉伯文=ar=拉托维亚文(列托)=lv=德文=de印度尼西亚=ID印度尼西亚文=in=克罗地亚文=hr南非=ZA英文=en韩国=KR朝鲜文=ko突尼斯=TN阿拉伯文=ar=印度尼西亚文=in=日文=ja塞尔维亚=RS塞尔维亚文=sr白俄罗斯=BY白俄罗斯文=be台湾地区=TW中文=zh苏丹=SD阿拉伯文=ar=葡萄牙文=pt=冰岛文=is日本=JP日文=ja玻利维亚=BO西班牙文=es阿尔及利亚=DZ阿拉伯文=ar=马来文=ms阿根廷=AR西班牙文=es阿拉伯联合酋长国=AE阿拉伯文=ar加拿大=CA法文=fr=斯洛文尼亚文=sl=西班牙文=es立陶宛=LT立陶宛文=lt黑山=ME塞尔维亚文=sr叙利亚=SY阿拉伯文=ar俄罗斯=RU俄文=ru比利时=BE法文=fr西班牙=ES西班牙文=es=保加利亚文=bg以色列=IL希伯来文=iw=瑞典文=sv=英文=en=希伯来文=iw丹麦=DK丹麦文=da哥斯达黎加=CR西班牙文=es香港=HK中文=zh=中文=zh西班牙=ES加泰罗尼亚文=ca泰国=TH泰文=th乌克兰=UA乌克兰文=uk多米尼加共和国=DO西班牙文=es委内瑞拉=VE西班牙文=es波兰=PL波兰文=pl利比亚=LY阿拉伯文=ar约旦=JO阿拉伯文=ar=意大利文=it=乌克兰文=uk匈牙利=HU匈牙利文=hu=爱尔兰文=ga危地马拉=GT西班牙文=es巴拉圭=PY西班牙文=es保加利亚=BG保加利亚文=bg克罗地亚=HR克罗地亚文=hr波斯尼亚和黑山共和国=BA塞尔维亚文=sr罗马尼亚=RO罗马尼亚文=ro卢森堡=LU法文=fr=挪威文=no=立陶宛文=lt新加坡=SG英文=en厄瓜多尔=EC西班牙文=es波斯尼亚和黑山共和国=BA塞尔维亚文=sr尼加拉瓜=NI西班牙文=es=斯洛伐克文=sk=俄文=ru=马耳他文=mt萨尔瓦多=SV西班牙文=es=荷兰文=nl印度=IN印地文=hi=爱沙尼亚文=et希腊=GR希腊文=el斯洛文尼亚=SI斯洛文尼亚文=sl意大利=IT意大利文=it日本=JP日文=ja卢森堡=LU德文=de瑞士=CH法文=fr马耳他=MT马耳他文=mt巴林=BH阿拉伯文=ar=阿尔巴尼亚文=sq=越南文=vi黑山=ME塞尔维亚文=sr巴西=BR葡萄牙文=pt挪威=NO挪威文=no=希腊文=el瑞士=CH德文=de新加坡=SG中文=zh科威特=KW阿拉伯文=ar埃及=EG阿拉伯文=ar爱尔兰=IE爱尔兰文=ga秘鲁=PE西班牙文=es捷克共和国=CZ捷克文=cs土耳其=TR土耳其文=tr=捷克文=cs乌拉圭=UY西班牙文=es爱尔兰=IE英文=en印度=IN英文=en阿曼=OM阿拉伯文=ar塞尔维亚及黑山=CS塞尔维亚文=sr=加泰罗尼亚文=ca=白俄罗斯文=be=塞尔维亚文=sr=朝鲜文=ko阿尔巴尼亚=AL阿尔巴尼亚文=sq葡萄牙=PT葡萄牙文=pt拉脱维亚=LV拉托维亚文(列托)=lv塞尔维亚=RS塞尔维亚文=sr斯洛伐克=SK斯洛伐克文=sk墨西哥=MX西班牙文=es澳大利亚=AU英文=en挪威=NO挪威文=no新西兰=NZ英文=en瑞典=SE瑞典文=sv=罗马尼亚文=ro黎巴嫩=LB阿拉伯文=ar德国=DE德文=de泰国=TH泰文=th=土耳其文=tr哥伦比亚=CO西班牙文=es菲律宾=PH英文=en爱沙尼亚=EE爱沙尼亚文=et塞浦路斯=CY希腊文=el=匈牙利文=hu法国=FR法文=fr
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156

参考:

Android学习—-自适应国际化语言

Android Studio一键生成快速开发实现语言国际化

有关Android国际化的一点积累

 

关注我的公众号,轻松了解和学习更多技术
  Android自适应国际化语言

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.****.net/jiangjunshow

                     

转载请标明出处:http://write.blog.****.net/mdeditor#!postId=52606459    文章出自:薛瑄的博客

你也可以查看我的其他同类文章,也会让你有一定的收货

前言

internationalization (国际化)简称 i18n,因为在i和n之间还有18个字符,localization(本地化 ),简称L10n。

一般用语言_地区的形式表示一种语言,如  zh_CN, zh_TW.

各国语言缩写  http://www.loc.gov/standards/iso639-2/php/code_list.php

国家和地区简写 https://www.iso.org/obp/ui/#search

官方文档的这个地址已经失效 http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html

国家_地区语言速查表:http://www.cnblogs.com/Mien/archive/2008/08/22/1273950.html

一键实现语言国际化

在使用这个插件的使用遇到任何问题,可以在github上,或者本博客进行提问。我会第一时间帮你解决

我们要装的插件是:AndroidLocalizationer,从github上down后,把下好的zip包解压,里面有个同名的压缩包就是我们的插件包,集成到studio里面就好了,看图:

Android自适应国际化语言

这样我们就把插件集成好了。然后找到string.xml——>右键——>

Android自适应国际化语言

这时我们就可以勾选自己要实现的国家的语言了。(这几十种语言应该涵盖了所有的吧,猜的)

Android自适应国际化语言

然后我们就来看下成果

Android自适应国际化语言

看见这几面旗子是不是感觉很开心啊,然后我们来看下strings.xml的内容,果然不负我望:

strings.xml

<resources>    <string name="app_name">MyZhihuapp</string>    <string name="hello_world">Hello world!</string>    <string name="action_settings">Settings</string>    <string name="file_path">multidownload</string>    <string name="image_data">imageData</string></resources>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

再看下values-ja (小日本鬼子的 ) strings.xml

<resources>   <string name="app_name">MyZhihuapp</string>   <string name="hello_world">ハローワールド!</string>   <string name="action_settings">設定</string>   <string name="file_path">multidownload</string>   <string name="image_data">imagedata を扱う</string></resources>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

接下来看下values-ko(韩国绊子的)strings.xml

<string name="app_name">MyZhihuapp</string><string name="hello_world">전 세계 여러분 안녕하세요!</string><string name="action_settings">설정</string><string name="file_path">multidownload</string><string name="image_data">imageData</string>
  • 1
  • 2
  • 3
  • 4
  • 5

个人感觉唯一不足的就是:我们改了values/string.xml里面的内容其他语言国际化语言不会自动重新编译(或clean重新编译),要是这样都实现了就更完美了

国际化

为支持多国语言,在res/中创建一个额外的values目录以连字符和ISO国家代码结尾命名,比如values-es/是为语言代码为”es”的资源文件的目录。Android会在运行时根据设备的区域设置,加载相应的资源。详见Providing Alternative Resources

自适应的知识与编程无关,关键在于配置文件的修改。自适应的内容包括:语言、屏幕、平台。今天就来说一下如何自适应国际化言。

internationalization (国际化)简称:i18n,因为在i和n之间还有18个字符。同理,localization(本地化 ),简称L10n。

操作方法:

为了支持国际化语言,我们只要在res/目录下在新建文件夹为:values-语言代号-地区代号。如values-zh-rCN表示简体中文,values-zh-rTW表示繁体等。

注:配置选项包括语言代号、地区代号。表示中文和中国的配置选项是 zh-rCN(zh表示中文,CN表示中国)。 表示英文和美国的配置选项是en-rUS(en表示英文,US表示美国)。前面的r是必须的。

有的博客,在介绍国际化时,并没有给出地区代码,例如:values-jp表示日语。那地区代码到底有什么作用呢?难道是根据不同的地区自动切换语言??知道的同学,指点我一下

举例:支持中文简体的国际化

现在新建一个Android工程Android_i18n,默认在res/values/strings.xml中的代码如下:

 <?xml version="1.0" encoding="utf-8"?> <resources>     <string name="app_name">" Android_i18n"</string>     <string name="hello_world">Hello world!</string>     <string name="action_settings">Settings</string> </resources>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

不做任何修改,直接在手机上运行程序,默认的效果如下:

Android自适应国际化语言

声明:我的手机默认的语言是设置为中文的:

Android自适应国际化语言

其实无论手机设置成什么语言,运行的效果都是一样的,因为我们还没有进行国际化设置。所以程序没有别的选择,只能显示res/values/strings.xml中的信息。那现在开始来设置吧。

现在来加一个中文简体的国际化:在res/目录下新建一个文件夹代表中文简体:values-zh-rCN,目录结构如下图所示:

Android自适应国际化语言

注:如果想再加一个英语的国际化,新建的文件夹为values-en-rUS,并使用相应的strings.xml文件。

修改res/values-zh-rCN/strings.xml的代码,如下:

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="app_name">" 安卓国际化"</string>    <string name="hello_world">你好,世界</string>    <string name="action_settings">设置</string></resources>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

此时运行程序,效果如下:

Android自适应国际化语言

常见问题:

问题一:

现在我并没有添加繁体中文的对应的资源,如果我将手机的语言设置为繁体中文,运行程序会是什么现象呢?

答案:如果没有定义繁体中文的资源,那默认加载的就是res/values/目录下的资源。

问题二:

现在定义一个字符串,只在res/values-zh-rCN/下定义,而不在res/values/定义,运行程序会是什么现象呢?

答案:

现在我们在activity_main.xml中添加一个按钮:

<Button          android:layout_width="match_parent"         android:layout_height="wrap_content"         android:text="@string/login_button"/>
  • 1
  • 2
  • 3
  • 4

第04行代码:按钮显示的名字引用了字符串login_button

此时,让res/values/strings.xml的代码保持不变:

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="app_name">" Android_i18n"</string>    <string name="hello_world">Hello world!</string>    <string name="action_settings">Settings</string></resources>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在res/values-zh-rCN/strings.xml中加一行login_button的声明:(第07行代码)

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="app_name">" 安卓国际化"</string>    <string name="hello_world">你好,世界</string>    <string name="action_settings">设置</string>    <string name="login_button">登陆按钮</string></resources>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

效果:

activity_main.xml的视图如下:

Android自适应国际化语言

运行程序,如果手机的语言设置为英文,效果如下:(非正常显示)
Android自适应国际化语言

如果手机的语言设置为中文,效果如下:(能正常显示)
Android自适应国际化语言

图片资源的国际化:

另外,我们不仅可以做字符资源的国际化,我们同样可以做图片资源的国际化。操作如下:

(1)在res/目录下新建一个文件夹代表中文简体的图片资源:drawable-zh-rCN。同理,在res/目录下新建一个文件夹代表日本的图片资源:drawable-jp。然后在这两个文件夹中放入不同的图片,但是要保证图片的文件名是一样的。

(2)于是,当我们在布局文件中通过R.drawable.ResId来引用图片的时候,就可以保证在不同的语言环境下,加载不同国家的图片。

国家_地区的语言缩写代码:

中文(中国):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

通过程序获取JAVA所有支持的语言和国家的

程序代码如下:

import java.util.Locale;public class Test { public static void main(String[] args) {  //调用Locale类的getAvailableLocales方法获取,该方法返回一个数组,其中包含JAVA支持的语言和国家  Locale[] localeList = Locale.getAvailableLocales();  //依次获取所支持的国家和语言  for (int i = 0; i < localeList.length; i++) {   System.out.println(localeList[i].getDisplayCountry() + "="     + localeList[i].getCountry() + ""     + localeList[i].getDisplayLanguage() + "="     + localeList[i].getLanguage());  } }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

输出结果如下(有些国家可能会使用多种语言):

马来西亚=MY马来文=ms卡塔尔=QA阿拉伯文=ar冰岛=IS冰岛文=is芬兰=FI芬兰文=fi=波兰文=pl马耳他=MT英文=en瑞士=CH意大利文=it比利时=BE荷兰文=nl沙特阿拉伯=SA阿拉伯文=ar伊拉克=IQ阿拉伯文=ar波多黎哥=PR西班牙文=es智利=CL西班牙文=es=芬兰文=fi奥地利=AT德文=de=丹麦文=da英国=GB英文=en巴拿马=PA西班牙文=es=塞尔维亚文=sr也门=YE阿拉伯文=ar马其顿王国=MK马其顿文=mk=马其顿文=mk加拿大=CA英文=en越南=VN越南文=vi荷兰=NL荷兰文=nl美国=US西班牙文=es中国=CN中文=zh洪都拉斯=HN西班牙文=es美国=US英文=en=法文=fr=泰文=th=阿拉伯文=ar摩洛哥=MA阿拉伯文=ar=拉托维亚文(列托)=lv=德文=de印度尼西亚=ID印度尼西亚文=in=克罗地亚文=hr南非=ZA英文=en韩国=KR朝鲜文=ko突尼斯=TN阿拉伯文=ar=印度尼西亚文=in=日文=ja塞尔维亚=RS塞尔维亚文=sr白俄罗斯=BY白俄罗斯文=be台湾地区=TW中文=zh苏丹=SD阿拉伯文=ar=葡萄牙文=pt=冰岛文=is日本=JP日文=ja玻利维亚=BO西班牙文=es阿尔及利亚=DZ阿拉伯文=ar=马来文=ms阿根廷=AR西班牙文=es阿拉伯联合酋长国=AE阿拉伯文=ar加拿大=CA法文=fr=斯洛文尼亚文=sl=西班牙文=es立陶宛=LT立陶宛文=lt黑山=ME塞尔维亚文=sr叙利亚=SY阿拉伯文=ar俄罗斯=RU俄文=ru比利时=BE法文=fr西班牙=ES西班牙文=es=保加利亚文=bg以色列=IL希伯来文=iw=瑞典文=sv=英文=en=希伯来文=iw丹麦=DK丹麦文=da哥斯达黎加=CR西班牙文=es香港=HK中文=zh=中文=zh西班牙=ES加泰罗尼亚文=ca泰国=TH泰文=th乌克兰=UA乌克兰文=uk多米尼加共和国=DO西班牙文=es委内瑞拉=VE西班牙文=es波兰=PL波兰文=pl利比亚=LY阿拉伯文=ar约旦=JO阿拉伯文=ar=意大利文=it=乌克兰文=uk匈牙利=HU匈牙利文=hu=爱尔兰文=ga危地马拉=GT西班牙文=es巴拉圭=PY西班牙文=es保加利亚=BG保加利亚文=bg克罗地亚=HR克罗地亚文=hr波斯尼亚和黑山共和国=BA塞尔维亚文=sr罗马尼亚=RO罗马尼亚文=ro卢森堡=LU法文=fr=挪威文=no=立陶宛文=lt新加坡=SG英文=en厄瓜多尔=EC西班牙文=es波斯尼亚和黑山共和国=BA塞尔维亚文=sr尼加拉瓜=NI西班牙文=es=斯洛伐克文=sk=俄文=ru=马耳他文=mt萨尔瓦多=SV西班牙文=es=荷兰文=nl印度=IN印地文=hi=爱沙尼亚文=et希腊=GR希腊文=el斯洛文尼亚=SI斯洛文尼亚文=sl意大利=IT意大利文=it日本=JP日文=ja卢森堡=LU德文=de瑞士=CH法文=fr马耳他=MT马耳他文=mt巴林=BH阿拉伯文=ar=阿尔巴尼亚文=sq=越南文=vi黑山=ME塞尔维亚文=sr巴西=BR葡萄牙文=pt挪威=NO挪威文=no=希腊文=el瑞士=CH德文=de新加坡=SG中文=zh科威特=KW阿拉伯文=ar埃及=EG阿拉伯文=ar爱尔兰=IE爱尔兰文=ga秘鲁=PE西班牙文=es捷克共和国=CZ捷克文=cs土耳其=TR土耳其文=tr=捷克文=cs乌拉圭=UY西班牙文=es爱尔兰=IE英文=en印度=IN英文=en阿曼=OM阿拉伯文=ar塞尔维亚及黑山=CS塞尔维亚文=sr=加泰罗尼亚文=ca=白俄罗斯文=be=塞尔维亚文=sr=朝鲜文=ko阿尔巴尼亚=AL阿尔巴尼亚文=sq葡萄牙=PT葡萄牙文=pt拉脱维亚=LV拉托维亚文(列托)=lv塞尔维亚=RS塞尔维亚文=sr斯洛伐克=SK斯洛伐克文=sk墨西哥=MX西班牙文=es澳大利亚=AU英文=en挪威=NO挪威文=no新西兰=NZ英文=en瑞典=SE瑞典文=sv=罗马尼亚文=ro黎巴嫩=LB阿拉伯文=ar德国=DE德文=de泰国=TH泰文=th=土耳其文=tr哥伦比亚=CO西班牙文=es菲律宾=PH英文=en爱沙尼亚=EE爱沙尼亚文=et塞浦路斯=CY希腊文=el=匈牙利文=hu法国=FR法文=fr
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156

参考:

Android学习—-自适应国际化语言

Android Studio一键生成快速开发实现语言国际化

有关Android国际化的一点积累

 

关注我的公众号,轻松了解和学习更多技术
  Android自适应国际化语言