ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Language Selector 实战:逐应用设置语言,解锁 Android 13 隐藏能力

2026/8/16 14:10:16 拓冰建站 浏览量
Language Selector 实战:逐应用设置语言,解锁 Android 13 隐藏能力 Language Selector 实战逐应用设置语言解锁 Android 13 隐藏能力【免费下载链接】Language-SelectorLanguage Selector let users select individual app languages (Android 13)项目地址: https://gitcode.com/gh_mirrors/la/Language-SelectorAndroid 13 引入了一项被多数人忽略的能力——逐应用设置语言per-app locales它允许你为每个 App 单独指定显示语言。问题在于并非所有 ROM 都把这个入口放进设置里。Language Selector 正是为此而生它复刻 Android 13 原生的App languages行为通过 Shizuku 调用系统 LocaleManager让一个应用一种语言真正落地。本文从原理、上手、进阶到避坑一次性讲透。系统语言不该是一刀切这项能力的来龙去脉一次被藏起来的系统授权Android 13 在框架层加入了LocaleManager允许为单个应用覆盖系统语言。但很多定制 ROM如作者的 MIUI 14虽然跑着 Android 13 内核设置里却找不到应用语言入口。能力在入口没了这就是 Language Selector 要补的缺口。从 ADB 命令到图形前端没有入口不等于没有通道——adb shell cmd locale可以直接操作其他应用的语言。作者最初的动机很简单既然命令行能改那就自己做一个前端来管理应用语言。于是 Shizuku 成为必选项因为它能在免 root 的前提下把 ADB 级别的权限交给普通 App。一段 AIDL 桥接的细节权限拿到后剩下的就是调用系统服务。核心逻辑在app/src/main/java/vegabobo/languageselector/service/UserService.kt通过SystemServiceHelper获取locale服务转成ILocaleManager后调用setApplicationLocales(packageName, currentUser, locales)一条命令完成语言覆盖。Android 13 与 14 的参数差异多一个fromUserId标志也在代码里做了兼容处理。三步走通最小上手流程第一步准备 Shizuku 并完成授权打开 Language Selector 前你需要先安装并启动 Shizuku。应用主界面会检测 Shizuku 的 binder 与权限状态未就绪时显示提示页点击 Proceed 完成授权后即可进入应用列表。第二步选应用选语言应用列表默认只显示第三方应用支持按名称或包名搜索。点进任意应用你会看到它当前的覆盖语言如系统默认下方就是完整的语言清单。第三步验证是否生效选好语言后直接点击界面上的 Open 按钮启动该应用。若目标应用本身支持所选语言下次启动即按新语言渲染界面。整个过程不需要重启系统也不必修改系统语言。语言选择界面拆解三个分区各司其职Pinned长按置顶常用语言在任意语言上长按即可钉住它被固定的语言会集中显示在 Pinned 分区顶部。再次长按可取消。这个设计直接服务于高频切换场景也是后文快捷磁贴的数据来源。User languages贴近你的使用习惯这一区展示系统当前语言环境下的推荐项包含System default选项。选择它等于清除该应用的语言覆盖回到跟随系统语言的状态。All languages庞大的完整清单完整的语言列表来自Locale.getAvailableLocales()由app/src/main/java/vegabobo/languageselector/LocaleManager.kt按语言分组、排序生成。选择一门语言后还会进入 Region 二级页面细分到具体国家/地区变体例如Portuguese之下可单独选择巴西或葡萄牙。快捷设置磁贴给前台应用换语言的零级入口磁贴只认固定语言下拉通知栏找到 Language Selector 磁贴后它会把钉住的那些语言作为候选。也就是说Pinned 分区既服务于应用内快速切换也决定了磁贴的可选项——没钉任何语言时磁贴会显示 Unavailable。点击一次循环换语言磁贴会读取当前前台应用通过ActivityTaskManager.getTasks()获取顶部任务点击后按固定语言列表顺序循环切换支持切回系统默认。实现上app/src/main/java/vegabobo/languageselector/QSTile.kt还做了保护系统应用与本应用自身被排除避免误改引发异常。原理与边界它到底做了什么又没做什么只指定 locale不做翻译必须澄清Language Selector 不是翻译器。它只设置应用运行时使用的 locale应用是否支持该语言、能否正确渲染取决于应用自身的多语言资源。选一门应用不提供的语言界面大概率不会变化。系统应用是高危区为系统应用或某些未适配 locale 的第三方应用覆盖语言可能导致显示异常。主界面在开启显示系统应用时会弹出二次确认警告这不是形式主义而是作者明确标注的已知风险。列表长但不够精确的取舍直接遍历getAvailableLocales()的做法会产生数量庞大的语言条目且包含不少实际用不到的区域变体。README 中作者也坦言这种方式pretty slow and languages arent filtered accurately并欢迎通过 PR 改进——对想参与开源的人来说这是一个现成的切入点。适合谁不适合谁场景适配度说明多语言家庭共用一台手机高微信保持中文、YouTube 用英文互不干扰语言学习者创造沉浸环境高把学习类应用单独切到目标语言开发者调试多语言界面高快速验证应用各语言资源是否正常单语言重度用户低收益有限还需额外维护固定列表系统应用依赖者低不建议触碰系统级应用的语言硬性门槛只有三条Android 13 及以上12 及以下无 LocaleManager 支持、已运行的 Shizuku、目标是普通第三方应用。满足即可上手全程免 root。从哪获取如何开始获取源码并开始体验git clone https://gitcode.com/gh_mirrors/la/Language-Selector构建安装后按前面三步走一遍再顺手长按钉住两三个常用语言把磁贴加到快捷设置里整个工作流就闭环了。后续想深入可以读一读app/src/main/java/vegabobo/languageselector/service/UserService.kt与QSTile.kt体会一段 AIDL、一个磁贴服务如何撬动系统级能力。系统语言的一刀切设定持续了很多年而真正让语言选择回归个体的往往就是这样一个几 MB 的小工具——它没发明新权限只是把系统早就给好、却没人认真打开的开关放到了你触手可及的地方。【免费下载链接】Language-SelectorLanguage Selector let users select individual app languages (Android 13)项目地址: https://gitcode.com/gh_mirrors/la/Language-Selector创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考