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文章.

您需要重置资源管理器的上下文.
对于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使用具有细微差别的区域设置名称.
| 归档时间: |
|
| 查看次数: |
1968 次 |
| 最近记录: |