在 C# 中,CultureInfo 是处理语言、区域、日期格式、数字格式和多语言资源的核心类。获取“系统语言”时,不能只依赖一个属性,因为界面语言、数据格式、操作系统默认语言可能并不完全一致。理解 CurrentCulture、CurrentUICulture、InstalledUICulture 等属性的区别,才能准确获取系统语言并正确实现多语言应用。
CultureInfo 位于 System.Globalization 命名空间,用于表示一种区域性信息,包括语言、国家/地区、日历、日期时间格式、数字格式、货币符号和字符串比较规则。
区域性名称通常由语言代码和国家/地区代码组成,例如 zh-CN 表示简体中文(中国),en-US 表示英语(美国),ja-JP 表示日语(日本)。 其中,zh-Hans 表示简体中文脚本,zh-Hant 表示繁体中文脚本,是现代应用中更推荐使用的形式。
通过 CultureInfo 可以获取语言名称、显示名称、日期格式、数字格式等信息,也可以用于格式化、解析、资源加载和字符串比较。
C# 中获取系统语言或区域性时,常用以下几种方式:
CultureInfo.CurrentUICulture
表示当前线程的界面区域性,资源管理器会根据它加载对应的本地化资源。 它通常反映应用程序当前使用的 UI 语言。
CultureInfo.CurrentCulture
表示当前线程的数据格式化区域性,影响日期、时间、数字、货币等格式。 它更偏重于“数据如何显示”,而不是界面文本使用哪种语言。
CultureInfo.InstalledUICulture
表示操作系统安装时使用的默认 UI 区域性,适合获取系统默认语言。 它不会因为当前线程设置而改变。
Thread.CurrentThread.CurrentUICulture
与 CultureInfo.CurrentUICulture 类似,但通过线程对象访问。 在较新的 .NET 版本中,推荐优先使用 CultureInfo.CurrentUICulture。
CultureInfo.InvariantCulture
表示与任何区域无关的固定区域性,常用于日志、文件解析、数据交换等需要稳定格式的场景。
这两个属性经常被混淆,但它们解决的问题不同:
CurrentCulture 负责数据格式化
它决定日期、时间、数字、货币如何显示和解析。例如,同样一个金额,在 en-US 下可能显示为 $1,234.56,在 zh-CN 下可能显示为 ¥1,234.56。
CurrentUICulture 负责界面语言
它决定应用程序加载哪种语言的资源文件,例如按钮文本、提示信息、菜单名称。 如果应用中有 Resources.zh-CN.resx 和 Resources.en-US.resx,资源管理器会根据 CurrentUICulture 选择对应资源。
两者可以不同
用户可能希望界面使用英文,但日期和数字仍按中文习惯显示。此时可以将 CurrentUICulture 设为 en-US,将 CurrentCulture 设为 zh-CN。
简单理解:CurrentCulture 回答“数据怎么格式化”,CurrentUICulture 回答“界面显示哪种语言”。
自动识别系统语言
应用启动时读取 CultureInfo.CurrentUICulture.Name 或 CultureInfo.InstalledUICulture.Name,根据返回值加载对应语言资源。
手动切换应用语言
用户选择语言后,设置 CultureInfo.CurrentUICulture 或 Thread.CurrentThread.CurrentUICulture,再重新加载界面资源。
统一数据格式
在服务器、日志、配置文件或数据交换场景中,可使用 CultureInfo.InvariantCulture 避免不同系统环境导致解析错误。
格式化日期和货币
使用 DateTime.ToString(format, culture) 或 decimal.ToString("C", culture) 按指定区域性输出结果。
多资源文件匹配
资源文件通常按 Resources.zh-CN.resx、Resources.en-US.resx 命名,ResourceManager 会根据 CurrentUICulture 自动匹配。
不要仅凭 CurrentCulture 判断界面语言,它主要影响格式化行为。
不要仅凭 CurrentUICulture 判断日期格式,界面语言和数据格式可能不一致。
修改区域性时,应同时考虑 CurrentCulture 和 CurrentUICulture,避免界面语言与数据格式冲突。
在多线程或异步场景中,区域性可能随线程变化,需要确认设置是否生效。
保存或传输数据时,优先使用 InvariantCulture,减少因区域差异导致的解析问题。
中文区域性建议优先使用 zh-Hans、zh-Hant,而不是过时的 zh-CHS、zh-CHT。
![]()
CultureInfo 是 C# 中获取系统语言和处理区域化信息的基础类。获取界面语言应优先使用 CurrentUICulture,获取数据格式化规则应使用 CurrentCulture,获取操作系统默认语言可使用 InstalledUICulture,而跨环境数据交换则适合使用 InvariantCulture。实际开发中,应根据“界面语言”和“数据格式”分别处理,避免把两者混为一谈。正确使用这些属性,可以让应用程序在多语言、多区域环境下表现更稳定、更符合用户习惯。
声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com
包含研学创作(大纲)和研学创作(全文)
通过请求综述题目、指定文献ID集合、生成模式及学科名称,以流式方式返回生成的调研综述全文及引用的参考文献信息。
通过请求问题内容、学科名称及选题目的,返回包含中英文题目、推荐理由、多维度评分及相似文献的智能选题推荐结果。
通过自然语言请求,选择以流式或非流式方式返回模型生成的对话回复及相关的参考文献引用信息。
包含会议文献和会议文献详情