背景
我们有一个较旧的Webforms应用程序,并且没有使用我知道的任何自定义语言/全球化代码。我们正在使用resx文件来获取文化专用资源。对于中文,我们目前有4个resx文件:zh,zh-cn,zh-hans和zh-hant。为简单起见,我希望将配对数减少为2:zh-hans和zh-hant。我们不打算支持任何特定于语言环境的版本;只是普通简体中文和普通繁体中文。
问题
我的主要问题是:在任何情况下,我需要的中文文件超过zh-hans或zh-hant文件吗? *除了支持任何特定于语言环境的变体之外。
基本上,我需要保证,如果用户使用zh,zh-cn,zh-sg语言代码浏览到我们的网站,则他们将从zh-hans文件中获取资源,并且如果他们使用zh-tw,zh-hk浏览或zh-mo,他们从zh-hant文件中获取资源。这些是我所知道的唯一中文代码,但是如果还有其他中文代码,也应该包括在这里-基本上是说中文的用户,其浏览器设置为任何中文,应该看到适当的简体中文或繁体中文-绝对不要看英语。
到目前为止,我的测试似乎表明可以,.NET可以正确解析它们,但是我想确保没有遗漏的罕见或罕见情况。
我知道zh-hans和zh-hant编码较新-并被视为“父母”文化。我还知道,旧的通用父代码是zh-chs和zh-cht。是否有旧的浏览器可以选择这些zh-chs / zh-cht代码,如果可以,.NET仍会适当地解析它们吗?
我不太确定.NET如何解析正确的资源文件,因此,如果有人可以向我指出正确的方向,例如涉及哪些类/命名空间,那也很好。
资源资源
Language codes for simplified Chinese and traditional Chinese?
IETF Language Tags
最佳答案
答案是否定的-您不能只有zh-hans / zh-hant。因为,如果这样做,并且您在浏览器中传递了基本的zh代码,它将不会自动解析为zh-hans或zh-hant resx文件。
原因是由于所谓的“ Resource Fallback Process”。
基本上,.NET通过层次结构解析资源。它将从请求的区域性代码开始,如果不存在用于该特定区域性代码的resx,则它将开始沿层次结构移动,搜索下一个具有resx的区域性代码。但是,它永远不会下降,只会上升。
这是zh-sg [Singapore]的层次结构示例:
不变的
zh
zh-Hans
zh-chs(旧版通用代码)
zh-sg(语言环境专用代码)
因此,首先查找zh-sg。如果没有zh-sg的资源文件,它将查找zh-chs。如果没有zh-chs的资源文件,它将查找zh-Hans。依此类推。
仅使用zh-Hans和zh-Hant即可适用于所有特定于语言环境的代码,例如zh-sg,zh-tw等。某些浏览器允许您选择通用简化(zh-Hans)或通用传统(zh- Hant),并且显然也可以在这些情况下使用。唯一无法解决的情况是选择基本中文zh并将其传递到请求中。在这种情况下,如果zh不存在,那么下一个出现的地方就是不变文化-在这种情况下,该文化返回英语文本-这显然不是我们想要的。
因此,我的解决方案是将我的2个代码配对为基本zh和zh-Hant。 zh基是我的文件,其中包含简体文本,而zh-Hant当然是我的文件,其中包含繁体文本。我可以反过来做(使zh包含传统文本,并使用zh-Hans来表示简体),但实际上,我找不到关于zh应该代表什么的指南。应该简化还是传统?我怀疑这很大程度上是个人喜好问题。快速搜索几个受欢迎的网站后发现,在大多数情况下,要求以zh为基础的文字会产生文本,Google Translate会将其识别为“简体”。在某些情况下,它确实产生了繁体字。但是,我接受了大多数人似乎正在做的事情。
关于c# - 如果不需要支持特定于语言环境的版本,是否可以仅将zh-Hans/zh-Hant resx文件用于中文?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36406640/