「稻草」Strawing

对方拒绝了你的代码并向你抛了一个异常

« Win7 Intel蓝牙连接设备(如鼠标)无法安装驱动的解决方法

给不支持语言偏好列表的国产安卓(如 MIUI)设置语言偏好(需 ROOT)

感觉好多国产安卓砍了这个功能(UI层面),比如我手上的MIUI/HyperOS,设置菜单里就只能设置系统语言,不能设置那个语言偏好列表。(国际版是有的,我实在不知道国内版为啥要砍这个人畜无害的UI)

这就导致一些App无法显示我期望的语言(在不更改系统语言的情况下)。比如我的系统语言为中文(此时你的语言列表里也只有中文),假如有一个App支持德语西班牙语和英语,我期望它显示英语,但它的逻辑很可能是,在你的语言列表里都没有这三种语言的情况下,默认显示德语,然而假如说我想让它显示英语,在MIUI下只能把系统语言设成英语(然而我并不想),如果我想显示西班牙语,就完全做不到了,因为MIUI系统语言选项压根没有西班牙语。

我有root权限,于是我就想,能否绕过UI直接改这个参数。翻了半天互联网以及Android源码,发现这个设置存储在 system 空间的 system_locales 键中。可以通过

settings get system system_locales

来读取。更改之前建议先读一下你当前的locales,因为“中文”在不同Android版本上表示似乎不同,比如有的是 zh-Hans-CN 有的是 zh-CN
然后设置你自己的语言偏好列表,逗号分开不同的locales,比如

settings put system system_locales zh-Hans-CN,en-US,ja-JP

(补充:对于系统语言,是在 persist.sys.locale 这个prop中,而不是在settings里。可以通过getprop persist.sys.locale / setprop persist.sys.locale xxx 来操作)。

之后,发送 CONFIGURATION_CHANGED 和 LOCALE_CHANGED 广播,通知App语言变更

am broadcast -a android.intent.action.CONFIGURATION_CHANGED
am broadcast -a android.intent.action.LOCALE_CHANGED

尤其是对Google Play有用,因为现在许多App都用的aab包,以及Play Asset Delivery机制,只下载你需要的资源(比如不在你语言列表里的语言资源就不会下载),在更新了语言列表后,Google Play会自动下载这些App对应的语言资源。

如果发了广播App还是没有自动下载/更新,可以尝试重启一下。

我发现在我的设备上挺奇怪的,无论是我发了广播还是重启之后,好像都没见Google Play立马有动静(在原生支持的安卓里,在设置中改了语言列表设置之后,Play马上能看到一堆App在那更新转圈圈,其实不是更新版本是在下载语言资源),但是过了一会才发现,实际上是已经更新了语言资源的,可以在Play的管理中看到,一堆软件包刚刚被更新过。



然后各种App就能通过你期望的语言来显示了。

本文地址:https://www.liyanfeng.com/post/143.html(如转载,需注明本原文地址)

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

搜索

网站分类

最近发表

推广内容

标签(Tags)

最新评论及回复

文章归档

Powered By Z-Blog 1.8 Walle Build 100427 Designed by Han'space

Blog by Yanfeng Lee(liyafe1997)@Daocao .[Archiver].

本博客采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可,转载本站内容即代表您同意了本协议,必须署名-非商业使用-禁止演绎。