Android切换语言
1:各国语言的string values2:在功能清单文件中对要进行切换acitivity 进行配置 android:configChanges="locale"
1 public static void initLanguage(Context context) { 2 //应用内配置语言 3 Resources resources = context.getResources();//获得res资源对象 4 Configuration config = resources.getConfiguration();//获得设置对象 5 DisplayMetrics dm = resources.getDisplayMetrics();//获得屏幕参数:主要是分辨率,像素等。 6 if (SDKConfig.getLanguage().equals("zh")) { 7 config.locale = Locale.SIMPLIFIED_CHINESE; //简体中文 8 } else { 9 config.locale = new Locale("ar");10 }11 resources.updateConfiguration(config, dm);12 }
重启 Activity
我 们的 App 有个启动页 WelcomeActivity,类似微信那个小人启动页,如果从欢迎页重启,并不是一个好的体验,应该和微信的语言设置一样,直接回到 HomeActivity ,而不是从 WelcomeActivity 重新打开。实现其实也很简单,代码如下:
Intent intent = new Intent(this, HomeActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); getActivity().startActivity(intent);
正常来说这段代码应该是没问题的,但是假如你的 App 存在某个 activity 和当前设置页 activity 不在一个 task 栈内的话(比如你从某个通知页用 FLAG_ACTIVITY_NEW_TASK
启动的一个 activity),就不会应用语言设置。因此可以直接杀掉当前 App 的进程,保证是“整个”重启了:
1 Intent intent = new Intent(this, HomeActivity.class);2 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);3 startActivity(intent);4 // 杀掉进程5 android.os.Process.killProcess(android.os.Process.myPid());6 System.exit(0);
按道理杀掉进程的两行代码任意一行即可,但是查阅相关资料,还是两个都加上吧,如果有详细了解欢迎沟通。此段代码其实参考自 CustomActivityOnCrash 开源项目,有兴趣的可以研究下这个开源库捕捉崩溃信息,重启应用部分的代码。
个人觉得这种重启HomeActivity的方法太粗暴了而且体验不好,不过貌似微信也是这么重启了HomeActivity。一般语言切换的设置会藏的比较深,比如微信,如果一个用户对手机操作不熟或者说对这个应用不熟,不小心切换了不知道什么语言然后给我跳回主页,再想设回中文就麻烦咯。所以,我认为最好是切完语言立即刷新然后还是停留当前页比较好。具体实现如下:
1、还是要添加多语言文件,跟上面的步骤1一样;
2、在BaseActivity中实现语言切换代码:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EventBus.getDefault().register(this); changeAppLanguage(); }
1 public void changeAppLanguage() { 2 String sta = Store.getLanuageIsChinese() ? "zh" : "en";//这是SharedPreferences工具类,用于保存设置,代码很简单,自己实现吧 3 // 本地语言设置 4 Locale myLocale = new Locale(sta); 5 Resources res = getResources(); 6 DisplayMetrics dm = res.getDisplayMetrics(); 7 Configuration conf = res.getConfiguration(); 8 conf.locale = myLocale; 9 res.updateConfiguration(conf, dm);10 }
1 public void onEvent(String str) {2 switch (str) {3 case Constant.EVENT_REFRESH_LANGUAGE:4 changeAppLanguage();5 recreate();//刷新界面6 break;7 }8 }
1 @Override2 protected void onDestroy() {3 super.onDestroy();4 EventBus.getDefault().unregister(this);5 }
3、设置界面中的实现自然就是更新sharedPreferences 中的设置,然后发送EventBus就行啦
if () { //中文2 Store.setLanuageIsChinese(true);3 } else if () { //英文4 Store.setLanuageIsChinese(false);5 }6 EventBus.getDefault().post(Constant.EVENT_REFRESH_LANGUAGE);
各国语言缩写-各国语言简称en 英文 en_US 英文 (美国) ar 阿拉伯文 ar_AE 阿拉伯文 (阿拉伯联合酋长国) ar_BH 阿拉伯文 (巴林) ar_DZ 阿拉伯文 (阿尔及利亚) ar_EG 阿拉伯文 (埃及) ar_IQ 阿拉伯文 (伊拉克) ar_JO 阿拉伯文 (约旦) ar_KW 阿拉伯文 (科威特) ar_LB 阿拉伯文 (黎巴嫩) ar_LY 阿拉伯文 (利比亚) ar_MA 阿拉伯文 (摩洛哥) ar_OM 阿拉伯文 (阿曼) ar_QA 阿拉伯文 (卡塔尔) ar_SA 阿拉伯文 (沙特阿拉伯) ar_SD 阿拉伯文 (苏丹) ar_SY 阿拉伯文 (叙利亚) ar_TN 阿拉伯文 (突尼斯) ar_YE 阿拉伯文 (也门) be 白俄罗斯文 be_BY 白俄罗斯文 (白俄罗斯) bg 保加利亚文 bg_BG 保加利亚文 (保加利亚) ca 加泰罗尼亚文 ca_ES 加泰罗尼亚文 (西班牙) ca_ES_EURO 加泰罗尼亚文 (西班牙,Euro) cs 捷克文 cs_CZ 捷克文 (捷克共和国) da 丹麦文 da_DK 丹麦文 (丹麦) de 德文 de_AT 德文 (奥地利) de_AT_EURO 德文 (奥地利,Euro) de_CH 德文 (瑞士) de_DE 德文 (德国) de_DE_EURO 德文 (德国,Euro) de_LU 德文 (卢森堡) de_LU_EURO 德文 (卢森堡,Euro) el 希腊文 el_GR 希腊文 (希腊) en_AU 英文 (澳大利亚) en_CA 英文 (加拿大) en_GB 英文 (英国) en_IE 英文 (爱尔兰) en_IE_EURO 英文 (爱尔兰,Euro) en_NZ 英文 (新西兰) en_ZA 英文 (南非) es 西班牙文 es_BO 西班牙文 (玻利维亚) es_AR 西班牙文 (阿根廷) es_CL 西班牙文 (智利) es_CO 西班牙文 (哥伦比亚) es_CR 西班牙文 (哥斯达黎加) es_DO 西班牙文 (多米尼加共和国) es_EC 西班牙文 (厄瓜多尔) es_ES 西班牙文 (西班牙) es_ES_EURO 西班牙文 (西班牙,Euro) es_GT 西班牙文 (危地马拉) es_HN 西班牙文 (洪都拉斯) es_MX 西班牙文 (墨西哥) es_NI 西班牙文 (尼加拉瓜) et 爱沙尼亚文 es_PA 西班牙文 (巴拿马) es_PE 西班牙文 (秘鲁) es_PR 西班牙文 (波多黎哥) es_PY 西班牙文 (巴拉圭) es_SV 西班牙文 (萨尔瓦多) es_UY 西班牙文 (乌拉圭) es_VE 西班牙文 (委内瑞拉) et_EE 爱沙尼亚文 (爱沙尼亚) fi 芬兰文 fi_FI 芬兰文 (芬兰) fi_FI_EURO 芬兰文 (芬兰,Euro) fr 法文 fr_BE 法文 (比利时) fr_BE_EURO 法文 (比利时,Euro) fr_CA 法文 (加拿大) fr_CH 法文 (瑞士) fr_FR 法文 (法国) fr_FR_EURO 法文 (法国,Euro) fr_LU 法文 (卢森堡) fr_LU_EURO 法文 (卢森堡,Euro) hr 克罗地亚文 hr_HR 克罗地亚文 (克罗地亚) hu 匈牙利文 hu_HU 匈牙利文 (匈牙利) is 冰岛文 is_IS 冰岛文 (冰岛) it 意大利文 it_CH 意大利文 (瑞士) it_IT 意大利文 (意大利) it_IT_EURO 意大利文 (意大利,Euro) iw 希伯来文 iw_IL 希伯来文 (以色列) ja 日文 ja_JP 日文 (日本) ko 朝鲜文 ko_KR 朝鲜文 (南朝鲜) lt 立陶宛文 lt_LT 立陶宛文 (立陶宛) lv 拉托维亚文(列托) lv_LV 拉托维亚文(列托) (拉脱维亚) mk 马其顿文 mk_MK 马其顿文 (马其顿王国) nl 荷兰文 nl_BE 荷兰文 (比利时) nl_BE_EURO 荷兰文 (比利时,Euro) nl_NL 荷兰文 (荷兰) nl_NL_EURO 荷兰文 (荷兰,Euro) no 挪威文 no_NO 挪威文 (挪威) no_NO_NY 挪威文 (挪威,Nynorsk) pl 波兰文 pl_PL 波兰文 (波兰) pt 葡萄牙文 pt_BR 葡萄牙文 (巴西) pt_PT 葡萄牙文 (葡萄牙) pt_PT_EURO 葡萄牙文 (葡萄牙,Euro) ro 罗马尼亚文 ro_RO 罗马尼亚文 (罗马尼亚) ru 俄文 ru_RU 俄文 (俄罗斯) sh 塞波尼斯-克罗地亚文 sh_YU 塞波尼斯-克罗地亚文 (南斯拉夫) sk 斯洛伐克文 sk_SK 斯洛伐克文 (斯洛伐克) sl 斯洛文尼亚文 sl_SI 斯洛文尼亚文 (斯洛文尼亚) sq 阿尔巴尼亚文 sq_AL 阿尔巴尼亚文 (阿尔巴尼亚) sr 塞尔维亚文 sr_YU 塞尔维亚文 (南斯拉夫) sv 瑞典文 sv_SE 瑞典文 (瑞典) th 泰文 th_TH 泰文 (泰国) tr 土耳其文 tr_TR 土耳其文 (土耳其) uk 乌克兰文 uk_UA 乌克兰文 (乌克兰) zh 中文 zh_CN 中文 (中国) zh_HK 中文 (香港) zh_TW 中文 (台湾) Countries and Regions 国家或地区 国际域名缩写Angola 安哥拉 AOAfghanistan 阿富汗 AFAlbania 阿尔巴尼亚 ALAlgeria 阿尔及利亚 DZAndorra 安道尔共和国 ADAnguilla 安圭拉岛 AIAntigua and Barbuda 安提瓜和巴布达 AGArgentina 阿根廷 ARArmenia 亚美尼亚 AMAscension 阿森松 Australia 澳大利亚 AUAustria 奥地利 ATAzerbaijan 阿塞拜疆 AZBahamas 巴哈马 BSBahrain 巴林 BHBangladesh 孟加拉国 BDBarbados 巴巴多斯 BBBelarus 白俄罗斯 BYBelgium 比利时 BEBelize 伯利兹 BZBenin 贝宁 BJBermuda Is. 百慕大群岛 BMBolivia 玻利维亚 BOBotswana 博茨瓦纳 BWBrazil 巴西 BRBrunei 文莱 BNBulgaria 保加利亚 BGBurkina-faso 布基纳法索 BFBurma 缅甸 MMBurundi 布隆迪 BICameroon 喀麦隆 CMCanada 加拿大 CACayman Is. 开曼群岛 Central African Republic 中非共和国 CFChad 乍得 TDChile 智利 CLChina 中国 CNColombia 哥伦比亚 COCongo 刚果 CGCook Is. 库克群岛 CKCosta Rica 哥斯达黎加 CRCuba 古巴 CUCyprus 塞浦路斯 CYCzech Republic 捷克 CZDenmark 丹麦 DKDjibouti 吉布提 DJDominica Rep. 多米尼加共和国 DOEcuador 厄瓜多尔 ECEgypt 埃及 EGEI Salvador 萨尔瓦多 SVEstonia 爱沙尼亚 EEEthiopia 埃塞俄比亚 ETFiji 斐济 FJFinland 芬兰 FIFrance 法国 FRFrench Guiana 法属圭亚那 GFGabon 加蓬 GAGambia 冈比亚 GMGeorgia 格鲁吉亚 GEGermany 德国 DEGhana 加纳 GHGibraltar 直布罗陀 GIGreece 希腊 GRGrenada 格林纳达 GDGuam 关岛 GUGuatemala 危地马拉 GTGuinea 几内亚 GNGuyana 圭亚那 GYHaiti 海地 HTHonduras 洪都拉斯 HNHongkong 香港 HKHungary 匈牙利 HUIceland 冰岛 ISIndia 印度 INIndonesia 印度尼西亚 IDIran 伊朗 IRIraq 伊拉克 IQIreland 爱尔兰 IEIsrael 以色列 ILItaly 意大利 ITIvory Coast 科特迪瓦 Jamaica 牙买加 JMJapan 日本 JPJordan 约旦 JOKampuchea (Cambodia ) 柬埔寨 KHKazakstan 哈萨克斯坦 KZKenya 肯尼亚 KEKorea 韩国 KRKuwait 科威特 KWKyrgyzstan 吉尔吉斯坦 KGLaos 老挝 LALatvia 拉脱维亚 LVLebanon 黎巴嫩 LBLesotho 莱索托 LSLiberia 利比里亚 LRLibya 利比亚 LYLiechtenstein 列支敦士登 LILithuania 立陶宛 LTLuxembourg 卢森堡 LUMacao 澳门 MOMadagascar 马达加斯加 MGMalawi 马拉维 MWMalaysia 马来西亚 MYMaldives 马尔代夫 MVMali 马里 MLMalta 马耳他 MTMariana Is 马里亚那群岛 Martinique 马提尼克 Mauritius 毛里求斯 MUMexico 墨西哥 MXMoldova, Republic of 摩尔多瓦 MDMonaco 摩纳哥 MCMongolia 蒙古 MNMontserrat Is 蒙特塞拉特岛 MSMorocco 摩洛哥 MAMozambique 莫桑比克 MZNamibia 纳米比亚 NANauru 瑙鲁 NRNepal 尼泊尔 NPNetheriands Antilles 荷属安的列斯 Netherlands 荷兰 NLNew Zealand 新西兰 NZNicaragua 尼加拉瓜 NINiger 尼日尔 NENigeria 尼日利亚 NGNorth Korea 朝鲜 KPNorway 挪威 NOOman 阿曼 OMPakistan 巴基斯坦 PKPanama 巴拿马 PAPapua New Cuinea 巴布亚新几内亚 PGParaguay 巴拉圭 PYPeru 秘鲁 PEPhilippines 菲律宾 PHPoland 波兰 PLFrench Polynesia 法属玻利尼西亚 PFPortugal 葡萄牙 PTPuerto Rico 波多黎各 PRQatar 卡塔尔 QAReunion 留尼旺 Romania 罗马尼亚 RORussia 俄罗斯 RUSaint Lueia 圣卢西亚 LCSaint Vincent 圣文森特岛 VCSamoa Eastern 东萨摩亚(美) Samoa Western 西萨摩亚 San Marino 圣马力诺 SMSao Tome and Principe 圣多美和普林西比 STSaudi Arabia 沙特阿拉伯 SASenegal 塞内加尔 SNSeychelles 塞舌尔 SCSierra Leone 塞拉利昂 SLSingapore 新加坡 SGSlovakia 斯洛伐克 SKSlovenia 斯洛文尼亚 SISolomon Is 所罗门群岛 SBSomali 索马里 SOSouth Africa 南非 ZASpain 西班牙 ESSri Lanka 斯里兰卡 LKSt.Lucia 圣卢西亚 LCSt.Vincent 圣文森特 VCSudan 苏丹 SDSuriname 苏里南 SRSwaziland 斯威士兰 SZSweden 瑞典 SESwitzerland 瑞士 CHSyria 叙利亚 SYTaiwan 台湾省 TWTajikstan 塔吉克斯坦 TJTanzania 坦桑尼亚 TZThailand 泰国 THTogo 多哥 TGTonga 汤加 TOTrinidad and Tobago 特立尼达和多巴哥 TTTunisia 突尼斯 TNTurkey 土耳其 TRTurkmenistan 土库曼斯坦 TMUganda 乌干达 UGUkraine 乌克兰 UAUnited Arab Emirates 阿拉伯联合酋长国 AEUnited Kiongdom 英国 GBUnited States of America 美国 USUruguay 乌拉圭 UYUzbekistan 乌兹别克斯坦 UZVenezuela 委内瑞拉 VEVietnam 越南 VNYemen 也门 YEYugoslavia 南斯拉夫 YUZimbabwe 津巴布韦 ZWZaire 扎伊尔 ZRZambia 赞比亚 ZM
转载于:https://www.cnblogs.com/hello-studio/p/9640731.html
更多相关文章
- Android(安卓)多语言 多地区对应表
- Android多国语言文件夹
- 【Android】多语言Values
- android多国语言文件夹汇总
- Android多语言适配values文件夹命名
- Android多国语言-国家代码清单
- android 杂项-备忘
- Archos G9 平板將在 2012 年「前三月」得到 Ice Cream Sandwich
- android之res/values、国际化