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

目录

1,权限要求
2,反射的方式实现
3,LocalePicker接口实现
4,各国语言缩写

一,权限要求

首先需要系统级的权限,在AndroidManifest.xml里申请权限:

android:sharedUserId=“android.uid.system”
<!-- 切换语言,修改配置文件 -->
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"tools:ignore="ProtectedPermissions" />

二,反射的方式实现

可以通过反射方式来设置语言,反射方法如下:

void setLanguage2(Locale setLocaleLauguage) {Log.i(TAG, "setLanguage2: "+setLocaleLauguage);try{Class classActivityManagerNative = Class.forName("android.app.ActivityManagerNative");Method getDefault = classActivityManagerNative.getDeclaredMethod("getDefault");Object objIActivityManager  = getDefault.invoke(classActivityManagerNative);Class classIActivityManager = Class.forName("android.app.IActivityManager");Method getConfiguration = classIActivityManager.getDeclaredMethod("getConfiguration");Configuration config = (Configuration) getConfiguration.invoke(objIActivityManager);config.setLocale(setLocaleLauguage);Class clzConfig = Class.forName("android.content.res.Configuration");Field userSetLocale = clzConfig.getField("userSetLocale");userSetLocale.set(config, true);Class[] clzParams = new Class[]{Configuration.class};Method updateConfiguration = classIActivityManager.getDeclaredMethod("updateConfiguration", clzParams);updateConfiguration.invoke(objIActivityManager, config);BackupManager.dataChanged("com.android.providers.settings");}catch (Exception var12) {}}

在上面方法的基础上实现系统语言的设置,其中需要传入语言的缩写,各国语言缩写见文章最后。

 Locale localeL = Locale.forLanguageTag("hu-HU");if(localeL == null) {localeL = new Locale("hu-HU");}setLanguage2(localeL);

三、LocalePicker接口实现

可以通过以下方法查询已经封装进Locale里的支持的语言有哪些:

 final Map<String, LocalePicker.LocaleInfo> mLocaleInfoMap = new HashMap<String, LocalePicker.LocaleInfo>();final List<LocalePicker.LocaleInfo> localeInfoList = LocalePicker.getAllAssetLocales(SystemActivity.this, false);for (final LocalePicker.LocaleInfo localeInfo : localeInfoList) {final String languageTag = localeInfo.getLocale().toLanguageTag();mLocaleInfoMap.put(languageTag, localeInfo);Log.d("luyao", "::::"+languageTag);}

可以使用Locale.forLanguageTag()获取语言对应的Locale对象,但是不是所有语言都可以获得到,如果获得到的为null,就需要重新new一个Locale对象。.实现语言设置的关键方法如下所示,最主要的是 LocalePicker.updateLocale(mNewLocale) 去设置系统的配置文件,修改系统语言。其中需要传入语言的缩写,各国语言缩写见文章最后章节。

 void setLanguage(String newlanguage) {Locale localeL = Locale.forLanguageTag(newlanguage);if(localeL == null) {localeL = new Locale(newlanguage);}LocalePicker.updateLocale(localeL);}

设置好系统语言后,可以通过adb指令getprop persist.sys.locale查看当前的系统语言是否设置成功。

mt2712_saic_ec32:/ # getprop persist.sys.locale
hr-HR
mt2712_saic_ec32:/ #

四、各国语言缩写

en 英文
en-US 英文 (美国)
ar 阿拉伯文
ar-AE 阿拉伯文 (阿拉伯联合酋长国)
ar-BH 阿拉伯文 (巴林)
ar-DZ 阿拉伯文 (阿尔及利亚)
ar-EG 阿拉伯文 (埃及)
ar-IQ 阿拉伯文 (伊拉克)
ar-JO 阿拉伯文 (约旦)
ar-KW 阿拉伯文 (科威特)
ar-LB 阿拉伯文 (黎巴嫩)
ar-LY 阿拉伯文 (利比亚)
ar-MA 阿拉伯文 (摩洛哥)
ar-OM 阿拉伯文 (阿曼)
ar-QA 阿拉伯文 (卡塔尔)
ar-SA 阿拉伯文 (沙特阿拉伯)
ar-SD 阿拉伯文 (苏丹)
ar-SY 阿拉伯文 (叙利亚)
ar-TN 阿拉伯文 (突尼斯)
ar-YE 阿拉伯文 (也门)
be 白俄罗斯文
be-BY 白俄罗斯文 (白俄罗斯)
bg 保加利亚文
bg-BG 保加利亚文 (保加利亚)
ca 加泰罗尼亚文
ca-ES 加泰罗尼亚文 (西班牙)
ca-ES_EURO 加泰罗尼亚文 (西班牙,Euro)
cs 捷克文
cs-CZ 捷克文 (捷克共和国)
da 丹麦文
da-DK 丹麦文 (丹麦)
de 德文
de-AT 德文 (奥地利)
de-AT_EURO 德文 (奥地利,Euro)
de-CH 德文 (瑞士)
de-DE 德文 (德国)
de-DE_EURO 德文 (德国,Euro)
de-LU 德文 (卢森堡)
de-LU_EURO 德文 (卢森堡,Euro)
el 希腊文
el-GR 希腊文 (希腊)
en-AU 英文 (澳大利亚)
en-CA 英文 (加拿大)
en-GB 英文 (英国)
en-IE 英文 (爱尔兰)
en-IE_EURO 英文 (爱尔兰,Euro)
en-NZ 英文 (新西兰)
en-ZA 英文 (南非)
es 西班牙文
es-BO 西班牙文 (玻利维亚)
es-AR 西班牙文 (阿根廷)
es-CL 西班牙文 (智利)
es-CO 西班牙文 (哥伦比亚)
es-CR 西班牙文 (哥斯达黎加)
es-DO 西班牙文 (多米尼加共和国)
es-EC 西班牙文 (厄瓜多尔)
es-ES 西班牙文 (西班牙)
es-ES_EURO 西班牙文 (西班牙,Euro)
es-GT 西班牙文 (危地马拉)
es-HN 西班牙文 (洪都拉斯)
es-MX 西班牙文 (墨西哥)
es-NI 西班牙文 (尼加拉瓜)
et 爱沙尼亚文
es-PA 西班牙文 (巴拿马)
es-PE 西班牙文 (秘鲁)
es-PR 西班牙文 (波多黎哥)
es-PY 西班牙文 (巴拉圭)
es-SV 西班牙文 (萨尔瓦多)
es-UY 西班牙文 (乌拉圭)
es-VE 西班牙文 (委内瑞拉)
et-EE 爱沙尼亚文 (爱沙尼亚)
fi 芬兰文
fi-FI 芬兰文 (芬兰)
fi-FI_EURO 芬兰文 (芬兰,Euro)
fr 法文
fr-BE 法文 (比利时)
fr-BE-EURO 法文 (比利时,Euro)
fr-CA 法文 (加拿大)
fr-CH 法文 (瑞士)
fr-FR 法文 (法国)
fr-FR-EURO 法文 (法国,Euro)
fr-LU 法文 (卢森堡)
fr-LU-EURO 法文 (卢森堡,Euro)
hr 克罗地亚文
hr-HR 克罗地亚文 (克罗地亚)
hu 匈牙利文
hu-HU 匈牙利文 (匈牙利)
is 冰岛文
is-IS 冰岛文 (冰岛)
it 意大利文
it-CH 意大利文 (瑞士)
it-IT 意大利文 (意大利)
it-IT_EURO 意大利文 (意大利,Euro)
iw 希伯来文
iw-IL 希伯来文 (以色列)
ja 日文
ja-JP 日文 (日本)
ko 朝鲜文
ko-KR 朝鲜文 (南朝鲜)
lt 立陶宛文
lt-LT 立陶宛文 (立陶宛)
lv 拉托维亚文(列托)
lv-LV 拉托维亚文(列托) (拉脱维亚)
mk 马其顿文
mk-MK 马其顿文 (马其顿王国)
nl 荷兰文
nl-BE 荷兰文 (比利时)
nl-BE-EURO 荷兰文 (比利时,Euro)
nl-NL 荷兰文 (荷兰)
nl-NL-EURO 荷兰文 (荷兰,Euro)
no 挪威文
no-NO 挪威文 (挪威)
no-NO_NY 挪威文 (挪威,Nynorsk)
pl 波兰文
pl-PL 波兰文 (波兰)
pt 葡萄牙文
pt-BR 葡萄牙文 (巴西)
pt-PT 葡萄牙文 (葡萄牙)
pt-PT_EURO 葡萄牙文 (葡萄牙,Euro)
ro 罗马尼亚文
ro-RO 罗马尼亚文 (罗马尼亚)
ru 俄文
ru-RU 俄文 (俄罗斯)
sh 塞波尼斯-克罗地亚文
sh-YU 塞波尼斯-克罗地亚文 (南斯拉夫)
sk 斯洛伐克文
sk-SK 斯洛伐克文 (斯洛伐克)
sl 斯洛文尼亚文
sl-SI 斯洛文尼亚文 (斯洛文尼亚)
sq 阿尔巴尼亚文
sq-AL 阿尔巴尼亚文 (阿尔巴尼亚)
sr 塞尔维亚文
sr-YU 塞尔维亚文 (南斯拉夫)
sv 瑞典文
sv-SE 瑞典文 (瑞典)
th 泰文
th-TH 泰文 (泰国)
tr 土耳其文
tr-TR 土耳其文 (土耳其)
uk 乌克兰文
uk-UA 乌克兰文 (乌克兰)
zh 中文
zh-CN 中文 (中国)

Android系统多语言设置相关推荐

  1. android系统默认语言设置

    只需要对android/build/target/languages_full.mk 中PRODUCT_LOCALES := zh_CN enUS.... 最前面的一种语言既为默认语言,系统编译后自动 ...

  2. android 恢复出厂设置流程分析,基于Android系统快速恢复出厂设置方法实现.doc

    基于Android系统快速恢复出厂设置方法实现 基于Android系统快速恢复出厂设置方法实现 摘 要:针对使用Android系统的智能电视进行恢复出厂设置时重置速度慢的情况进行了研究和分析,从其重置 ...

  3. android 恢复出厂 自动恢复文件夹,基于Android系统快速恢复出厂设置方法的实现...

    龚强 摘 要:针对使用Android系统的智能电视进行恢复出厂设置时重置速度慢的情况进行了研究和分析,从其重置原理入手,通过简化备份.导入.执行等设置方法以实现该系统的快速恢复出厂设置.实践证明,该方 ...

  4. android缅甸语,Android键盘输入语言设置默认打开myanmar缅甸语的步骤

    不管你在学什么语言,当你觉得自己不擅长的时候,突然听到你的老师或其他人用你认为自己不擅长的语言流畅地交谈,你会感到热血沸腾,下面我们就跟着爱站技术频道小编一起来了解键盘输入语言设置默认打开myanma ...

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

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

  6. android 华为 多语言设置在哪,华为荣耀6系统语言在哪里设置?

    怎么设置华为荣耀6系统语言?很多朋友的手机系统语言不是中文的,想设置手机系统语言为中文,可以不知道在哪设置华为荣耀6系统语言.十分头疼,下面我就简单说下华为荣耀6怎么设置系统语言,荣耀6语言更换方法 ...

  7. Android 系统编译环境设置及源代码编译

    一. 摘要    虽然已经在Android系统工作了一段时间, 但是每次需要重新setup环境的时候,都需要花一点时间, 所以就想借着这次在ubuntu 12.04 64bits系统上重新安装的机会, ...

  8. android 系统语言切换,Android系统切换语言更新应用界面方法

    最近做的一个升级应用,在下载升级包的过程中又有一个toast类型的dialog悬浮在屏幕右上角,这个时候切换系统语言会出现问题. 当主屏幕为升级应用时,切换系统语言升级应用重启,而重启后并不能自动断点 ...

  9. Android键盘输入语言设置默认打开myanmar 缅甸语

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! loca ...

最新文章

  1. Python 赋值运算符
  2. 设置VSCode快捷键Alt+U(首字母转换为大写)、Shift+Alt+U(全部转换为大写)、Shift+Alt+L(全部转换为小写)
  3. c# 对象json互相转换_C#匿名对象(转JSON)互转、动态添加属性
  4. mybatis批量夺标添加_MyBatis+MySQL同时执行多条SQL,实现多表插入数据
  5. IP地址,子网掩码,默认网关,路由,形象生动阐述
  6. QPW 提现申请单表(暂时不做)(tf_cash_apply)
  7. 文科本二计算机类大学排名,全国二本大学排名文科分数线
  8. mysql中如何查询最近24小时、top n查询
  9. Python 多线程7-线程通信
  10. 码云怎么创建公开的仓库_使用码云创建属于你的免费私有git仓库
  11. 100并发 - 千万并发,阿里淘宝的 14 次架构演进之路
  12. DEM数据和影像数据下载汇总
  13. 人工智能教程(1.1)
  14. 企业微信打标签功能在企鲸客SCRM管理系统里面的作用
  15. 微信小程序无法获取头像,昵称的解决办法 (原生)
  16. 她全奖赴海外读博,一作发Science,毅然回国后任东南大学教授!
  17. 海量数据下的舆情分析,该如何搭建?
  18. java向上转型与向下转型
  19. pkpm弹性时程分析计算书怎么出_【原创总结】结构菜鸟浅谈为何进行弹性时程分析(附操作详图)...
  20. 全国计算机二级上机模拟考试,全国计算机二级上机模拟考试习题集(01-50)解答..doc...

热门文章

  1. 【WebService框架-CXF】——WebService和CXF
  2. k8s之Secret详细理解及使用
  3. SpringMVC绑定ajax传递json数据到pojo对象错误(400 Bad Request)
  4. python函数和模块有什么关键特性_零基础学python之函数与模块(附详细的代码和安装发布文件过程)...
  5. 龙猫数据:服务AI产业,筑基智慧生态
  6. 云米冰箱能控制扫地机器人_叫Pro的不只是iPad:云米互联网扫地机器人Pro了解一下...
  7. 使用外网访问Microsoft 远程桌面(Microsoft Remote Desktop),实现对电脑的远程操控
  8. 设置服务器网站主页,服务器设置网站主页
  9. 46-jQuert库的基本介绍
  10. 找出最重的苹果C语言