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

时间:2012-03-21 12:29:41

标签: c# xaml windows-8 microsoft-metro

我尝试在App.xaml.cs中的Windows Metro应用程序中设置默认启动语言,但我找不到这样做的地方。通常我在C#中使用Thread.CurrentCulture来设置它,但我找不到Thread命名空间。我在这里缺少什么?

7 个答案:

答案 0 :(得分:4)

这在Windows8 CP中非常有用:

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

答案 1 :(得分:1)

如果仍然按需提供,我可以选择:

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

希望它有所帮助。

答案 2 :(得分:0)

您可以尝试在项目程序集上设置它。尝试右键单击项目,然后单击“装配信息...”并选择您的中性文化。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

也许在App.xaml.cs中设置如下所示将有助于

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

其中“no”是挪威语的BCP47语言标记。

更新:Metro app语言在运行时更改

根据Windows 8 SDK示例“应用程序资源和本地化”

  

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

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

Windows.Globalization.ApplicationPreferences.PreferredLanguage = "en";
this.Frame.Navigate(this.GetType());

我一直缺少的关键是App的OnLaunched活动中的代码:

ResourceManager.Current.DefaultContext.QualifierValues.MapChanged += async (s, m) => 
{
    if (m.Key == "Language")
    {
        // react to language change
    }
};

我没有将此事件注册放在Page的construtor或任何页面的事件中(因为它在SDK示例中),因为它可能已经多次注册。 仍然必须在某个地方注册此事件,以便语言更改在运行时生效。

答案 5 :(得分:0)

我认为您正在寻找的内容(在CP中)是Windows.Globalization.ApplicationPreferences.PreferredLanguage.

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

答案 6 :(得分:0)

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

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