我想在我的Windows Metro应用程序中的App.xaml.cs文件中设置默认启动语言,但我找不到设置的位置。通常情况下,我会使用C#中的Thread.CurrentCulture进行设置,但我无法找到Thread命名空间。请问我漏掉了什么?
我想在我的Windows Metro应用程序中的App.xaml.cs文件中设置默认启动语言,但我找不到设置的位置。通常情况下,我会使用C#中的Thread.CurrentCulture进行设置,但我无法找到Thread命名空间。请问我漏掉了什么?
这在Windows8 CP中非常有效:
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "de";
var resourceLoader = new ResourceLoader();
Windows.Globalization.ApplicationPreferences.PreferredLanguage = "no";
其中,“no”是挪威语的BCP47语言标签。
更新:Metro应用程序运行时更改语言
根据Windows 8 SDK示例“应用程序资源和本地化”
在应用程序运行时,语言、比例、对比度或其他设置可能会发生变化。为了处理这些事件,应注册事件侦听器以便监听并对更改做出反应。可以通过存储状态并刷新页面或重新绘制特定资源来完成此操作。
现在,在我的语言更改选择事件中,我正在设置首选语言,如下所示:
Windows.Globalization.ApplicationPreferences.PreferredLanguage = "en";
this.Frame.Navigate(this.GetType());
而我一直缺少的关键是在应用程序的 OnLaunched 事件下面的代码:
ResourceManager.Current.DefaultContext.QualifierValues.MapChanged += async (s, m) =>
{
if (m.Key == "Language")
{
// react to language change
}
};
我没有将此事件注册放在页面的构造函数或任何页面的事件中(因为它在SDK示例中),因为那样它可能会被注册多次。 但是,这个事件必须在某个地方注册,以便在运行时生效。
打开你的Package.appxmanifest的代码视图 将Resources更改为:
<Resources>
<Resource Language="x-generate" />
</Resources>
我认为你在 CP 中寻找的是 Windows.Globalization.ApplicationPreferences.PreferredLanguage.
请注意,你的清单应列出你实际支持的所有语言。如果项目中的清单包含 x-generate
,VS 将自动为你设置语言。
您可以使用CultureInfo.DefaultThreadCurrentCulture属性设置默认线程文化。