Android 中设置指定语言

Posted 邹奇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 中设置指定语言相关的知识,希望对你有一定的参考价值。

文章目录

背景

有一个项目,需要提供英文版 app 给到海外客户使用,正常来说切换系统语言为英文即可(因为原来就有做多语言适配,支持英文语言)。

但是为了方便海外客户,就提了个变态需求给到开发:不管系统语言设置是啥,都使用英文语言展示。


实现

关于 app 多语言适配的方案这里就不再提了,网上有很多解决方案供同学们自己参考学习。

工具类代码如下:

package com.example.multilangfitdemo.util;

import android.content.Context;
import android.content.res.Configuration;
import android.os.Build;
import android.text.TextUtils;
import android.util.DisplayMetrics;

import java.util.Locale;

public class LanguageUtil 

    private volatile static LanguageUtil languageUtil;

    private LanguageUtil()

    // instance
    public static LanguageUtil instance()
        if (languageUtil == null)
            synchronized (LanguageUtil.class)
                if (languageUtil == null)
                    languageUtil = new LanguageUtil();
                
            
        
        return languageUtil;
    

    /**
     *
     * @param context
     * @param language
     */
    public static void setDefaultLanguage(Context context, String language)
        if (TextUtils.isEmpty(language))
            return;
        

        Locale locale = new Locale(language);
        Locale.setDefault(locale);

        Configuration configuration = context.getResources().getConfiguration();
        DisplayMetrics metrics = context.getResources().getDisplayMetrics();

        // 不为 en 的值,默认为使用中文。(有需要同学可自行修改逻辑)
        Locale loc = Locale.CHINA;
        if (language.equals("en"))
            loc = Locale.ENGLISH;
        

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
            configuration.setLocale(loc);
        else 
            configuration.locale = loc;
        

        context.getResources().updateConfiguration(configuration, metrics);
    



Activity 基类的 onCreate() 生命周期方法中调用:

public class BaseActivity extends AppCompatActivity 

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        LanguageUtil.setDefaultLanguage(this, "en");
    


验证



运行后如上图示,系统语言为中文,不过 app 展示的也是英文语言版本。


总结

另外不要在自定义的 Application 类中获取 getResources() ,亲自测试后发现设置指定语言功能并没有生效,后面发现是 getResources 这个方法导致。

想深入了解的同学参考如下:

Android Appication及Activity的 Resource 生成代码分析

千万不要在application里面重写getResources


技术永不眠!我们下期见!

以上是关于Android 中设置指定语言的主要内容,如果未能解决你的问题,请参考以下文章

Android 中设置指定语言

无法在 android 的 AlramManager 中设置指定日期

如何在android APP中设置系统语言

Flutter Tar:无法在 android studio IOS 中设置默认语言环境

如何在 Android 中设置 libsvm?

如何在 Android 中设置持久/定期计划?