在开发中,我们经常会涉及到国际化的问题..而android自带的系统中带有完整的国际化系统..下面将简单的介绍下国际化的使用
1、字符串国际化:只要在 res 文件夹下新建对应语言的 values 文件夹,然后在对应的values文件夹下创建strings.xml即可
中文环境:values-zh
英语环境:values-en
美国英文环境:values-en-rUS
大陆地区中文环境: values-zh-cn
类似如下图:
2、图片国际化:在 res 下新建对应语言的 图片文件夹即可
英语环境下的:
mipmap-en-xxhdpi
mipmap-en-xxxhdpi
中文环境为:
mipmap-zh-xxhdpi
mipmap-zh-xxxhdpi
类似如下图:
3、其他地方需要国际化:在其他地方加载国际化资源
很多时候我们需要加载远程图片,然后又有实现国际化,,这种情况下就有使用到获取系统当前语言的方法
/**
* 更新获取当前语言环境
*/
public void upLanguage(){
Locale able= getResources().getConfiguration().locale;
if (able.equals(Locale.SIMPLIFIED_CHINESE)) {
//中文
isChina=true;
} else {
//其他
isChina=false;
}
}
Android系统已经自带有很多判断国家和地区的变量...详细请看源码即可..下面给出源码部分截图
获取语言的方法正常情况下放在app启动那里即可,如:Application中判断
当前也有可能出现特殊情况,那就是app开启了,,这个时候用户又去更换语言,这样可能会导致部分国际化不同步
google也考虑到了这个问题,所以提供了一个语言更换的广播,我们只有监听即可,监听方法如下:
public class LanguageReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equalsIgnoreCase(Intent.ACTION_LOCALE_CHANGED)) {
MyLog.i(TAG,"收到更换语言的广播");
//这里就可以全局获取判断更换语言
}
}
}
记得要在AndroidManifest中注册广播才会生效,当然也可以动态注册广播,这里给出静态注册的例子
<!--语言更换广播-->
<receiver android:name=".receiver.LanguageReceiver">
<intent-filter>
<action android:name="android.intent.action.LOCALE_CHANGED"/>
</intent-filter>
</receiver>
4、上面介绍的大部分都是在系统中修改语言的..某些app可能需要在app的设置中修改语言..那么你可以这样设置
/**
* 设置app的语言为中文
* @param context
*/
public static void initAppLanguage(Context context) {
if (context == null) {
return;
}
Locale.setDefault(Locale.SIMPLIFIED_CHINESE);
Configuration config = context.getResources().getConfiguration();
config.locale = Locale.SIMPLIFIED_CHINESE;
context.getResources().updateConfiguration(config , context.getResources().getDisplayMetrics());
}