我应该为不同的语言环境维护不同的文件吗?

Should I maintain different files for different locales?

我有一个应用程序目前支持 'en' 和 'fr' 语言环境,并为每个语言环境维护一个语言文件,即 'en.json' 和 'fr.json'

现在对于来自美国的用户,区域设置为 "en_US"、加拿大 'en_CA'、英国 'en_UK' 等

所以现在作为最佳实践,是建议我为不同的英语语言环境维护不同的文件,还是将所有英语语言环境(en_CA、en_US、en_UK)视为'en' 语言环境并为所有人引用一个文件?

像往常一样,这取决于。

通常,您只有一个英文文件,其中包含英文国际消息。在这种情况下,您不会为每个版本维护单独的文件,而是返回到英语国际(请求 en-USen- CA,等等。您将提供来自 en.json).

的消息

从您的昵称来看,您可能知道,有时最好为某些特定文化保留单独的消息,因为英美消息(通常用作国际英语)可能太直接了。
如果请求单独的区域设置版本(即 en-IN),您将提供来自特定文件的消息(即 en-IN.json),但回退到 en 表示其他语言(en-GBen-AU 等)。

资源回退(这是我上面描述的专家使用的术语)实施起来可能非常痛苦。当然,通常你会回退到基本语言(en 对于任何 en-XX),但有一些你需要知道的极端情况: Portuguese/Brazilian 葡萄牙语、挪威语和中文。如果是葡萄牙语,您应该使用 pt-BR(即 pt-BR.json),对于 ptpt 的请求-XX 退回到 pt-BR,因为巴西葡萄牙语现在是标准葡萄牙语。显然,只需创建一个文件 pt.json 并让任何内容回退到 pt.

即可轻松完成

挪威语和中文都不是这种情况。

挪威语有两个版本:

  • 挪威尼诺斯克语(区域设置 nn-NO
  • 挪威语(语言环境 nb-NO

还有所谓的宏语言(localeno).
除非您维护两个单独的挪威语版本(这不太可能),否则您应该使用一个资源文件(即 no.json <- 听起来很有趣,不是吗?)并且对于 [=38 的任何请求都回退到它=]nn-NO、nb-NOnbnnno-NO(我相信只要no就会被覆盖)。

中文就更复杂了。您可能听说过简体中文 (locale zh-Hans) 和繁体中文 (zh-Hant)。如果您需要本地化为中文,维护两个单独的中文文件(即 zh-Hans.jsonzh-Hant.json)并按如下方式回退任何请求是有意义的:

  • zh, zh-CN and zh-SG to zh-Hans
  • zh-HG, zh-MO and zh-TW to zh-Hant

我希望它能让你更好地理解。值得考虑未来的本地化计划,以尽可能简单地实施资源回退机制(但不能更简单)。如果您需要支持英语、法语、意大利语、德语和西班牙语等语言,那么实施复杂的规则是没有意义的 - 只需检查 xx-XX.json 是否存在并在存在时提供服务,如果不存在则检查 xx.json 存在(服务它...)或回退到默认应用程序语言(en.json,我猜?)。