Language agnostic 围绕国际化的命名约定

Language agnostic 围绕国际化的命名约定,language-agnostic,internationalization,naming,Language Agnostic,Internationalization,Naming,我目前正在尝试国际化我的应用程序。尽管阅读了一些文档或查看了源代码,但我仍然不确定国际化的命名标准/约定。(请原谅,如果以下几点很明显,我不是以英语为母语的人) 我觉得i18n是计算机科学中的一个老话题,所以它至少应该有一些约定。这就是为什么我更愿意为我的代码、文档和进一步的研究使用正确的名称 以下是一些具体要点: 语言识别 我计划用en-US、en-GB、fr-fr等形式的标签来区分不同的语言(我在Mozilla的代码或Debian安装期间的许多地方都见过) 此格式是否有名称? 包含这些标记的

我目前正在尝试国际化我的应用程序。尽管阅读了一些文档或查看了源代码,但我仍然不确定国际化的命名标准/约定。(请原谅,如果以下几点很明显,我不是以英语为母语的人)

我觉得i18n是计算机科学中的一个老话题,所以它至少应该有一些约定。这就是为什么我更愿意为我的代码、文档和进一步的研究使用正确的名称

以下是一些具体要点:

语言识别 我计划用
en-US
en-GB
fr-fr
等形式的标签来区分不同的语言(我在Mozilla的代码或Debian安装期间的许多地方都见过)

此格式是否有名称?
包含这些标记的变量是否有专用名称?
这是“地区”吗?(这个词似乎经常出现,但有点模糊)比如,is
var locale=“en-US”命名方法

翻译表 对于每种语言,我希望将翻译存储为代码中使用的名称与实际翻译的字符串之间的键值对表

例如,对于
fr-fr

| key          | value    |
|--------------|----------|
| action.reply | répondre |
| action.edit  | éditer   |
| action.hide  | masquer  |
| ...          |          |
键的名称吗?我见过“languageId”、“key”或“entity”。
值是否有名称?什么是最好的:
翻译
本地化字符串
,还有别的吗?
该值是“区域设置”吗?或者整张桌子

至少,我得到一件事:这些表应该存储在名为
locale
locales
的目录中(我更喜欢Mozilla使用的复数形式,但angular translate(JS库)使用单数…)

物体 上面的翻译表对于UI的静态部分可能已经足够了,但我还必须允许用户选择性地翻译他们提交的一些内容。因此,我必须回答以下需求:

  • 给定一种语言,获取内部标记为
    foo
  • 给定内部标记为
    条的内容
    ,获取语言的翻译
在第二种情况下,对象只保存一个特定内容的信息。它代表一个“事物”,而不是翻译表。这些结构的名称是否有区别(每个结构都适合以不同的方式检索数据)?
这些“访问器”应该如何命名

场所 这个词的用法真让我困惑。即使在寻找翻译或阅读代码后,我也无法准确理解人们在使用它时的意思

注 我知道这个关于命名约定的问题可能会导致一些主观的或“按你的感觉命名”的答案,因此如果你的答案有一些例子支持,我将不胜感激


(如果您想知道,我的应用程序是用JavaScript编写的,但这个问题与语言无关)

因为这不是一个完整的答案,我将把它作为注释。
en
部分的
en-US
来自ISO 639语言代码标准:而
US
部分来自ISO 3166国家代码标准:。它们共同构成RFC5646和RFC4647指定的IETF语言标签。通常被称为“locale”的locale指定了两件事——语言和国家。有一些奇怪的语言环境,比如“C”,它简单地说:像传统的C编译器一样工作。使用这两个东西,你可以得出其他东西,如2015年1月2日天气意味着2015年2月1日(英语)或1月2日(美国),默认货币应该是什么等@slebetman谢谢你的评论。我还搜索了更多信息(即:我了解了gettext),现在我知道“locale”只是描述要使用的语言,并通过扩展它的语言标记和相关表,但我仍然不确定其余的内容。也许我对约定有“过高的期望”,即使i18n是一个老问题。