Android多语言项目的实现

来源:互联网 发布:codewarrior软件 编辑:程序博客网 时间:2024/06/08 18:48

最近公司可能计划要接一个多语言的项目,提前把坑踩一下,自己备个忘,大神请无视这篇文章。


实现多语言,的步骤:

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();//获取系统的配置config.locale = Locale.ENGLISH;//修改语言getResources().updateConfiguration(config, getResources().getDisplayMetrics());//更新配置
如果Local中没有需要的语言常量,可以手动创建,参数为需要的语言的缩写,代码如下:

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;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文件

<?xml version="1.0" encoding="utf-8"?><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>
英语:values-en

<resources>    <!--英语-->    <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>
阿拉伯语:values-ar

<?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>
西班牙语:values-es

<?xml version="1.0" encoding="utf-8"?><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>
法语:values-fr

<?xml version="1.0" encoding="utf-8"?><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>
俄语:values-ru

<?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>
中文:values-zh-rCN

<?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>

0 0
原创粉丝点击