Android切换语言

 
   
1:各国语言的string values
2:在功能清单文件中对要进行切换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 @Override 2 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    安哥拉    AO
Afghanistan    阿富汗    AF
Albania    阿尔巴尼亚    AL
Algeria    阿尔及利亚    DZ
Andorra    安道尔共和国    AD
Anguilla    安圭拉岛    AI
Antigua and Barbuda    安提瓜和巴布达    AG
Argentina    阿根廷    AR
Armenia    亚美尼亚    AM
Ascension    阿森松     
Australia    澳大利亚    AU
Austria    奥地利    AT
Azerbaijan    阿塞拜疆    AZ
Bahamas    巴哈马    BS
Bahrain    巴林    BH
Bangladesh    孟加拉国    BD
Barbados    巴巴多斯    BB
Belarus    白俄罗斯    BY
Belgium    比利时    BE
Belize    伯利兹    BZ
Benin    贝宁    BJ
Bermuda Is.    百慕大群岛    BM
Bolivia    玻利维亚    BO
Botswana    博茨瓦纳    BW
Brazil    巴西    BR
Brunei    文莱    BN
Bulgaria    保加利亚    BG
Burkina-faso    布基纳法索    BF
Burma    缅甸    MM
Burundi    布隆迪    BI
Cameroon    喀麦隆    CM
Canada    加拿大    CA
Cayman Is.    开曼群岛     
Central African Republic    中非共和国    CF
Chad    乍得    TD
Chile    智利    CL
China    中国    CN
Colombia    哥伦比亚    CO
Congo    刚果    CG
Cook Is.    库克群岛    CK
Costa Rica    哥斯达黎加    CR
Cuba    古巴    CU
Cyprus    塞浦路斯    CY
Czech Republic    捷克    CZ
Denmark    丹麦    DK
Djibouti    吉布提    DJ
Dominica Rep.    多米尼加共和国    DO
Ecuador    厄瓜多尔    EC
Egypt    埃及    EG
EI Salvador    萨尔瓦多    SV
Estonia    爱沙尼亚    EE
Ethiopia    埃塞俄比亚    ET
Fiji    斐济    FJ
Finland    芬兰    FI
France    法国    FR
French Guiana    法属圭亚那    GF
Gabon    加蓬    GA
Gambia    冈比亚    GM
Georgia    格鲁吉亚    GE
Germany    德国    DE
Ghana    加纳    GH
Gibraltar    直布罗陀    GI
Greece    希腊    GR
Grenada    格林纳达    GD
Guam    关岛    GU
Guatemala    危地马拉    GT
Guinea    几内亚    GN
Guyana    圭亚那    GY
Haiti    海地    HT
Honduras    洪都拉斯    HN
Hongkong    香港    HK
Hungary    匈牙利    HU
Iceland    冰岛    IS
India    印度    IN
Indonesia    印度尼西亚    ID
Iran    伊朗    IR
Iraq    伊拉克    IQ
Ireland    爱尔兰    IE
Israel    以色列    IL
Italy    意大利    IT
Ivory Coast    科特迪瓦     
Jamaica    牙买加    JM
Japan    日本    JP
Jordan    约旦    JO
Kampuchea (Cambodia )    柬埔寨    KH
Kazakstan    哈萨克斯坦    KZ
Kenya    肯尼亚    KE
Korea    韩国    KR
Kuwait    科威特    KW
Kyrgyzstan    吉尔吉斯坦    KG
Laos    老挝    LA
Latvia    拉脱维亚    LV
Lebanon    黎巴嫩    LB
Lesotho    莱索托    LS
Liberia    利比里亚    LR
Libya    利比亚    LY
Liechtenstein    列支敦士登    LI
Lithuania    立陶宛    LT
Luxembourg    卢森堡    LU
Macao    澳门    MO
Madagascar    马达加斯加    MG
Malawi    马拉维    MW
Malaysia    马来西亚    MY
Maldives    马尔代夫    MV
Mali    马里    ML
Malta    马耳他    MT
Mariana Is    马里亚那群岛     
Martinique    马提尼克     
Mauritius    毛里求斯    MU
Mexico    墨西哥    MX
Moldova, Republic of    摩尔多瓦    MD
Monaco    摩纳哥    MC
Mongolia    蒙古    MN
Montserrat Is    蒙特塞拉特岛    MS
Morocco    摩洛哥    MA
Mozambique    莫桑比克    MZ
Namibia    纳米比亚    NA
Nauru    瑙鲁    NR
Nepal    尼泊尔    NP
Netheriands Antilles    荷属安的列斯     
Netherlands    荷兰    NL
New Zealand    新西兰    NZ
Nicaragua    尼加拉瓜    NI
Niger    尼日尔    NE
Nigeria    尼日利亚    NG
North Korea    朝鲜    KP
Norway    挪威    NO
Oman    阿曼    OM
Pakistan    巴基斯坦    PK
Panama    巴拿马    PA
Papua New Cuinea    巴布亚新几内亚    PG
Paraguay    巴拉圭    PY
Peru    秘鲁    PE
Philippines    菲律宾    PH
Poland    波兰    PL
French Polynesia    法属玻利尼西亚    PF
Portugal    葡萄牙    PT
Puerto Rico    波多黎各    PR
Qatar    卡塔尔    QA
Reunion    留尼旺     
Romania    罗马尼亚    RO
Russia    俄罗斯    RU
Saint Lueia    圣卢西亚    LC
Saint Vincent    圣文森特岛    VC
Samoa Eastern    东萨摩亚(美)     
Samoa Western    西萨摩亚     
San Marino    圣马力诺    SM
Sao Tome and Principe    圣多美和普林西比    ST
Saudi Arabia    沙特阿拉伯    SA
Senegal    塞内加尔    SN
Seychelles    塞舌尔    SC
Sierra Leone    塞拉利昂    SL
Singapore    新加坡    SG
Slovakia    斯洛伐克    SK
Slovenia    斯洛文尼亚    SI
Solomon Is    所罗门群岛    SB
Somali    索马里    SO
South Africa    南非    ZA
Spain    西班牙    ES
Sri Lanka    斯里兰卡    LK
St.Lucia    圣卢西亚    LC
St.Vincent    圣文森特    VC
Sudan    苏丹    SD
Suriname    苏里南    SR
Swaziland    斯威士兰    SZ
Sweden    瑞典    SE
Switzerland    瑞士    CH
Syria    叙利亚    SY
Taiwan    台湾省    TW
Tajikstan    塔吉克斯坦    TJ
Tanzania    坦桑尼亚    TZ
Thailand    泰国    TH
Togo    多哥    TG
Tonga    汤加    TO
Trinidad and Tobago    特立尼达和多巴哥    TT
Tunisia    突尼斯    TN
Turkey    土耳其    TR
Turkmenistan    土库曼斯坦    TM
Uganda    乌干达    UG
Ukraine    乌克兰    UA
United Arab Emirates    阿拉伯联合酋长国    AE
United Kiongdom    英国    GB
United States of America    美国    US
Uruguay    乌拉圭    UY
Uzbekistan    乌兹别克斯坦    UZ
Venezuela    委内瑞拉    VE
Vietnam    越南    VN
Yemen    也门    YE
Yugoslavia    南斯拉夫    YU
Zimbabwe    津巴布韦    ZW
Zaire    扎伊尔    ZR
Zambia    赞比亚    ZM

 

转载于:https://www.cnblogs.com/hello-studio/p/9640731.html

你可能感兴趣的:(移动开发)