在UWP中更改语言不会改变系统功能语言 - 仅在应用程序重启时

时间:2017-03-17 13:56:08

标签: xaml localization uwp

我有一个UWP应用程序。

我需要动态更改语言环境,所以我可以更改语言:

Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = language.FourDigitCode;
ResourceContext.GetForViewIndependentUse().Reset();
ResourceContext.GetForCurrentView();

但问题是系统功能语言无法切换(仅在应用程序重新启动后)如何解决?

以下是一个例子:

enter image description here

现在我运行此代码:

Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "lv-LV";
ResourceContext.GetForViewIndependentUse().Reset();
ResourceContext.GetForCurrentView();

UI已本地化,但系统功能仍然未定位:

enter image description here

但是当我重新启动应用程序时,一切正常:

enter image description here

任何想法我该如何解决?

2 个答案:

答案 0 :(得分:4)

我担心没有解决这个问题,你所看到的是设计。 PrimaryLanguageOverride属性的参考备注

  

设置PrimaryLanguageOverride时,会立即反映在Languages属性中。但是,此更改可能不会立即对应用程序UI中加载的资源生效。要确保应用程序响应此类更改,您可以在默认资源上下文中侦听QualifierValues属性,并采取可能需要的任何操作来重新加载资源。这些要求可能因应用程序使用的UI框架而异,可能需要重新启动应用

对于您的方案,需要重新启动。我建议你可以添加一个提示,告诉用户重启应用程序,还有一个关闭应用程序的按钮,就像新闻应用程序中使用的一样。 enter image description here
要关闭应用,我们可以调用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());
}