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——实现多语言支持
|