我应该为不同的语言环境维护不同的文件吗?
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-US、en- CA,等等。您将提供来自 en.json
).
的消息
从您的昵称来看,您可能知道,有时最好为某些特定文化保留单独的消息,因为英美消息(通常用作国际英语)可能太直接了。
如果请求单独的区域设置版本(即 en-IN),您将提供来自特定文件的消息(即 en-IN.json
),但回退到 en 表示其他语言(en-GB、en-AU 等)。
资源回退(这是我上面描述的专家使用的术语)实施起来可能非常痛苦。当然,通常你会回退到基本语言(en 对于任何 en-XX),但有一些你需要知道的极端情况: Portuguese/Brazilian 葡萄牙语、挪威语和中文。如果是葡萄牙语,您应该使用 pt-BR(即 pt-BR.json
),对于 pt 或 pt 的请求-XX 退回到 pt-BR,因为巴西葡萄牙语现在是标准葡萄牙语。显然,只需创建一个文件 pt.json
并让任何内容回退到 pt.
即可轻松完成
挪威语和中文都不是这种情况。
挪威语有两个版本:
- 挪威尼诺斯克语(区域设置 nn-NO)
- 挪威语(语言环境 nb-NO)
还有所谓的宏语言(localeno).
除非您维护两个单独的挪威语版本(这不太可能),否则您应该使用一个资源文件(即 no.json
<- 听起来很有趣,不是吗?)并且对于 [=38 的任何请求都回退到它=]nn-NO、nb-NO、nb、nn 和 no-NO(我相信只要no就会被覆盖)。
中文就更复杂了。您可能听说过简体中文 (locale zh-Hans) 和繁体中文 (zh-Hant)。如果您需要本地化为中文,维护两个单独的中文文件(即 zh-Hans.json
和 zh-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
,我猜?)。
我有一个应用程序目前支持 'en' 和 'fr' 语言环境,并为每个语言环境维护一个语言文件,即 'en.json' 和 'fr.json'
现在对于来自美国的用户,区域设置为 "en_US"、加拿大 'en_CA'、英国 'en_UK' 等
所以现在作为最佳实践,是建议我为不同的英语语言环境维护不同的文件,还是将所有英语语言环境(en_CA、en_US、en_UK)视为'en' 语言环境并为所有人引用一个文件?
像往常一样,这取决于。
通常,您只有一个英文文件,其中包含英文国际消息。在这种情况下,您不会为每个版本维护单独的文件,而是返回到英语国际(请求 en-US、en- CA,等等。您将提供来自 en.json
).
从您的昵称来看,您可能知道,有时最好为某些特定文化保留单独的消息,因为英美消息(通常用作国际英语)可能太直接了。
如果请求单独的区域设置版本(即 en-IN),您将提供来自特定文件的消息(即 en-IN.json
),但回退到 en 表示其他语言(en-GB、en-AU 等)。
资源回退(这是我上面描述的专家使用的术语)实施起来可能非常痛苦。当然,通常你会回退到基本语言(en 对于任何 en-XX),但有一些你需要知道的极端情况: Portuguese/Brazilian 葡萄牙语、挪威语和中文。如果是葡萄牙语,您应该使用 pt-BR(即 pt-BR.json
),对于 pt 或 pt 的请求-XX 退回到 pt-BR,因为巴西葡萄牙语现在是标准葡萄牙语。显然,只需创建一个文件 pt.json
并让任何内容回退到 pt.
挪威语和中文都不是这种情况。
挪威语有两个版本:
- 挪威尼诺斯克语(区域设置 nn-NO)
- 挪威语(语言环境 nb-NO)
还有所谓的宏语言(localeno).
除非您维护两个单独的挪威语版本(这不太可能),否则您应该使用一个资源文件(即 no.json
<- 听起来很有趣,不是吗?)并且对于 [=38 的任何请求都回退到它=]nn-NO、nb-NO、nb、nn 和 no-NO(我相信只要no就会被覆盖)。
中文就更复杂了。您可能听说过简体中文 (locale zh-Hans) 和繁体中文 (zh-Hant)。如果您需要本地化为中文,维护两个单独的中文文件(即 zh-Hans.json
和 zh-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
,我猜?)。