Windows 8 Metro应用程序(XAML)-如何设置默认启动语言

本文关键字:设置 默认 语言 启动 何设置 Metro 应用程序 XAML Windows | 更新日期: 2023-09-27 18:28:25

我试图在app.xaml.cs中的Windows Metro应用程序中设置默认启动语言,但我找不到位置。通常我在C#中使用Thread.CurrentCulture进行设置,但找不到Thread命名空间。我这里有什么遗漏吗?

Windows 8 Metro应用程序(XAML)-如何设置默认启动语言

这在Windows8 CP:中非常有效

Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "de";
var resourceLoader = new ResourceLoader();

如果它仍然是按需的,我可以在这里选择:

尝试在Package.appxmanifest中设置默认的应用程序语言。使用VS打开清单,并在相应的框中设置默认语言(应用程序UI->默认语言)。

希望能有所帮助。

您可以尝试在项目程序集上设置它。尝试右键单击项目,然后单击"程序集信息…",然后选择您的中性区域性。

您可以使用CultureInfo.DefaultThreadCurrentCulture属性设置默认线程区域性。

也许在App.xaml.cs中设置它会有助于

Windows.Globalization.ApplicationPreferences.PreferredLanguage = "no";

其中"no"是挪威语的BCP47语言标签。

更新:Metro应用程序在运行时更改语言

根据Windows8SDK示例"应用程序资源和本地化"

应用程序运行时,语言、比例、对比度或其他设置可能会发生变化。为了处理这些事件,应该注册事件侦听器以侦听更改并对其做出反应。这可以通过存储状态和刷新页面来完成,也可以通过重新绘制特定资源来完成。

现在,在我的语言更改选择事件中,我正在设置PreferredLanguage,如:

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
    }
};

我没有把这个事件注册放在Page的构造器或任何页面的事件中(就像在SDK示例中一样),因为它可能已经注册了多次。不过,这个事件必须在某个地方注册,语言更改才能在运行时生效。

我想你(在CP中)要找的是Windows.Globalization.ApplicationPreferences.PreferredLanguage.

请注意,您的清单应该列出您实际支持的所有语言。如果项目中的清单包含x-generate,VS将自动为您设置语言。

打开Package.appxmanifest的代码视图将资源更改为:

  <Resources>
    <Resource Language="x-generate" />
  </Resources>