【问题标题】:How to change CultureInfo.CurrentCulture in a C#/Windows Store app如何在 C#/Windows 应用商店应用程序中更改 CultureInfo.CurrentCulture
【发布时间】:2017-07-22 12:35:51
【问题描述】:

我希望 string.Format().ToString() 调用使用不变文化,而不是系统文化。

System.Globalisation.CultureInfo.CurrentCulture 属性在 Windows 应用商店应用中是只读的,因此不能直接更改,这与 .NET 4.6 及更高版本不同。

我尝试使用System.Globalization.CultureInfo.DefaultThreadCurrentCulture(根据documentation 应该可以工作),但它并没有改变任何东西:

System.Globalization.CultureInfo.DefaultThreadCurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = System.Globalization.CultureInfo.InvariantCulture;
var c1 = System.Globalization.CultureInfo.CurrentCulture;
Task.Run(delegate
{
    var c2 = System.Globalization.CultureInfo.CurrentCulture;
});

上面的代码执行后,c1和c2仍然包含我的本地系统文化,而不是不变的文化。 string.Format 仍然使用我的本地文化设置生成字符串。

肯定有办法改变线程的文化吗?

【问题讨论】:

  • 你能设置Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride吗?
  • @mjwills 这似乎有效,谢谢!尽管奇怪的是它不会立即起作用,但要经过一段时间后才能起作用。另外我不知道如何指定“不变”语言(CultureInfo.InvariantCulture)。

标签: c# windows-store-apps globalization


【解决方案1】:

我在App.Xaml.cs 构造函数中添加了以下代码。 (就在this.InitializeComponent();之后) 它对我有用。

var culture = CultureInfo.InvariantCulture;
        ApplicationLanguages.PrimaryLanguageOverride = culture.Name;
        CultureInfo.DefaultThreadCurrentCulture = culture;
        CultureInfo.DefaultThreadCurrentUICulture = culture;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    相关资源
    最近更新 更多