c# - 如果我不需要支持特定于语言环境的变体,我可以仅使用 zh-Hans/zh-Hant resx 文件来表示中文吗?

标签 c# asp.net localization internationalization resx

背景
我们有一个较旧的 Web 表单应用程序,并且我们没有使用我所知道的任何自定义语言/全局化代码。我们使用 resx 文件来获取特定于文化的资源。对于中文,我们目前有 4 个 resx 文件:zh、zh-cn、zh-hans 和 zh-hant。为了简单起见,我希望将其配对为 2:zh-hans 和 zh-hant。我们不打算支持任何特定于区域设置的变体;只是通用简体中文和通用繁体中文。

问题

  1. 我的主要问题是:在什么情况下我需要有超过 zh-hans 或 zh-hant 的中文文件? *除了需要支持任何特定于区域设置的变体之外。

    基本上,我需要保证如果用户使用 zhzh-cnzh-sg 语言代码浏览我们的网站,他们会从 zh-hans 文件获取资源,以及它们是否使用 zh-twzh-hkzh-mo 浏览,他们从zh-hant文件获取资源。这些是我所知道的唯一的中文代码,但如果有其他的,它们也应该包含在这里 - 基本上一个讲中文的用户,将浏览器设置为任何中文,应该看到适当的简体或繁体中文 - 并且绝对不会参见英文。

    到目前为止,我的测试似乎表明,是的,.NET 可以正确解决它们,但我想确保没有遗漏任何隐藏或罕见的场景。

  2. 我知道 zh-hans 和 zh-hant 代码有点新 - 并且被视为“父”文化。我还知道旧的通用父代码是 zh-chs 和 zh-cht。 是否有旧的浏览器允许选择这些 zh-chs/zh-cht 代码,如果是,.NET 仍会正确解析它们吗?

  3. 我不完全确定如何 .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 [新加坡] 的层次结构示例:

  1. 不变
  2. zh
  3. zh-汉斯
  4. zh-chs(旧版通用代码)
  5. 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 个代码配对为基础 zhzh-Hant。 Base zh 是我包含简体文本的文件,zh-Hant 当然是我包含繁体文本的文件。我可以用另一种方式做到这一点(使 zh 包含繁体文本并使用 zh-Hans 表示简体文本),但实际上,我找不到关于基本 zh 应该代表什么的指导方针。应该简化还是繁体?我怀疑这很大程度上是一个偏好问题。对几个流行网站的快速搜索表明,在大多数情况下,对基本 zh 的请求会生成谷歌翻译识别为简化版的文本。在少数情况下,它确实产生了传统的。但是,我遵循了大多数人似乎在做的事情。

关于c# - 如果我不需要支持特定于语言环境的变体,我可以仅使用 zh-Hans/zh-Hant resx 文件来表示中文吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36406640/

相关文章:

c# - 创建用户时出错 - ASP.NET System.Web.Providers

c# - 如何使用 FtpWebResponse 创建 WebException 进行测试?

ASP.Net 成员(member)主体权限问题

c# - 如何通过 HTTPS 实现 ServiceStack.net rest 调用?

ios - 本地化所有语言的应用商店名称

asp.net - 如何运行 ASP.NET 5 MVC 6 rc2 的本地化示例

c# - 在wpf中单击图像外部时隐藏图像

c# - 我如何使用 MVC.Net 模型绑定(bind) 'List<SelectItem>' 的列表

c# - ASP.Net 表单数据绑定(bind)问题

python - 如何更改 django rest 框架中序列化程序中使用的 DECIMAL_SEPARATOR 和 THOUSAND_SEPARATOR?