安卓本地化 es-r419

21

我正在本地化我的应用程序,其中包括 Espanol-419 语言/地区支持。Android 不支持命名约定 values-es-r419,但它可以接受 values-en-rGB。那么,我应该使用什么名称使其正常工作呢?

4个回答

16

我不知道r419是从哪里来的。我唯一能想到的是它可能是一个LCID,但419是用于俄语的,或者是一个国家代码,但没有419这个代码。这里列出了一些西班牙语的地区代码,也许你想要的在这里:

es-ar  Spanish - Argentina
es-bo  Spanish - Bolivia    
es-cl  Spanish - Chile
es-co  Spanish - Colombia
es-cr  Spanish - Costa Rica
es-cu  Spanish - Cuba
es-do  Spanish - Dominican Republic
es-ec  Spanish - Ecuador
es-sv  Spanish - El Salvador
es-gt  Spanish - Guatemala
es-hn  Spanish - Honduras
es-mx  Spanish - Mexico
es-ni  Spanish - Nicaragua
es-pa  Spanish - Panama
es-py  Spanish - Paraguay
es-pe  Spanish - Peru
es-pr  Spanish - Puerto Rico
es-es  Spanish - Spain (Traditional)
es-uy  Spanish - Uruguay
es-ve  Spanish - Venezuela

参考资料:

更新:

显然,419来自联合国M.49标准,由BCP 47采用用于IETF语言标签。Google的替代资源文档中提到:

该语言由两个字母的ISO 639-1语言代码定义,可选地跟随两个字母的ISO 3166-1-alpha-2区域代码(前缀为小写字母“r”)。
很明显(仅凭“r”),您可以看出这些不是标准的IETF语言标签。不幸的是,我认为这也意味着您将无法找到适当的两个字母的区域等同于419。您还可以查看官方ISO列表。它没有在那里,只有国家的两个字母标签。显然,不支持3位数字标签是非常普遍的

我能想到的唯一解决方案是为es提供一个默认集,然后为es国家的子区域提供更具体的集合。您可以为每个地区(如es-rAR)提供资源,这些资源与419相匹配,但是看着那个列表,我认为做相反的事情并使用es为拉丁美洲西班牙语提供资源,然后为es-rES提供资源以供西班牙使用会更容易。由于es-rESes更具体,因此应优先考虑(如果区域设置匹配)。


1
更新了,希望这是一个解决方案。 - kabuko
2
只提供一个 es 包,那么如果没有指定更具体的限定符,它将被选择用于所有 es 限定符吗? - Adam Johns
419在iOS中使用,而不是Android。 - Borzh
Play Console本身支持es-419 - 请参见https://support.google.com/googleplay/android-developer/table/4419860。 - Stan Kurdziel

10
Android 7.0 (API level 24) 带来更加强大的资源解析功能,能够自动查找更好的备选方案。然而,为了加快解析速度并提高可维护性,您应该将资源存储在最常见的父语言环境中。例如,如果您之前将西班牙语资源存储在 values-es-rUS 目录中,请将它们移动到包含拉丁美洲西班牙语的 values-b+es+419 目录中。
来源:https://developer.android.com/guide/topics/resources/multilingual-support.html 我们在应用内提供了语言选择功能,因此为了在新旧手机上都能正常工作,我们在 values-es-rUS(西班牙语-美国)和 values-b+es+419(西班牙语-拉丁美洲)中保留了重复的资源。

2
我认为这应该成为新的被接受的解决方案,因为它基于来自Google的最新信息(https://developer.android.com/guide/topics/resources/multilingual-support.html)。 - Michael Osofsky
3
确实,这是新的正确答案。我已经在Android Studio 3.5上进行了测试,并且它可以正确识别values-b+es+419语言标签。 - alexkaessner

9
es-r419 = es-rUS. 

将文件夹名称更改为values-es-rUS,以与运行时用户选项一致。

使用Google翻译服务时,如果要求将内容翻译成拉丁美洲西班牙语,则会返回es-r419文件夹。

在查看AOSP源代码或 设置->语言和输入->语言时,您将看到西班牙语和西班牙语(美国)。

在运行时选择语言=西班牙语(美国),将不会从values-es-r419中提取字符串,而是从values-es-rUS中提取。


1
现在有比es-rUS更多的西班牙语区域可用,根据jt-gilkeson的说法,在Android 7.0及更高版本中,您可以编写b+es+419来访问这些UN M.49地区。 - Liggliluff

0

419来源于这里,适用于任何拉丁美洲(西班牙语)地区。

例如,哥伦比亚西班牙语、墨西哥西班牙语等将使用值-es-r419

我们还可以针对每个地区使用这个,而不是名称,尽管更加困难。

值-en-r840而不是值-en-rUS

但是,如果我们想要为每个地区提供一种语言,则文件必须在语言后跟“-r”和国家代码。选择地区时,名称会自动添加。

要做到这一点,请创建一个“值资源文件”,选择“Locale”选项并选择地区。

enter image description here

如果设备语言是"English (United States)", 将会使用 values-en-rUS/strings.xml。

如果设备的语言带有一个我们不支持的国家,将会使用 values-en/strings.xml(适用于任何地区)。

现在,如果你想要通过编程方式添加语言,你不能将语言设置为"en_US"或"en-rUS",因为它们并不存在,"en_US"仍然是"en"。 这就是为什么你需要将国家添加到 Locale 语言中(Android 支持大写和小写)。

//Example language = "en" country = "US"
private void setLanguage(Context context, String language, String country) {
    Configuration config = new Configuration(context.getResources().getConfiguration());
    config.setLocale(new Locale(language, country));

    //Copies the fields from delta into this Configuration object, keeping track of which ones have changed.
    config.updateFrom(new Resources(context.getResources().getAssets(),
            context.getResources().getDisplayMetrics(), config).getConfiguration());

    context.createConfigurationContext(config);
}

1
过时的信息。现在,您应该使用values-b+es+419来表示拉丁美洲西班牙语,这将是拉丁美洲任何一个西班牙语国家的根。然后,您可以使用values-es-rAR进一步指定阿根廷与拉丁美洲其他地区的差异。 - Liggliluff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接