我有一个UWP应用程序。
我需要动态更改语言环境,所以我可以更改语言:
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = language.FourDigitCode;
ResourceContext.GetForViewIndependentUse().Reset();
ResourceContext.GetForCurrentView();
但问题是系统功能语言无法切换(仅在应用程序重新启动后)如何解决?
以下是一个例子:
现在我运行此代码:
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "lv-LV";
ResourceContext.GetForViewIndependentUse().Reset();
ResourceContext.GetForCurrentView();
UI已本地化,但系统功能仍然未定位:
但是当我重新启动应用程序时,一切正常:
任何想法我该如何解决?
答案 0 :(得分:4)
我担心没有解决这个问题,你所看到的是设计。 PrimaryLanguageOverride属性的参考备注:
设置PrimaryLanguageOverride时,会立即反映在Languages属性中。但是,此更改可能不会立即对应用程序UI中加载的资源生效。要确保应用程序响应此类更改,您可以在默认资源上下文中侦听QualifierValues属性,并采取可能需要的任何操作来重新加载资源。这些要求可能因应用程序使用的UI框架而异,可能需要重新启动应用。
对于您的方案,需要重新启动。我建议你可以添加一个提示,告诉用户重启应用程序,还有一个关闭应用程序的按钮,就像新闻应用程序中使用的一样。
要关闭应用,我们可以调用Application.Exit方法,如下所示。
Application.Current.Exit();
答案 1 :(得分:0)
也许页面重新加载可以修复它?尝试重新导航到同一页面。 找到以下示例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());
}