我正在本地化我的应用程序,其中包括 Espanol-419 语言/地区支持。Android 不支持命名约定 values-es-r419,但它可以接受 values-en-rGB。那么,我应该使用什么名称使其正常工作呢?
我正在本地化我的应用程序,其中包括 Espanol-419 语言/地区支持。Android 不支持命名约定 values-es-r419,但它可以接受 values-en-rGB。那么,我应该使用什么名称使其正常工作呢?
我不知道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”)。我能想到的唯一解决方案是为es
提供一个默认集,然后为es
国家的子区域提供更具体的集合。您可以为每个地区(如es-rAR
)提供资源,这些资源与419相匹配,但是看着那个列表,我认为做相反的事情并使用es
为拉丁美洲西班牙语提供资源,然后为es-rES
提供资源以供西班牙使用会更容易。由于es-rES
比es
更具体,因此应优先考虑(如果区域设置匹配)。
values-es-rUS
目录中,请将它们移动到包含拉丁美洲西班牙语的 values-b+es+419
目录中。values-es-rUS
(西班牙语-美国)和 values-b+es+419
(西班牙语-拉丁美洲)中保留了重复的资源。values-b+es+419
语言标签。 - alexkaessneres-r419 = es-rUS.
将文件夹名称更改为values-es-rUS
,以与运行时用户选项一致。
使用Google翻译服务时,如果要求将内容翻译成拉丁美洲西班牙语,则会返回es-r419
文件夹。
在查看AOSP源代码或 设置->语言和输入->语言
时,您将看到西班牙语和西班牙语(美国)。
在运行时选择语言=西班牙语(美国),将不会从values-es-r419
中提取字符串,而是从values-es-rUS
中提取。
419来源于这里,适用于任何拉丁美洲(西班牙语)地区。
例如,哥伦比亚西班牙语、墨西哥西班牙语等将使用值-es-r419
我们还可以针对每个地区使用这个,而不是名称,尽管更加困难。
值-en-r840而不是值-en-rUS
但是,如果我们想要为每个地区提供一种语言,则文件必须在语言后跟“-r”和国家代码。选择地区时,名称会自动添加。
要做到这一点,请创建一个“值资源文件”,选择“Locale”选项并选择地区。
如果设备语言是"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);
}
es
包,那么如果没有指定更具体的限定符,它将被选择用于所有es
限定符吗? - Adam Johns