2014-08-28 4 views
0

У меня возникли проблемы с изменением языка моего приложения. Язык должен быть изменен, когда пользователь изменяет выбранный элемент в поле со списком.Проблема локализации - Windows 8.1 App

Вот отрывок из части моего кода:

protected override void OnLaunched(LaunchActivatedEventArgs args) 
    {   
     ResourceContext.GetForCurrentView().QualifierValues.MapChanged += QualifierValues_MapChanged; 

    } 

private void QualifierValues_MapChanged(IObservableMap<string, string> sender, IMapChangedEventArgs<string> @event) 
    { 
     ResourceContext.ResetGlobalQualifierValues(); 
    } 

Код выпадающий является:

private void cbLanguage_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (e.AddedItems.Count > 0 && !String.IsNullOrEmpty(((ComboBoxItem)e.AddedItems[0]).Tag as string)) 
     { 
      LocalizationManager.UICulture = new System.Globalization.CultureInfo((string)((ComboBoxItem)e.AddedItems[0]).Tag); 
      Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = LocalizationManager.UICulture.Name; 
      int index = 0; 
      if (cbLanguage.SelectedIndex == 0 || cbLanguage.SelectedIndex < 0) 
      { 
       index = cbLanguage.Items.Count - 1; 
      } 
      else 
      { 
       index = cbLanguage.SelectedIndex - 1; 
      } 

      Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = (string)((ComboBoxItem)cbLanguage.Items[index]).Tag as String; 
      Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = ((ComboBoxItem)e.AddedItems[0]).Tag as String; 

      if (languageChange != null) 
      { 
       languageChange(sender, new EventArgs()); 
      } 
     } 
     else 
     { 
      LocalizationManager.UICulture = System.Globalization.CultureInfo.CurrentUICulture; 
     } 
    } 

Это возвращает ошибку нарушения прав доступа.

Не могли бы вы помочь мне, чтобы приложение меняло язык правильно?

+0

Я пробовал запустить этот код, но функция «MapChanged» не вызывается. Не могли бы вы поделиться кодом для combobox? Возможно, это поможет мне воссоздать вашу проблему. –

+0

Привет @BryanStump, Я обновил сообщение с кодом combobox. Спасибо, что пытался помочь мне. FYI, код, который у меня был для Windows 8, работал отлично. Это произошло, когда я нацелился на приложение на Windows 8.1. –

+0

Я запустил код и не смог воспроизвести ошибку. Без класса Менеджера локализации и зная, какие теги находятся в элементах со списком, возможно, существует ошибка. –

ответ

0

Код устанавливает Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride три раза. Что является причиной этого?

После установки языка ввода, зачем менять индекс и снова устанавливать язык?

if (cbLanguage.SelectedIndex == 0 || cbLanguage.SelectedIndex < 0) 
     { 
      index = cbLanguage.Items.Count - 1; 
     } 
     else 
     { 
      index = cbLanguage.SelectedIndex - 1; 
     } 
Смежные вопросы