C# CultureInfo.CurrentCulture 说 en_US 但我的 Windows 设置设置为南非

标签 c# internationalization .net-4.5 windows-8.1 cultureinfo

我在 Windows 8.1 控制面板中将我的区域/位置更改为南非。当我从 Visual Studio 2013 启动我的应用程序并获取 CultureInfo.CurrentUICulture 时,它​​仍然显示“en-US”。

public CultureInfo getCurrentCulture() {
    if (CultureInfo.DefaultThreadCurrentUICulture != null) {
        return CultureInfo.DefaulThreadCurrentUICulture;
    } else {
        return CultureInfo.CurrentUICulture;
    }
}

我还尝试使用 CultureInfo.CurrentCulture 而不是 CurrentUICulture,但它们的行为方式相同。如何通过代码确定用户的真实语言环境?还是我通过 Windows 设置错误地设置了区域?

我的应用格式化货币字符串等,我需要确保它使用正确的货币符号。南非对我来说是一个很好的用例,因为他们仍然使用英语,但具有不同的区域数字格式。

最佳答案

我想我应该回答这个问题。

Windows 区分用户的物理位置、所需的本地化(格式)属性和运行语言。例如,讲西类牙语的用户可能位于英国,但想要美式英语格式。 CultureInfo.CurrentCulture引用"Formats"下的设置Regions 的选项卡控制面板。 (以上链接之一中显示的用户界面对于 Win8 来说有点过时;请参阅 here 以了解 Win8 类似物。)

本文提供了有关各种文化属性以及如何在用户界面中设置它们的更多信息:YACVCP (Yet another CurrentCulture vs. CurrentUICulture post)

因此,要测试南非货币字符串等,您必须将“格式”下拉菜单更改为“英语(南非)”并重新运行。

另外,通过实验,我发现当我重新运行我的应用程序时,Visual Studio 2008(我正在使用的)并不总能识别区域设置的变化。这可能是 Hosting Process 的某种错误.重新启动并重新运行我的应用程序通常似乎可以解决问题。关闭并重新打开 Visual Studio 总是如此。

(注意——我使用的是 Win7。)

关于C# CultureInfo.CurrentCulture 说 en_US 但我的 Windows 设置设置为南非,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25251224/

相关文章:

c# - 如何在 ASP.NET 和 C# 中重用这个基于 Ultimate RestSharp 客户端的 API 客户端?

C#计算打开文件的MD5?

ruby-on-rails - 如何为另一个语言环境提供自定义错误消息? (行动邮件)

javascript - Chrome 扩展程序中的本地化

angular - Firebase i18n 重写语言覆盖 cookie 被忽略

c# - 静态 HttpClient 仍在创建 TIME_WAIT tcp 端口

c# - 用 C# 中字典中的值替换字符串中的单词

c# - 使用数据库优先方法排除表

c# - 找不到 eBayAPIInterfaceService

c# - 如何使用 FluentMigrator 删除列?