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

3

我想在我的Windows Metro应用程序中的App.xaml.cs文件中设置默认启动语言,但我找不到设置的位置。通常情况下,我会使用C#中的Thread.CurrentCulture进行设置,但我无法找到Thread命名空间。请问我漏掉了什么?

7个回答

4

这在Windows8 CP中非常有效:

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

1
如果仍需此功能,这里有一个选项:
尝试在Package.appxmanifest中设置默认应用程序语言。使用VS打开清单,在适当的框中设置默认语言(应用程序UI -> 默认语言)。
希望有所帮助。

0
也许像下面展示的那样在 App.xaml.cs 中进行设置会有所帮助。
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示例中),因为那样它可能会被注册多次。 但是,这个事件必须在某个地方注册,以便在运行时生效。


0

打开你的Package.appxmanifest的代码视图 将Resources更改为:

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

0

我认为你在 CP 中寻找的是 Windows.Globalization.ApplicationPreferences.PreferredLanguage.

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


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

1
更新:我实际上尝试过了,但Metro应用程序没有找到正确的资源文件。我已经检查过,使用以下代码在app.xaml.cs中实际上成功设置了文化://即使操作系统是英语,也将挪威语设置为默认启动语言。 System.Globalization.CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("no"); System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("no"); - chrisva
1
更新:但是由于我的Windows 8操作系统安装的是英文版,所以仍然加载英文资源文件。我已按照此快速入门所述定义了资源:http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh771181.aspx,但没有成功。我还希望用户能够在运行时更改语言。 - chrisva
1
你有没有想过如何在C# Metro应用程序运行时更改语言以加载正确的语言资源? - chrisva
1
我不确定你是否可以这样做。我没有在win8上尝试过,但我猜它使用的是与WP7相同的模型,即只有用户定义语言。但你可以定义接受的文化:https://dev59.com/OG865IYBdhLWcg3wduaH,也许这可以帮助到你? - Tomas Jansson

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接