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

Xyr*_*oid 7 c# windows-8 windows-runtime winrt-xaml windows-store-apps

在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;
Run Code Online (Sandbox Code Playgroud)

我想要下面给出的图像.图像来自CodeProject文章.

在此输入图像描述

Eri*_*SFT 6

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

对于Windows 8.1:

var resourceContext = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView();
resourceContext.Reset();
Run Code Online (Sandbox Code Playgroud)

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

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

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