我需要将我的应用程序本地化为印度尼西亚语语言。 我的应用程序的资源文件夹包含每种语言的“values”子文件夹列表,例如“values-fr”文件夹。
但是我在 Android 开发者文档上读到了令人困惑的信息。
请注意,Java 使用了多个已弃用的两字母代码。希伯来语(“he”)语言代码被重写为“iw”,印度尼西亚语(“id”)被重写为“in”,意第绪语(“yi”)被重写为“ji”。即使您构造自己的 Locale 对象,这种重写也会发生,而不仅仅是各种查找方法返回的实例。
如何理解这一点? 基本上,我应该将文件夹命名为“values-in”或“values-id”,以便它在具有印度尼西亚语区域设置的设备上正确显示印度尼西亚语文本吗?
Android 上印尼语的资源文件夹应命名为:
随着 Android 15 的发布,请注意针对 Android 15 或更高版本的应用程序的更改 (
targetSdk = 35
):
语言代码处理的更改:使用 Locale API 时,希伯来语、意第绪语和印度尼西亚语的语言代码不再转换为其过时的形式(希伯来语:iw、意第绪语:ji 和印度尼西亚语:in)。指定其中一种语言环境的语言代码时,请使用 ISO 639-1 中的代码(希伯来语:he、意第绪语:yi 和印度尼西亚语:id)。
来源:https://developer.android.com/about/versions/15/behavior-changes-15#openjdk-api-changes
实际上,这意味着以下代码(使用“in”):
println("Locale.forLanguageTag: ${Locale.forLanguageTag("in")}")
println("Locale constructor: ${Locale("in")}")
产生带有“id”的结果:
2024-12-19 01:38:52.521 7465-7465 System.out ... I Locale.forLanguageTag: id
2024-12-19 01:38:52.521 7465-7465 System.out ... I Locale constructor: id
就我而言,迁移到 Android 15 后,此更改破坏了自定义的应用内语言选择器。
似乎什么都没有改变,只是
values-in
有效。values-id
或 values-b+id
不起作用(请参阅 2013 年接受的答案的评论)。