Язык приложений 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 это пингует все ваши языковые ресурсы.

Другие вопросы по тегам