Android 国际化全知道

在开发中,我们经常会涉及到国际化的问题..而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

类似如下图:

Android 国际化全知道_第1张图片

3、其他地方需要国际化:在其他地方加载国际化资源

   很多时候我们需要加载远程图片,然后又有实现国际化,,这种情况下就有使用到获取系统当前语言的方法

    /**
     * 更新获取当前语言环境
     */
    public void upLanguage(){
        Locale able= getResources().getConfiguration().locale;
        if (able.equals(Locale.SIMPLIFIED_CHINESE)) {
            //中文
            isChina=true;
        } else {
            //其他
            isChina=false;
        }
    }

Android系统已经自带有很多判断国家和地区的变量...详细请看源码即可..下面给出源码部分截图

Android 国际化全知道_第2张图片

获取语言的方法正常情况下放在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中注册广播才会生效,当然也可以动态注册广播,这里给出静态注册的例子
 
        
            
                
            
        

 

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());
    }

 

你可能感兴趣的:(笔记,教程)