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 的 AlramManager 中设置指定日期