在WinRT应用程序中即时本地化

时间:2014-01-02 13:02:57

标签: c# windows-8 windows-runtime windows-store-apps winrt-xaml

在WinRT应用程序中,重新启动应用程序时会应用更新的本地化(使用代码或通过更改控制面板中的语言)。如果我想在不重新启动应用程序的情况下即时更改本地化字符串,该怎么办?

假设我有不同语言的组合框。如果用户选择任何语言,则所有字符串都将使用资源进行翻译。

我遇到了这段代码,但只有当我把它放在App构造函数中时它才有用,它也只在启动时才有效。我不能把它变成静态方法,因为它不起作用。

var culture = new System.Globalization.CultureInfo("en-US");
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = culture.Name;
System.Globalization.CultureInfo.DefaultThreadCurrentCulture = culture;
System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = culture;

我想要下面给出的图像。图片来自CodeProject article.

enter image description here

2 个答案:

答案 0 :(得分:6)

您需要重置资源管理器的上下文。

对于Windows 8.1:

var resourceContext = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView();
resourceContext.Reset();

您仍然需要强制页面重绘自身,然后重新请求资源以进行更改。对于Windows 8,您可以看到https://timheuer.com/blog/archive/2013/03/26/howto-refresh-languages-winrt-xaml-windows-store.aspx

请注意,PrimaryLanguageOverride是持久的,并且从您的问题描述中看起来您将正确设置它以响应用户启动的操作。我不认为你必须覆盖线程cultureinfos,除非用户也启动更改。

另请注意,PrimaryLanguageOverride采用BCP 47语言标记,而CultureInfo使用具有细微差别的区域设置名称。

答案 1 :(得分:0)

我从来没有试过这个,但我可以说如果你在Windows 8中开发应用程序,那么应用程序中没有像Map Change这样的方法。

但您可以通过以下方式实现您的功能 1制作应该在组合框事件更改时读取资源语言的功能。 2.确保在本地设置中保存特定的args。 3.之后,您只需实现可以刷新页面的刷新功能    语言变化。 一切顺利.. !!