在RunTime上即时更改应用程序语言
我目前正在开发一个metro应用程序,用户可以在运行时更改当前语言,并且所有加载的自定义控件都必须更新有关新语言的文本。 问题是,当我使用以下代码更改语言时,应用程序语言会更改,但只有在重新启动应用程序时才更新文本,因为已经缓存的页面和控件已被缓存。
LocalizationManager.UICulture = new System.Globalization.CultureInfo((string)((ComboBoxItem)e.AddedItems[0]).Tag); Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = ((ComboBoxItem)e.AddedItems[0]).Tag as String;
如何在运行时强制更新所有自定义控件的文本而不重新启动我的应用程序?
用这个:
var NewLanguage = (string)((ComboBoxItem)e.AddedItems[0]).Tag; Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = NewLanguage; Windows.ApplicationModel.Resources.Core.ResourceContext.GetForViewIndependentUse().Reset(); //Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().Reset(); Windows.ApplicationModel.Resources.Core.ResourceManager.Current.DefaultContext.Reset();
然后使用Navigate方法重新加载您的页面:
if (Frame != null) Frame.Navigate(typeof(MyPage));
为了立即响应,您需要重置资源管理器的上下文。
对于Windows 8.1:var resourceContext = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView();
resourceContext.Reset();
您仍然需要强制页面重绘自身,然后重新请求资源以进行更改。 对于Windows 8,您可以查看https://timheuer.com/blog/archive/2013/03/26/howto-refresh-languages-winrt-xaml-windows-store.aspx
您可以在此源代码的帮助下在运行时更改应用程序的语言。 我从这里得到了帮助并操纵了我的应用程序的语言设置页面,如下所示:
在languageSettings.xaml.cs中:
public partial class LanguageSettings : PhoneApplicationPage { public LanguageSettings() { InitializeComponent(); } protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); if (ChangeLanguageCombo.Items.Count == 0) { ChangeLanguageCombo.Items.Add(LocalizationManager.SupportedLanguages.En); ChangeLanguageCombo.Items.Add(LocalizationManager.SupportedLanguages.Bn); } SelectChoice(); } private void ButtonSaveLang_OnClick(object sender, RoutedEventArgs e) { //Store the Messagebox result in result variable MessageBoxResult result = MessageBox.Show("App language will be changed. Do you want to continue?", "Apply Changes", MessageBoxButton.OKCancel); //check if user clicked on ok if (result == MessageBoxResult.OK) { var languageComboBox = ChangeLanguageCombo.SelectedItem; LocalizationManager.ChangeAppLanguage(languageComboBox.ToString()); //Application.Current.Terminate(); I am commenting out because I don't neede to restart my app anymore. } else { SelectChoice(); } } private void SelectChoice() { //Select the saved language string lang = LocalizationManager.GetCurrentAppLang(); if(lang == "bn-BD") ChangeLanguageCombo.SelectedItem = ChangeLanguageCombo.Items[1]; else { ChangeLanguageCombo.SelectedItem = ChangeLanguageCombo.Items[0]; } } }
***注意:在理解我在LanguageSettings页面的代码背后所做的事情之前,您必须按照前面所述的链接实现代码。 而且还可以注意到我正在使用Windows Phone 8