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

C# Windows 8 Metro应用程序(XAML)-如何设置默认启动语言?,c#,xaml,windows-8,microsoft-metro,C#,Xaml,Windows 8,Microsoft Metro,我尝试在app.xaml.cs中的Windows Metro应用程序中设置默认启动语言,但找不到执行此操作的位置。通常我使用C#中的Thread.CurrentCulture进行设置,但找不到线程名称空间。我有什么遗漏吗 您可以尝试在项目程序集上设置它。尝试右键单击项目,然后单击“程序集信息…”并选择您的非特定区域性。您可以使用CultureInfo.DefaultThreadCurrentCulture属性设置默认线程区域性。也许在App.xaml.cs中设置它会有所帮助,如下所示 Windo

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

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

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

也许在App.xaml.cs中设置它会有所帮助,如下所示

Windows.Globalization.ApplicationPreferences.PreferredLanguage = "no";
其中“否”是挪威语的BCP47语言标记

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

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

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

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

Windows.Globalization.ApplicationPreferences.PreferredLanguage = "en";
this.Frame.Navigate(this.GetType());
我一直缺少的关键是应用程序唯一启动事件中的以下代码:

ResourceManager.Current.DefaultContext.QualifierValues.MapChanged += async (s, m) => 
{
    if (m.Key == "Language")
    {
        // react to language change
    }
};
我没有将此事件注册放在页面的construtor或任何页面的事件中(就像在SDK示例中一样),因为这样它可能已注册多次。
但是,此事件必须在某个地方注册,才能使语言更改在运行时生效。

我认为您(在CP中)要查找的是
Windows.Globalization.ApplicationPreferences.PreferredLanguage.


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

则VS将自动为您设置语言这在Windows8 CP中非常有效:

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

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

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

如果仍然需要,我可以在这里选择:

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


希望有帮助。

UDPATE:我确实试过了,但是Metro应用程序没有找到正确的资源文件。我已经检查过,我确实使用以下代码在app.xaml.cs中设置了区域性://将挪威语设置为默认启动语言,即使操作系统I为英语。System.Globalization.CultureInfo.DefaultThreadCurrentCulture=新的CultureInfo(“否”);System.Globalization.CultureInfo.DefaultThreadCurrentUICulture=new CultureInfo(“否”);更新:但英文资源文件仍在加载,因为我的Windows 8操作系统似乎是用英文安装的。我已经定义了这个快速入门中描述的资源:但是没有运气。我还希望用户能够在运行时更改语言。知道如何在运行时更改C#Metro应用程序中的语言以加载正确的语言资源吗?我不确定您是否可以这样做。我还没有在win8上尝试过,但我想它使用的模型与WP7相同,也就是说,只有用户定义语言。但是你可以定义你所接受的文化:,也许这有帮助?