为何Esperanto(世界语)存在于Android源码却未出现在设置菜单?
这个问题其实涉及Android系统对支持语言的多重过滤机制,不是光有CLDR/ICU数据或者提交记录就会在设置里显示的,我来拆解几个关键原因:
1. 系统语言列表的显式白名单控制
Android系统并不会自动把所有有本地化数据的语言都加到设置的语言选项里,核心框架里有一个显式的语言白名单(通常在frameworks/base/core/res/res/values/config.xml里的config_locales数组)。只有出现在这个白名单里的语言,才会在设置菜单中被列出。
你提到的2012年的提交只是把EO加入了构建系统的支持列表(比如允许编译相关资源),但并没有把它添加到这个核心的白名单中,所以系统不会主动展示它。
2. 缺少完整的系统级资源翻译
虽然CLDR包含EO的本地化数据,但Android的系统UI(比如设置、系统提示、系统应用等)需要对应的values-eo资源目录和完整的字符串翻译。你查看的frameworks/base/core/res/res/路径下确实没有EO的资源文件夹,这意味着系统UI没有对应的EO翻译——即便强制开启EO语言,系统大部分界面还是会回退到默认语言(通常是英语)。
Android对正式支持的语言要求有完整的系统资源翻译,否则不会把它放到设置的可选列表里。
3. ICU/CLDR数据的作用范围
ICU和CLDR主要负责日期、时间、数字、货币等格式的本地化,这些是底层基础能力,但不直接决定语言是否在设置中显示。就算有EO的CLDR数据,只要没有通过前面提到的白名单和系统资源翻译这两道关,用户还是看不到这个语言选项。
手动开启Esperanto的方法
如果你确实想测试EO语言,可以通过ADB命令强制设置系统语言:
adb shell setprop persist.sys.locale eo adb reboot
重启后系统会尝试用EO加载资源,没有翻译的部分会用默认语言替代。
内容的提问来源于stack exchange,提问作者Max

