2017-03-17 75 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()); 
}