【发布时间】:2012-03-21 12:29:41
【问题描述】:
我尝试在 App.xaml.cs 中的 Windows Metro 应用程序中设置默认启动语言,但我找不到执行此操作的位置。通常我在 C# 中使用 Thread.CurrentCulture 进行设置,但我找不到 Thread 命名空间。我在这里缺少什么吗?
【问题讨论】:
标签: c# xaml windows-8 microsoft-metro
我尝试在 App.xaml.cs 中的 Windows Metro 应用程序中设置默认启动语言,但我找不到执行此操作的位置。通常我在 C# 中使用 Thread.CurrentCulture 进行设置,但我找不到 Thread 命名空间。我在这里缺少什么吗?
【问题讨论】:
标签: c# xaml windows-8 microsoft-metro
这在 Windows8 CP 中效果很好:
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "de";
var resourceLoader = new ResourceLoader();
【讨论】:
如果仍然需要,我可以在这里选择:
尝试在 Package.appxmanifest 中设置默认应用语言。使用 VS 打开清单并在适当的框中设置默认语言(应用程序 UI -> 默认语言)。
希望对你有帮助。
【讨论】:
您可以尝试在项目程序集中设置它。尝试右键单击该项目,然后单击“Assembly Information...”并选择您的中立文化。
【讨论】:
您可以使用 CultureInfo.DefaultThreadCurrentCulture 属性设置默认线程文化。
【讨论】:
也许如下所示在 App.xaml.cs 中设置它会有所帮助
Windows.Globalization.ApplicationPreferences.PreferredLanguage = "no";
其中“no”是挪威语的 BCP47 语言标签。
更新:Metro 应用程序在运行时更改语言
根据 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 的构造函数或任何页面的事件中(就像在 SDK 示例中一样),因为它可能已被多次注册。 仍然必须在某处注册此事件,以便语言更改在运行时生效。
【讨论】:
我认为您正在寻找(在 CP 中)是 Windows.Globalization.ApplicationPreferences.PreferredLanguage.
请注意,您的清单应列出您实际支持的所有语言。如果项目中的 manifest 包含x-generate,VS 会自动为你设置语言。
【讨论】:
打开 Package.appxmanifest 的代码视图 将资源更改为:
<Resources>
<Resource Language="x-generate" />
</Resources>
【讨论】: