在UWP中更改语言不会更改系统功能语言 - 仅在应用程序重新启动时
问题描述:
我有一个UWP应用程序。在UWP中更改语言不会更改系统功能语言 - 仅在应用程序重新启动时
,我有一个需要改变的飞行区域,所以我有这个语言变化:
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = language.FourDigitCode;
ResourceContext.GetForViewIndependentUse().Reset();
ResourceContext.GetForCurrentView();
但有该系统功能的语言不转换(仅适用于应用程序后重新推出的一个问题)我该如何解决它?
下面是一个例子:
现在我运行这段代码:
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "lv-LV";
ResourceContext.GetForViewIndependentUse().Reset();
ResourceContext.GetForCurrentView();
的UI被本地化,但系统功能仍然保持未经定位:
但是,当我重新启动应用程序,一切都OK:
任何想法如何解决呢?
答
恐怕没有解决这个问题,你看到的是设计。参考备注PrimaryLanguageOverride财产:
当您设置PrimaryLanguageOverride,这立即反映在Languages财产。但是,此更改可能不会立即对应用UI中加载的资源生效。为了确保应用程序响应此类更改,您可以在默认资源上下文中监听QualifierValues属性,并采取可能需要的任何操作来重新加载资源。这些要求可能会因应用程序使用的UI框架而异,并且可能需要重新启动应用程序。
对于您的情况,需要重新启动。我建议你可以添加一个小贴士来告诉用户重新启动应用程序,还有一个按钮来关闭应用程序,就像新闻应用程序中使用的那样。
并关闭应用程序,我们可以打电话Application.Exit方法如下。
Application.Current.Exit();
答
也许页面重新加载可以修复它?尝试重新导航到同一页面。 找到下面的例子here。
//like this
private bool Reload(object param = null)
{
var type = Frame.CurrentSourcePageType;
Frame.Navigate(type, param);
Frame.BackStack.Remove(Frame.BackStack.Last());
}
// or like this
private bool Reload(object param = null)
{
var frame = Window.Current.Content as Frame;
frame.Navigate(frame.CurrentSourcePageType, param);
frame.BackStack.Remove(frame .BackStack.Last());
}
Jea,但多数民众赞成在酷...也许有另一种选择本地化的应用程序,也没有重新加载应用程序的系统功能? – Cheese
@Cheese AFAIK,您的场景没有其他选择。需要重新启动。 –