有没有一种标准算法来解决本地化问题?

7
为了支持软件国际化,许多编程语言和平台都支持获取本地化资源的方式,以用于向用户显示的 UI(例如 Java 的 java.util.ResourceBundle 类)。通常,如果用户首选区域设置的资源不可用,则会有一个回退机制或区域设置解析过程,该过程将尝试从可用资源集中查找最接近匹配的资源。例如,如果没有 en-US 的资源,则通常系统会尝试查找 en 的资源。
对于许多语言和平台的资源包解决方案,区域设置解析过程似乎几乎相同。它们是否遵循某种标准的区域设置解析算法,如果没有,是否存在这样的标准?

1
他们(设计此类功能的i18n专业人员)遵循最佳实践。当您了解领Territories(~国家)和语言时,最佳实践将更加明显。 Tom描述的简单回退机制是Java版本6的一部分。现在,随着Java 7和BCP 47的出现,情况变得更加复杂-以中文为例(zh-SG&zh-CN => zh-Hans,zh-TW,zh-HK,zh-MO => zh-Hant)。顺便说一句,注意我正在使用语言标签... - Paweł Dyda
3个回答

2
显然有一个名为RFC 4647的文件,它描述了“语言范围”的语法,用于指定用户首选语言列表,以及比较和匹配语言范围与RFC 4646语言标签的“过滤”和“查找”机制。 RFC 4647将这些机制描述为:“过滤会产生一组(可能为空的)语言标签,而查找则会产生一个单一的语言标签。”

1

1

我不知道是否有标准。

然而,使用的算法是地区是分层的这一事实的一个微不足道的结果。有一个(概念上的)没有名称的根地区。在这个地区之下是只有语言的地区(en、fr等)。在这些地区之下是国家地区(en_GB、en_US等)。在这些地区之下,可以选择性地使用变体地区(en_GB_Yorkshire、en_GB_cockney等-对于真实的示例,请查看挪威)。

找到适当的资源的自然方法是从最低、最具体的地区开始,并沿着树往上走,直到找到某些东西。因此,从 en_US_TX 开始,您向上步进到 en_US,然后是 en,最后是根。


1
大多数情况下,资源将由应用程序编写者提供,以便形成层次结构,但也可能是应用程序为“de”(默认)和“en-GB”提供资源。如果用户的语言环境是“en-US”,那么严格的层次解析将导致“de”。在这种情况下,最好向层次结构的侧面移动。此外,如果一个语言的资源不可用,则最接近的匹配应该是类似的语言(例如,没有乌克兰语资源可能会返回俄语资源,而不是默认的英语资源)。 - Daniel Trebbien
1
在这种情况下,严格的层次解析将导致找不到任何内容。neither de not en_GB is a match for en_US. 你提出的两个侧面移动都让我觉得不是一个好主意:你应该要么完全支持某个语言环境,要么就不支持。因此,让用户选择他们的语言环境非常重要:乌克兰人可能会选择俄语,如果那是他们能得到的最好的选择,但它不应该被强加给他们作为乌克兰语的最佳选择。 - Tom Anderson
如何在给定一个特定的语言环境和一些已知的语言环境的情况下,重用JDK 7的语言环境解析代码? - curious1

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