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

类似如下图:

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

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值