背景
我们有一个较旧的网络表单应用程序,我们并未使用我所知道的任何自定义语言/全球化代码。我们将resx文件用于特定于文化的资源。对于中文,我们目前有 4 resx文件:zh,zh-cn,zh-hans和zh-hant。为了简单起见,我希望能够配对 2 :zh-hans和zh-hant。我们并不打算支持任何特定于语言环境的变体;只是通用简体中文和通用繁体中文。
问题(S)
我的主要问题是:是否有任何情况我需要为中文提供超过zh-hans或zh-hant文件? *除了需要支持任何特定于语言环境的变体之外。
基本上,我需要保证,如果用户使用 zh , zh-cn , zh-sg 语言代码浏览我们的网站,他们将从 zh-hans 文件中获取资源,如果他们使用 zh-tw , zh-hk 或 zh-mo进行浏览,他们从 zh-hant 文件中获取资源。这些是我所知道的唯一的中文代码,但如果还有其他代码,那么它们也应该包括在内 - 基本上是一个中文用户,浏览器设置为任何中文,应该看到相应的简体中文或繁体中文 - 绝对不会见英文。
到目前为止,我的测试似乎表明是的,.NET正确地解决了它们,但我想确保没有隐藏或罕见的情况我不知道。
我知道zh-hans和zh-hant代码有点新 - 并被认为是#34; parent"文化。我也知道旧的通用父代码是zh-chs和zh-cht。 是否有旧浏览器允许选择这些zh-chs / zh-cht代码,如果是,.NET是否仍然会正确解析它们?
我不完全确定 .NET如何解析正确的资源文件,所以如果有人能指出我正确的方向,例如涉及哪些类/名称空间< / strong>,那也很棒。
的资源
Language codes for simplified Chinese and traditional Chinese?
IETF Language Tags
答案 0 :(得分:2)
答案是否定的 - 你不能只有zh-hans / zh-hant。因为,如果您这样做,并且您使用浏览器传递了基本 zh 代码,它将不会自动解析为zh-hans或zh-hant resx文件。
原因是由于名为“Resource Fallback Process”的东西。
基本上,.NET通过层次结构解析资源。它将从所请求的文化代码开始,如果不存在该特定文化代码的resx,它将开始向上移动层次结构,搜索所做的下一个文化代码 RESX。但是,它永远不会下降,只会上升。
以下是zh-sg [新加坡]的层次结构示例:
首先,它寻找zh-sg。如果zh-sg没有资源文件,则查找zh-chs。如果没有zh-chs的资源文件,它会查找zh-Hans。等等。
只有zh-Hans和zh-Hant适用于所有特定于语言环境的代码,例如zh-sg,zh-tw等。某些浏览器允许您选择Generic Simplified(zh-Hans)或Generic Traditional (zh-Hant),显然它也适用于那些场景。它不会工作的唯一情况是选择基本中文zh并在请求中传递。在那种情况下,如果zh不存在,它看起来的下一个地方就是Invariant文化 - 在这种情况下,返回英文文本 - 这显然不是我们想要的。
然后,我的解决方案是配对我的2个代码的基础 zh 和 zh-Hant 。 Base zh然后是我的包含简化文本的文件,zh-Hant当然是包含繁体文本的文件。我可以用相反的方式完成它(使zh包含传统文本并使用zh-Hans for Simplified)但实际上,我没有找到指南,关于基本zh应该代表什么。它应该是简化的还是传统的?我怀疑这主要是偏好问题。对几个热门网站的快速搜索显示,在大多数情况下,对基数zh的请求会生成Google Translate识别为简体的文本。在少数情况下,它确实产生了传统。但是,我选择了大多数人似乎正在做的事情。