1、字符串国际化:只要在 res 文件夹下新建对应语言的 values 文件夹就好了,
如,英语环境下的,文件夹命名为:values-en
美国英文环境:values-en-rUS
中文环境为:values-zh
大陆地区中文环境: values-zh-cn
在 eclipse 下新建 Android 项目时,会在 res 目录下自动创建一个默认语言环境的文件夹 : values
当某一个资源没有在语言环境的对应的资源集合中找到时,就会使用 values 下的资源。
若某一个语言环境没有在项目中定义语言环境,那么也会使用 values 下的资源。
2.、图片国际化
同理。
在 res 下新建 drawable-zh 文件夹,存放中文环境下的图片
新建 drawable-en 作为英语环境下的图片
在 eclipse 下新建 Android 项目时,会在 res 目录下自动创建三个默认语言环境的文件夹:
drawable-hdpi
drawable-ldpi
drawable-mdpi
分别用于存放高、中。低分辨率的图片。Android 系统会根据手机的分辨率,而自动从不同的对应的某一个文件夹下去加载图片。
同样,它们也可以国际化,命名规则如:
drawable-zh-hdpi
drawable-en-ldpi
drawable-en-rUS-mdpi
可能遇到的问题:切换语言后,打开已登录状态的APP时,应用重启
提供两种解决方式:
方法一(治本):
在发生闪退的Activity中添加:
private boolean languageChange = false;
private static String lastLanguage="CN";
private String nowLanguange="";
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.e("123", "MainActivity--onConfigurationChanged");
Configuration cfg = getResources().getConfiguration();
if (cfg.orientation == Configuration.ORIENTATION_LANDSCAPE) {
System.out.println("ORIENTATION_LANDSCAPE");
} else if (cfg.orientation == Configuration.ORIENTATION_PORTRAIT) {
System.out.println("ORIENTATION_PORTRAIT");
}
nowLanguange = getResources().getConfiguration().locale.getCountry();
if(nowLanguange !=null && !nowLanguange.equals(lastLanguage))
{
lastLanguage =nowLanguange;
refresh();
}
}
private void refresh() {
//finish();
android.os.Process.killProcess(android.os.Process.myPid());
Intent intent = new Intent(MainActivity.this, MainActivity.class);
setIntent(intent);
startActivity(intent);
}
方法二(治标):
安装并首次进入APP时,定义一个变量记录当前手机语言环境并存放在SharedPreferences对象中,以后每次登陆都进行检查
if ( APP处于已登录状态 && !( 当前手机语言环境.equals (上次登录时的语言环境) ) ){
上次登录时的语言环境 == 当前手机语言环境;
退出登录;
重新登陆;
} else {
继续登陆;
}
以下为Locale下几种方法返回的结果,经比较可使用getCountry()方法记录并判断当前手机语言设置。
其中Locale locale = getResources().getConfiguration().locale;
中文简体:
locale.getLanguage()--zh
locale.getDisplayLanguage()--中文
locale.getCountry()--CN
locale.getDisplayName()--中文 (中国)
中文繁体:
locale.getLanguage()--zh
locale.getDisplayLanguage()--中文
locale.getCountry()--TW
locale.getDisplayName()--中文 (台灣)
美国英语:
locale.getLanguage()--en
locale.getDisplayLanguage()--English
locale.getCountry()--US
locale.getDisplayName()--English (United States)
英国英语:
locale.getLanguage()--en
locale.getDisplayLanguage()--English
locale.getCountry()--GB
locale.getDisplayName()--English (United Kingdom)
日语:
locale.getLanguage()--ja
locale.getDisplayLanguage()--日本語
locale.getCountry()--JP
locale.getDisplayName()--日本語 (日本)
VisualStudio添加不同语言环境的values资源文件目录:
指定环境,此处以添加美国英语为例:
下面添加一个文本资源文件,将英语文本放在这个文件中,即可切换为英文文本: