【问题标题】:Should I maintain different files for different locales?我应该为不同的语言环境维护不同的文件吗?
【发布时间】:2015-08-28 20:40:06
【问题描述】:
我有一个当前支持“en”和“fr”语言环境的应用程序,并为每个语言环境维护一个语言文件,即“en.json”和“fr.json”
现在对于来自美国的用户,区域设置为“en_US”、加拿大“en_CA”、英国“en_UK”等。
所以现在作为一种最佳做法,是否建议我为不同的英语语言环境维护不同的文件,或者我将所有英语语言环境(en_CA、en_US、en_UK)视为“en”语言环境并引用一个文件?
【问题讨论】:
标签:
localization
internationalization
locale
l10n.js
【解决方案1】:
像往常一样,这取决于。
通常,您只有一个英文文件,其中包含英文国际信息。在这种情况下,您不会为每个版本维护单独的文件,而是会回退到英语国际(请求 en-US、en-CA等。您将提供来自en.json 的消息。
从您的昵称来看,您可能知道有时最好为某些特定文化保留单独的消息,因为英美消息(通常用作国际英语)可能过于直接。
如果请求单独的语言环境版本(即 en-IN),您将提供来自特定文件(即 en-IN.json)的消息,但回退到 en对于其他语言(en-GB、en-AU 等)。
资源回退(这是我上面描述的专家使用的术语)实施起来可能非常痛苦。当然,通常你会回退到基本语言(en 表示任何 en-XX),但有一些特殊情况你需要知道:葡萄牙语/巴西葡萄牙语,挪威语和汉语。如果是葡萄牙语,您应该使用 pt-BR(即pt-BR.json)并且对于 pt 或 pt-XX 的请求回退到 pt-BR,因为巴西葡萄牙语现在是标准的。显然,只需创建一个文件pt.json 并让任何事情回退到 pt 即可轻松完成。
挪威人和中国人都不是这样。
挪威语有两个版本:
- 挪威尼诺斯克语(语言环境nn-NO)
- 挪威语 Bokmål(语言环境 nb-NO)
还有所谓的宏语言(locale no)。
除非您维护两个单独的挪威语版本(这不太可能),否则您应该使用一个资源文件(即no.json nn- 的请求时回退到它NO、nb-NO、nb、nn 和 no-NO(我相信只是 no 将被覆盖)。
中文就更复杂了。您可能听说过简体中文 (locale zh-Hans) 和繁体中文 (zh-Hant)。如果您需要本地化为中文,维护两个单独的中文文件(即zh-Hans.json 和zh-Hant.json)并按如下方式回退任何请求是有意义的:
-
zh、zh-CN 和 zh-SG 到 zh-Hans
-
zh-HG、zh-MO 和 zh-TW 到 zh-Hant
我希望它能让你更好地理解。值得考虑未来的本地化计划,以尽可能简单地实施资源回退机制(但不会更简单)。如果您需要支持英语、法语、意大利语、德语和西班牙语等语言,那么实施复杂的规则是没有意义的 - 只需检查 xx-XX.json 是否存在,如果存在则提供它,如果不存在则检查 xx.json存在(服务它...)或回退到默认应用程序语言(en.json,我猜?)。