Android实现多语言
Android实现多语言
1.引言
最近在学习Android多语言的使用,搭建一个Demo,成功实现了Android的多语言切换,这篇文章跟大家分享一下,文章最后会给出demo的github地址以及我参考的博文的地址。
2.思路
实现多语言,基本是通过一段核心代码,设置Locale然后更新到程序上下文中;再配合一些AndroidManifest配置以及资源文件的生成就可以了,非常简单。
2.1 核心代码:
@Overrideprotected 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 {@Overridepublic 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——实现多语言支持
Android实现多语言相关推荐
- Android 切换系统语言源码分析
以前了解Android的多语言实现很简单,可以在不同的语言环境下使用不同的资源,就做好相应的语言适配就好,但是一直没有实际使用过. 最近公司的项目要用到多国语言切换,并且还是和手机上系统设置里面的语言 ...
- Android的多语言实现
文章转自:http://blog.csdn.net/barryhappy/article/details/23436527 以前就知道Android的多语言实现很简单,可以在不同的语言环境下使用不同的 ...
- Android8.0 学习 (17)Android国际化(多语言)实现,支持8.0
Android国际化(多语言)实现,支持8.0 前言 最近因为项目中使用了国际化,所以正好研究了下实现方法: 首先说下项目需求: 可以随着系统切换语言而切换语言,不支持的语言显示默认 用户可以选择语言 ...
- android多国语言---简写对应国家code
android多国语言文件夹文件汇总如下: 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh-rHK 英语(美国):valu ...
- Android 多国家语言适配
因为项目都是海外的,而且最近在做墨西哥的项目,所以出于以后找起来方便,现在就整理一下Android多国家语言的适配,其实就是在res文件夹下创建values不同的国家语言,国家对于缩写如下表: Ara ...
- Android多国语言翻译 字符串目录详解
Android多国语言翻译 国际化 命名规则 values-[ 语言简称]-r[地区] 常用语言 values #默认语言 找不到对应语言就会使用这里 values-ar # 拉伯语 Arabic v ...
- Android(SpreadTurm)多语言版本电话录音系统报错
Android(SpreadTurm)多语言版本电话录音系统报错 法语,印尼语,士耳其 [原因:] 从log里面分析com.android.phone进程重启. 如下log分析: 11-20 17:2 ...
- Android Studio中文语言包失效
Android Studio中文语言包失效[2022/5/4] 1-版本 2-解决方案 1-版本 Android Studio Bumblebee | 2021.1.1 Patch 2-解决方案 下载 ...
- Android系统多语言设置
Android系统默认支持多个国家语言.实现对整个android系统的语言设置,网上很多人使用的是反射的方式,但更简单的应该是通过系统提供的LocalePicker里方法来实现.本文基于Android ...
- Android系统默认语言改为中文
第一种方法: 修改 build/tools/buildinfo.sh echo "ro.product.locale.language=zh" echo "ro.prod ...
最新文章
- jfinal js 拦截_jfinal 使用拦截器处理繁琐的前置条件判定
- Winform中使用OpenFileDialog选择文件打开并获取文件路径
- python读取遥感 dat_基于python批量处理dat文件及科学计算方法详解
- 《网络管理员考试案例梳理、真题透解与强化训练》复习重点
- MySQL-MMM如何调用远程管理卡命令去fence?
- 吴恩达《深度学习》 学习笔记1
- 【java】java 如何抛出 sleep interrupted
- Python使用更相减损术计算两个整数的最大公约数
- FPGA开源IP核下载opencores.org
- lj245a引脚功能图_干货|教你如何看懂单片机时序图
- GD32F103 配置timer0输出PWM
- 软件性能测试pdf,软件性能测试报告模板.pdf
- 什么是 480i、576i、480p、1080i、720p?什么是 HDTV?
- mac软件拖到dock,重启后显示问号?,的解决方法
- UE4 实时获取天气信息
- springAop原理之(三)Advised接口族
- APP界面设计教程---手机ui高级实战案例(完整版)
- 如何清理微信文件夹占用的巨大空间
- iphone文件服务器权限,苹果手机怎么开启文件共享权限
- Operand of null-aware operation ‘!‘ has type ‘SchedulerBinding‘ which excludes null.