Language agnostic 是否有标准的区域设置解析算法?

Language agnostic 是否有标准的区域设置解析算法?,language-agnostic,localization,standards,locale,rfc,Language Agnostic,Localization,Standards,Locale,Rfc,为了支持软件国际化,许多编程语言和平台都支持一种获取本地化资源的方法,以便在显示给用户的UI中使用(例如Java类)。通常,如果用户首选区域设置的资源不可用,则会有一种回退机制或区域设置解析过程,尝试从可用资源集中找到最接近的匹配资源。例如,如果en-US的资源不可用,则系统通常会尝试查找en的资源 对于许多语言和平台的资源包解决方案,区域设置解析过程似乎几乎相同。他们是否遵循一些标准的区域设置解析算法,或者,如果没有,是否存在这样的标准?我不知道标准本身 然而,由于区域设置是分层的,所以使用的

为了支持软件国际化,许多编程语言和平台都支持一种获取本地化资源的方法,以便在显示给用户的UI中使用(例如Java类)。通常,如果用户首选区域设置的资源不可用,则会有一种回退机制或区域设置解析过程,尝试从可用资源集中找到最接近的匹配资源。例如,如果
en-US
的资源不可用,则系统通常会尝试查找
en
的资源


对于许多语言和平台的资源包解决方案,区域设置解析过程似乎几乎相同。他们是否遵循一些标准的区域设置解析算法,或者,如果没有,是否存在这样的标准?

我不知道标准本身

然而,由于区域设置是分层的,所以使用的算法是一个微不足道的结果。存在一个没有名称的(名义上的)根区域设置。下面是仅限语言的区域设置(en、fr等)。在这些区域之下是国家地理位置(en_GB、en_US等)。在这些区域之下,可以选择不同的区域(恩-格布-约克郡、恩-格布-伦敦,等等-要了解真实的例子,请看看挪威)

找到合适资源的自然方法是从最低、最具体的语言环境开始,然后沿着树走,直到找到一些东西。因此,从en_US_TX开始,您可以逐步升级到en_US,然后是en,然后是root。

显然存在语言标记的匹配,它描述了用于指定用户首选语言列表的“语言范围”的语法,以及“筛选”和“查找”将语言范围与RFC4646语言标记进行比较和匹配的机制。RFC 4647将这些机制描述为:

过滤生成一组(可能为空)语言标记,而查找生成单个语言标记


该公司提出了(截至2015年)基于的算法。如果没有距离数据,这不是一个解决方案,但值得关注的是未来的解决方案。

大多数情况下,资源将由应用程序编写器提供,因此存在层次结构,但可能是应用程序为
de
(默认值)和
en GB
提供资源。如果用户的区域设置为
en-US
,则严格的分层解析将导致
de
。在这种情况下,最好在层次结构中横向移动。此外,如果一种语言的资源不可用,最接近的匹配应该是类似的语言(例如,乌克兰语的资源可能不会返回俄语资源,而不是默认的英语资源)。在这种情况下,严格的分级解析将导致找不到任何内容。这两个国家都不是我们的对手。你建议的横向移动对我来说都是个坏主意:要么正确地支持区域设置,要么根本不支持。因此,让用户选择他们的语言环境是很重要的:乌克兰人可能会选择俄语,如果这是他们能得到的最好的语言环境,但不应该把俄语作为最适合乌克兰人的语言环境而抛弃给他们。如何在有问题的语言环境和一些已知的语言环境中重用JDK 7的语言环境解析代码?他们(设计此类功能的i18n专业人士)遵循最佳实践。当您对地域(~国家)和语言有所了解时,最佳实践或多或少会变得明显。Tom描述的Easy fall back机制是Java版本6之前的一部分。现在使用Java 7和BCP 47要复杂得多——比如看中文(zh-SG&zh-CN=>zh-Hans,zh-TW,zh-HK,zh-MO=>zh-Hant)。顺便说一句,注意我使用的是语言标签。。。