.NET WPF本地化:CurrentUICulture显示zh-CN而非zh-HANS的疑问
问题解答
1. 为什么Thread.CurrentThread.CurrentUICulture.Name返回zh-CN而非zh-HANS?
这是Windows系统区域设置的正常行为:
- zh-CN是特定区域性文化代码,对应「中文(中国)」,是中国内地Windows系统默认的UICulture值,包含语言+区域的完整信息。
- zh-Hans是中性文化代码,仅代表「简体中文」这个语言,不绑定具体区域。
系统会根据用户的区域设置返回对应的特定区域性,而非中性文化,所以你看到的zh-CN是符合预期的系统行为。
2. .NET能加载Resources.zh-Hans.resx的原因
确实是.NET的资源回退机制在起作用,但不是直接回退到「zh」,而是回退到特定区域性的父级中性文化:
- 当.NET找不到对应特定区域性的资源文件(你这里没有
Resources.zh-CN.resx),会自动向上查找该文化的父级中性文化资源。zh-CN的父级中性文化就是zh-Hans,所以会加载Resources.zh-Hans.resx。 - .NET资源查找的优先级是:特定区域性资源 → 中性区域性资源 → 默认资源(
Resources.resx)。
修复依赖文化值的功能代码建议
既然不能依赖CurrentUICulture.Name的硬编码字符串判断,建议换这些方式:
- 检查
CurrentUICulture.Parent.Name是否为zh-Hans,判断是否是简体中文环境 - 使用
CurrentUICulture.IsNeutralCulture区分中性/特定文化,再结合语言属性判断 - 尽量直接依赖资源文件的加载逻辑,而非手动判断文化字符串,避免硬编码带来的适配问题
内容的提问来源于stack exchange,提问作者Andrew Stephens
相关产品推荐
相关产品推荐

