最近公司可能计划要接一个多语言的项目,提前把坑踩一下,自己备个忘,大神请无视这篇文章。
实现多语言,的步骤:
1.使用Android Studio 开发,将工程视图切换到project模式,而不是Android模式,这样可以进入项目的根目录,并创建需要的目录。
2.进入到res目录下,创建对应语言的values目录,命名规则为values-语言的缩写-语言的简称,例如“values-zh-rCN”,表达的意思为。“中文-简体中文”
3.在对应的目录下,创建string.xml,每次定义一个新的文字时,要在每个语言包里定义相同名字的变量,例如,在中文values-zh-rCN 目录下的string.xml里定义了
<string name="hello_world">你好,世界!</string>
那么在英文values-en目录下的string.xml中也要定义
<string name="hello_world">Hello World!</string>按照以上方式定义后,当系统语言切换后,项目中的文字会对应切换为定义的语言。
4.系统的匹配模式为,优先使用“语言缩写-语言简称”目录下的文字资源例如“values-zh-rCN”,如果没有将使用只有语言缩写的文字资源例如“values-zh”,如果没有对应的语言,将会使用默认的values目录下的string.xml资源
5.在项目运行过程中,如何切换语言。代码如下
Configuration config = getResources().getConfiguration();//获取系统的配置如果Local中没有需要的语言常量,可以手动创建,参数为需要的语言的缩写,代码如下:
config.locale = Locale.ENGLISH;//修改语言
getResources().updateConfiguration(config, getResources().getDisplayMetrics());//更新配置
Locale locale = (new Locale("ar"));//创建阿拉伯语‘ar’为阿拉伯语缩写,将缩写作为参数传入即可返回一个local对象,这样就可以切换到需要的语言了;
当语言切换完成后,需要重启页面才会生效,例如重新启动Activity:
startActivity(new Intent(this,MainActivity.class));6.时间各国语言的缩写如下:
各国语言缩写-各国语言简称
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 中文 (*)
最后附上一个简单的切换DEMO
MainActivity.class
package jetsen.cn.as_react_demo;布局xml文件
import android.content.Intent;
import android.content.res.Configuration;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import java.util.Locale;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
}
private void initViews() {
findViewById(R.id.cn).setOnClickListener(this);
findViewById(R.id.ar).setOnClickListener(this);
findViewById(R.id.en).setOnClickListener(this);
findViewById(R.id.es).setOnClickListener(this);
findViewById(R.id.fr).setOnClickListener(this);
findViewById(R.id.ru).setOnClickListener(this);
}
public void changeAppLanguage(Locale locale) {
Configuration config = getResources().getConfiguration();//获取系统的配置
config.locale = locale;//将语言更改为
getResources().updateConfiguration(config, getResources().getDisplayMetrics());//更新配置
startActivity(new Intent(this,MainActivity.class));
this.finish();
Toast.makeText(this,"切换语言",Toast.LENGTH_SHORT).show();
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.cn:
changeAppLanguage(Locale.SIMPLIFIED_CHINESE);
break;
case R.id.en:
changeAppLanguage(Locale.ENGLISH);
break;
case R.id.ar:
changeAppLanguage(new Locale("ar"));
break;
case R.id.es:
changeAppLanguage(new Locale("es"));
break;
case R.id.ru:
changeAppLanguage(new Locale("ru"));
break;
case R.id.fr:
changeAppLanguage(Locale.FRENCH);
break;
}
}
}
<?xml version="1.0" encoding="utf-8"?>英语:values-en
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="jetsen.cn.as_react_demo.MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:id="@+id/textView"
android:gravity="center"
/>
<Button
android:text="@string/cn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/cn" />
<Button
android:text="@string/en"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/en" />
<Button
android:text="@string/ar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/ar" />
<Button
android:text="@string/es"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/es" />
<Button
android:text="@string/ru"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/ru" />
<Button
android:text="@string/fr"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/fr" />
</LinearLayout>
<resources>阿拉伯语:values-ar
<!--英语-->
<string name="hello_world">Hello World!</string>
<string name="cn">Chinese</string>
<string name="en">English</string>
<string name="ar">Arabic</string>
<string name="es">Spanish</string>
<string name="ru">Russian</string>
<string name="fr">French</string>
</resources>
<?xml version="1.0" encoding="utf-8"?>西班牙语:values-es
<resources>
<!--阿拉伯语-->
<string name="hello_world">مرحبا العالم</string>
<string name="cn"> الصينية </string>
<string name="en"> الإنجليزية </string>
<string name="ar"> بالعربية</string>
<string name="es"> الإسبانية </string>
<string name="ru"> الروسية </string>
<string name="fr"> الفرنسية </string>
</resources>
<?xml version="1.0" encoding="utf-8"?>法语:values-fr
<resources>
<!--西班牙-->
<string name="hello_world">Hola mundo!</string>
<string name="cn">El chino</string>
<string name="en">En inglés</string>
<string name="ar">En árabe</string>
<string name="es">Español</string>
<string name="ru">El ruso</string>
<string name="fr">El francés</string>
</resources>
<?xml version="1.0" encoding="utf-8"?>俄语:values-ru
<resources>
<!--法国-->
<string name="hello_world">bonjour, monde !</string>
<string name="cn">Chinois</string>
<string name="en">En anglais</string>
<string name="ar">Arabe</string>
<string name="es">Espagnol</string>
<string name="ru">Russe</string>
<string name="fr">Français</string>
</resources>
<?xml version="1.0" encoding="utf-8"?>中文:values-zh-rCN
<resources>
<!--俄罗斯-->
<string name="hello_world"> здравствуй, мир </string>
<string name="cn">китайский</string>
<string name="en">английский</string>
<string name="ar">арабский</string>
<string name="es">испанский </string>
<string name="ru">русский</string>
<string name="fr">французский</string>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello_world">你好,世界!</string>
<string name="cn">中文</string>
<string name="en">英文</string>
<string name="ar">阿拉伯文</string>
<string name="es">西班牙文</string>
<string name="ru">俄文</string>
<string name="fr">法文</string>
</resources>