安卓中,国际化十分简单。 其实就是文件夹的问题。一般我们分两种情况。

一是app根据系统语言调用对应的资源文件夹,
二是在app里面根据用户的需求来更改语言。

前者比较简单,只需求创建对应国家的strings.xml,然后发在对应的文件夹里面就可以了。

app会根据系统语言选择对应的文件夹资源。(图片资源的国际化也是一样的)

一、语言国际化:

1、创建文件:

android国际化市场 android开发国际化_android

android国际化市场 android开发国际化_android_02

android国际化市场 android开发国际化_android国际化市场_03

android国际化市场 android开发国际化_android_04

2、在相应的文件中写上对应的语言

strings.xml (默认英文)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name"> Alipay</string>
    <string name="device"> device</string>
    <string name="add"> add</string>
</resources>

strings.xml(en)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Alipay</string>
    <string name="device"> device</string>
    <string name="add"> add</string>
</resources>

strings.xml(zh-rCN)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name"> 支付宝</string>
    <string name="device"> 设备</string>
    <string name="add"> 添加</string>
</resources>

**1、自动跟随系统:字符串资源的调用 **

在 Layout XML 调用字符串资源:

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello" />

在 Activity 获取字符串资源:

this.getString(R.string.hello)

从 Context 获取字符串资源:

context.getString(R.string.hello)

从 Application 获取字符串资源:

application.getString(R.string.hello)

二、手动切换:

/**
* 切换英文
*/
public void en(View v){
Resources resources = getResources();// 获得res资源对象
Configuration config = resources.getConfiguration();// 获得设置对象
DisplayMetrics dm = resources.getDisplayMetrics();// 获得屏幕参数:主要是分辨率,像素等。
config.locale = Locale.ENGLISH; // 英文
resources.updateConfiguration(config, dm);
finish();//如果不重启当前界面,是不会立马修改的
startActivity(new Intent(this,MainActivity.class));
}

/**
* 切换中文
*/
public void cn(View v){
Resources resources = getResources();// 获得res资源对象
Configuration config = resources.getConfiguration();// 获得设置对象
DisplayMetrics dm = resources.getDisplayMetrics();// 获得屏幕参数:主要是分辨率,像素等。
config.locale = Locale.CHINA; // 简体中文
resources.updateConfiguration(config, dm);
finish();如果不重启当前界面,是不会立马修改的
startActivity(new Intent(this,MainActivity.class));
}

额外:

Context类中:

public final String getString(int resId) {
        return getResources().getString(resId);
    }

java引用字符资源的方法,都是getString(),内部调用了getResources().getString(R.string.xx)的方法,为什么不是直接使用R.string.xx呢?

尝试了一下setText(R.string.xx)的方法,也能获取到正确的字符串值,但是如果是setText(R.string.xx + “个”),就会出现字符就会变成一串数字。

原因在于setText()方法有有两种不同的参数int resid和CharSequence text,而R.string.xx是一个自动生成的资源ID,setText(R.string.xx + “个”)就会先将资源ID转成字符串,从而出现一串数字的情况。

二、获取系统语言:

Locale locales1 = newConfig.getLocales().get(0);
String language1 = locales1.getLanguage() + "-" + locales1.getCountry();
Log.e(TAG, "onConfigurationChanged: language1===========" + language1);

Locale locale2;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    locale2 = getResources().getConfiguration().getLocales().get(0);
} else {
    locale2 = getResources().getConfiguration().locale;
}
String language2 = locale2.getLanguage() + "-" + locale2.getCountry();
Log.e(TAG, "onConfigurationChanged: language2===========" + language2);

//返回此Java虚拟机实例的默认区域设置
Locale locale3 = Locale.getDefault();
String language3 = locale3.getLanguage() + "-" + locale3.getCountry();
Log.e(TAG, "onConfigurationChanged: language3===========" + language3);

//获取用户实际设置的语言列表
//LocaleList是Locales的一个不可变列表,通常用于保持语言环境的用户首选项的有序列表。
Locale locale4 = LocaleList.getDefault().get(0);
String language4 = locale4.getLanguage() + "-" + locale4.getCountry();
Log.e(TAG, "onConfigurationChanged: language4===========" + language4);
if (locale4.getLanguage().equals("zh")) {
    //中文
} else {
    //英文
}
Locale locale = getResources().getConfiguration().locale;
String country = locale.getCountry();//区域
String language = locale.getLanguage();//语种

Log.e("111", "====country===" + country);//区域
Log.e("111", "====language===" + language); //语种

//简体中文           ====country===CN    ====language===zh
//繁体中文(澳门)    ====country===MO    ====language===zh
//繁体中文(台湾)    ====country===TW    ====language===zh
//繁体中文(香港)    ====country===HK    ====language===zh

//英文(香港)       ====country===HK    ====language===en
//英文(美国)       ====country===US    ====language===en
//英文(加拿大)     ====country===CA    ====language===en
//英文(英国)       ====country===GB    ====language===en

一般的语言包:values-语种-地区

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