2017-03-17 145 views
4

我有一个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

但是,当我重新启动应用程序,一切都OK:

enter image description here

任何想法如何解决呢?

回答

2

恐怕没有解决这个问题,你看到的是设计。参考备注PrimaryLanguageOverride财产

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

对于您的情况,需要重新启动。我建议你可以添加一个小贴士来告诉用户重新启动应用程序,还有一个按钮来关闭应用程序,就像新闻应用程序中使用的那样。 enter image description here
并关闭应用程序,我们可以打电话Application.Exit方法如下。

Application.Current.Exit(); 
+0

Jea,但多数民众赞成在酷...也许有另一种选择本地化的应用程序,也没有重新加载应用程序的系统功能? – Cheese

+1

@Cheese AFAIK,您的场景没有其他选择。需要重新启动。 –

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()); 
}