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实现多语言相关推荐

  1. Android 切换系统语言源码分析

    以前了解Android的多语言实现很简单,可以在不同的语言环境下使用不同的资源,就做好相应的语言适配就好,但是一直没有实际使用过. 最近公司的项目要用到多国语言切换,并且还是和手机上系统设置里面的语言 ...

  2. Android的多语言实现

    文章转自:http://blog.csdn.net/barryhappy/article/details/23436527 以前就知道Android的多语言实现很简单,可以在不同的语言环境下使用不同的 ...

  3. Android8.0 学习 (17)Android国际化(多语言)实现,支持8.0

    Android国际化(多语言)实现,支持8.0 前言 最近因为项目中使用了国际化,所以正好研究了下实现方法: 首先说下项目需求: 可以随着系统切换语言而切换语言,不支持的语言显示默认 用户可以选择语言 ...

  4. android多国语言---简写对应国家code

    android多国语言文件夹文件汇总如下:  中文(中国):values-zh-rCN  中文(台湾):values-zh-rTW  中文(香港):values-zh-rHK  英语(美国):valu ...

  5. Android 多国家语言适配

    因为项目都是海外的,而且最近在做墨西哥的项目,所以出于以后找起来方便,现在就整理一下Android多国家语言的适配,其实就是在res文件夹下创建values不同的国家语言,国家对于缩写如下表: Ara ...

  6. Android多国语言翻译 字符串目录详解

    Android多国语言翻译 国际化 命名规则 values-[ 语言简称]-r[地区] 常用语言 values #默认语言 找不到对应语言就会使用这里 values-ar # 拉伯语 Arabic v ...

  7. Android(SpreadTurm)多语言版本电话录音系统报错

    Android(SpreadTurm)多语言版本电话录音系统报错 法语,印尼语,士耳其 [原因:] 从log里面分析com.android.phone进程重启. 如下log分析: 11-20 17:2 ...

  8. Android Studio中文语言包失效

    Android Studio中文语言包失效[2022/5/4] 1-版本 2-解决方案 1-版本 Android Studio Bumblebee | 2021.1.1 Patch 2-解决方案 下载 ...

  9. Android系统多语言设置

    Android系统默认支持多个国家语言.实现对整个android系统的语言设置,网上很多人使用的是反射的方式,但更简单的应该是通过系统提供的LocalePicker里方法来实现.本文基于Android ...

  10. Android系统默认语言改为中文

    第一种方法: 修改 build/tools/buildinfo.sh echo "ro.product.locale.language=zh" echo "ro.prod ...

最新文章

  1. jfinal js 拦截_jfinal 使用拦截器处理繁琐的前置条件判定
  2. Winform中使用OpenFileDialog选择文件打开并获取文件路径
  3. python读取遥感 dat_基于python批量处理dat文件及科学计算方法详解
  4. 《网络管理员考试案例梳理、真题透解与强化训练》复习重点
  5. MySQL-MMM如何调用远程管理卡命令去fence?
  6. 吴恩达《深度学习》 学习笔记1
  7. 【java】java 如何抛出 sleep interrupted
  8. Python使用更相减损术计算两个整数的最大公约数
  9. FPGA开源IP核下载opencores.org
  10. lj245a引脚功能图_干货|教你如何看懂单片机时序图
  11. GD32F103 配置timer0输出PWM
  12. 软件性能测试pdf,软件性能测试报告模板.pdf
  13. 什么是 480i、576i、480p、1080i、720p?什么是 HDTV?
  14. mac软件拖到dock,重启后显示问号?,的解决方法
  15. UE4 实时获取天气信息
  16. springAop原理之(三)Advised接口族
  17. APP界面设计教程---手机ui高级实战案例(完整版)
  18. 如何清理微信文件夹占用的巨大空间
  19. iphone文件服务器权限,苹果手机怎么开启文件共享权限
  20. Operand of null-aware operation ‘!‘ has type ‘SchedulerBinding‘ which excludes null.

热门文章

  1. Azkaban 的三种部署模式是什么?
  2. 7.串口(UART)
  3. 动手学MFC之八——鼠标和键盘
  4. 一张图了解app测试点:专项测试
  5. 解决elementUI组件标签在vue中不能触发点击事件
  6. 【科普】听过闰年闰月,可你听过闰秒吗?
  7. 计算机图形学 算法汇总(期末复习)
  8. 合格的建筑木方具备哪些特征
  9. 手机保养新方法:炎炎夏日如何保养手机?让手机最佳状态陪伴你
  10. 水滴直播产品经理的反思