C# WinRT应用程序中的动态本地化

C# WinRT应用程序中的动态本地化,c#,windows-8,windows-runtime,windows-store-apps,winrt-xaml,C#,Windows 8,Windows Runtime,Windows Store Apps,Winrt Xaml,在WinRT应用程序中,当应用程序重新启动时(使用代码或通过从控制面板更改语言),将应用更新的本地化。如果我想在不重新启动应用程序的情况下动态更改本地化字符串,该怎么办 假设我有不同语言的组合框。若用户选择任何语言,所有字符串都将使用资源进行翻译 我遇到了这段代码,但只有当我把它放在Appconstructor中时,它才起作用,这也是仅在启动时。我不能使它成为一个静态方法,因为它不工作 var culture = new System.Globalization.CultureInfo("en-

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

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

我遇到了这段代码,但只有当我把它放在
App
constructor中时,它才起作用,这也是仅在启动时。我不能使它成为一个静态方法,因为它不工作

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

我想要下面给定的图片。图像来自


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

对于Windows 8.1:

var resourceContext = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView();
resourceContext.Reset();
您仍然需要强制页面重新绘制自身,从而重新请求资源以进行更改。对于Windows 8,您可以看到

请注意,PrimaryLanguageOverride是持久化的,从您的问题描述来看,您应该正确设置它以响应用户发起的操作。我认为您不必重写线程CultureInfo,除非用户也启动了更改


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

我从未尝试过这一点,但我可以说,如果您在windows 8中开发应用程序,那么应用程序中就不会出现类似映射的更改方法

但您可以通过以下方式实现您的功能 1生成函数,该函数应读取组合框事件更改上的资源语言。 2.确保在本地设置中保存特定参数。 3.之后,您只需实现一个刷新功能,它可以使用 语言变化。 祝你一切顺利