Язык приложений UWP не меняется динамически
Я написал код для изменения языка текстового блока на другой язык одним нажатием кнопки. Но это не меняется при нажатии на кнопку. Но, похоже, меняется, когда я перезагружаю приложение или нажимаю кнопку еще раз. Как я могу изменить язык динамически?
private void Btn_Click(object sender, RoutedEventArgs e)
{
ChangeLanguage("fr");
}
private void ChangeLanguage(string language)
{
var culture = new System.Globalization.CultureInfo(language);
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = culture.Name;
Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().Reset();
Windows.ApplicationModel.Resources.Core.ResourceContext.GetForViewIndependentUse().Reset();
if (Frame != null)
Frame.Navigate(typeof(MainPage));
}
1 ответ
Вы можете изменить язык динамически:
var resourceContext = ResourceContext.GetForCurrentView();
var resourceMap = ResourceManager.Current.MainResourceMap.GetSubtree("Resources");
resourceContext.QualifierValues["Language"] = "fr";
//if your string in .resw file called "Name.Text" you should swap "." to "/" in code or XAML
var localizedString = resourceMap.GetValue("Name/Text", resourceContext).ValueAsString;
Теперь, если вы хотите x:Bind
это вы должны создать ObservableCollection
локализованных предметов и изменить его с помощью foreach OnLanguageChange
событие или некоторый класс, который реализует INotifyPropertyChanged
это пингует все ваши языковые ресурсы.