> 文档中心 > Android实现多语言

Android实现多语言


Android实现多语言

1.引言

最近在学习Android多语言的使用,搭建一个Demo,成功实现了Android的多语言切换,这篇文章跟大家分享一下,文章最后会给出demo的github地址以及我参考的博文的地址。

2.思路

实现多语言,基本是通过一段核心代码,设置Locale然后更新到程序上下文中;再配合一些AndroidManifest配置以及资源文件的生成就可以了,非常简单。

2.1 核心代码:

   @Override    protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setLanguage(SharedPreferencesUtils.getString("application_language",null)); setContentView(R.layout.activity_main);    }    private void setLanguage(String language){ Resources resources = this.getResources(); Configuration configuration = resources.getConfiguration(); DisplayMetrics displayMetrics = resources.getDisplayMetrics(); if (language == null){     configuration.setLocale(Locale.getDefault()); }else {     if (language.equals("en")){  configuration.setLocale(Locale.ENGLISH);     }else if (language.equals("zh-rCN")){  configuration.setLocale(Locale.SIMPLIFIED_CHINESE);     }else if (language.equals("es")){  configuration.setLocale(new Locale("es"));     } } resources.updateConfiguration(configuration,displayMetrics);  }

上段代码最重要的就是Configuration的setLocale方法了。在Activity的onCreate方法中,在setContentView之前根据用户设置的语言将不同的Locale设置进上下文中,然后等到setContentView后显示的文本就是用户设置的语言了。

3.其他配置

3.1 BaseApplication

public class BaseApplication extends Application {    @Override    public void onCreate() { super.onCreate(); SharedPreferencesUtils.init(this); updateConfiguration(this);    }    private void updateConfiguration(Context context){ String language = SharedPreferencesUtils.getString("application_language", null); Resources resources = context.getResources(); Configuration configuration = resources.getConfiguration(); DisplayMetrics displayMetrics = resources.getDisplayMetrics(); configuration.setLocale(Locale.getDefault()); if (language != null) {     switch (language) {  case "en":      configuration.setLocale(Locale.ENGLISH);      break;  case "es":      configuration.setLocale(new Locale("es"));      break;  case "zh-rCN":      configuration.setLocale(Locale.SIMPLIFIED_CHINESE);      break;     } } resources.updateConfiguration(configuration,displayMetrics);    }}

这里updateConfiguration方法也就是我们上面说的核心代码,放在BaseApplication相当于做初始化。

3.2 AndroidManifest

<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/><application ... android:name=".BaseApplication" android:configChanges="locale"></application>

3.3 生成不同语言的strings

参考:Android Studio 创建对应国家语言 values 生成values文件夹,然后创建strings,填入翻译即可。如我的demo:

values/strings.xml

<resources>    <string name="app_name">AndroidDemo1</string>    <string name="hello_world">Hello world</string>    <string name="setting_language">Set the language</string>    <string name="setting_language_prompt">Set the language ></string></resources>

values-es/strings.xml

<resources>    <string name="app_name">AndroidDemo1</string>    <string name="hello_world">Hola mundo</string>    <string name="setting_language">Establecer el idioma</string>    <string name="setting_language_prompt">Establecer el idioma ></string></resources>

values-zh-rCN/strings.xml

<resources>    <string name="app_name">AndroidDemo1</string>    <string name="hello_world">你好,世界</string>    <string name="setting_language">设置语言</string>    <string name="setting_language_prompt">设置语言></string></resources>

以上就是所有的配置了。如果想看效果,手动修改SharedPreferences中key为application_language值,然后打开Activity就可以了。

4.参考资料

demo的github地址

android——实现多语言支持