2016-09-01 4 views
0

У меня есть следующий код в SettingsPage.xamlшаблона 10 Переключатель настройки языка

<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; 

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

ответ

0

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

// скопированный код из состояния выше

_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"); 
} 

тогда французский будет в «True» состояние ... в противном случае «ложь» английский ..

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

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

+0

Спасибо, я хочу сделать настройку в SettingsPage.xaml, чтобы пользователи могли переключаться между двумя языками. Я не могу представить, как работать на изменение языка, это моя проблема. Может быть, лучше сделать выпадающее меню, в котором есть 2 варианта 1 для английского, 2-й для французского, моя проблема заключается в том, что я не могу понять это выпадающее меню, когда пользователь выбирает английский на английском или выбирает французский, а затем переходит на французский. Значит, есть идея, как это сделать человек? – Alex

+0

У меня есть файлы ресурсов, и я отлично работаю, если я изменю код из var culture = new CultureInfo («fr-FR») в var culture = new CultureInfo («en-US»); – Alex

+0

Выше кода подозрительно ... Код не является симметричным между случаями «истина» и «ложь». Также код не проверяет фактическое изменение, поэтому он будет тратить время, если свойство установлено на то же значение ... – Phil1970

Смежные вопросы