Настройка переключения языка шаблона 10

У меня есть следующий код в SettingsPage.xaml

<ToggleSwitch x:Name="LanguageSwitch" x:Uid="LanguageSwiich"
                                  Header="Switch language"
                                  Margin="2,130,0,0"
                                  IsOn="{Binding IsFullScreen, Mode=TwoWay}"
                                  OffContent="English"
                                  OnContent="Franche"
                                  RelativePanel.AlignLeftWithPanel="True"
                                  RelativePanel.AlignTopWithPanel="True"  />

И добавил это в SettingsService.cs следующие коды только для тестирования

public bool IsEnglish
    {
        get { return _helper.Read<bool>(nameof(IsEnglish), true); }
        set
        {
            _helper.Write(nameof(IsEnglish), value);
            Views.Shell.HamburgerMenu.IsFullScreen = value;
        }
    }

И добавил это в SettingsPageViewModel.cs

public bool IsEnglish
    {
        get { return _settings.IsEnglish; }
        set
        {
            _settings.IsEnglish = value;
            base.RaisePropertyChanged();
            if (value)
            {
                var culture = new CultureInfo("fr");
                Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = culture.Name;
                CultureInfo.DefaultThreadCurrentCulture = culture;
                CultureInfo.DefaultThreadCurrentUICulture = culture;
            }
            else
            {
                var culture = new CultureInfo("en-US");
            }
        }
    }

Работает для IsFullScreen, но я хочу изменить язык вместо полноэкранного режима.

Добавлен последний код в App.xaml.cs

var IsEnglish = _settings.IsEnglish;

Итак, что я должен изменить здесь в своем коде, чтобы он работал.


person Alex    schedule 01.09.2016    source источник


Ответы (1)


Просто чтобы уточнить, вы хотите видеть английский язык только тогда, когда переключатель «истинен»? Основываясь на коде, который вы показали, по крайней мере, то, что я интерпретирую, показывает, что

//КОД скопирован сверху

_settings.IsEnglish = value;
base.RaisePropertyChanged();
if (value)  // if true then do this...
{
    var culture = new CultureInfo("fr-FR");
    Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = culture.Name;
    CultureInfo.DefaultThreadCurrentCulture = culture;
    CultureInfo.DefaultThreadCurrentUICulture = culture;
}
else  //not true aka FALSE
{
    var culture = new CultureInfo("en-US");
}

тогда французский язык будет в состоянии "Истина"... в противном случае "ложный" английский язык..

Что касается обновления пользовательского интерфейса во время выполнения, вам нужно сделать что-то вроде ответа на этот вопрос C# программно меняет язык приложения UWP в реальном времени

писатель в этом ответе также заявил, что потребуется перезапуск приложения. Я также добавлю, если у вас нет настроек файлов ресурсов в приложении, простое изменение CultureInfo ничего не даст, если у вас нет файлов ресурсов с переводами на месте ... уже ссылайтесь на x: Uid и как это может помочь вам в глобализации приложения.

person mvermef    schedule 01.09.2016
comment
Спасибо, я хочу сделать настройку в SettingsPage.xaml, чтобы пользователи могли переключаться между двумя языками. Я не могу понять вариант работы для смены языка, это моя проблема. Может быть, лучше сделать раскрывающийся список, в котором 2 выбирают 1 для английского языка, 2-й для французского, моя проблема в том, что я не могу понять, что это раскрывающееся меню, когда пользователь выбирает английский язык, переходит на английский или если они выбирают французский язык, а затем переходят на французский. Так есть идеи, как человек мог сделать это? - person Alex; 01.09.2016
comment
У меня есть файлы Resources, и они работают нормально, если я изменю код с var Culture = New CultureInfo(fr-FR) на var Culture = new CultureInfo(en-US); - person Alex; 01.09.2016
comment
Код выше подозрительный... Код не симметричен между случаями true и false. Кроме того, код не проверяет фактическое изменение, поэтому будет потрачено время, если для свойства установлено одно и то же значение... - person Phil1970; 01.09.2016
comment
вышеизложенное точно такое же, как и в исходном сообщении ОП, я прокомментировал очень плохую логику - person mvermef; 01.09.2016