2

Ich versuche meine Windows Phone 8.0 App (SilverLight) zu lokalisieren. Ich möchte die Standard Appresources.resx Datei nach Benutzerwahl ändern. Wenn der Benutzer die Sprache von der Einstellungsseite ändert, möchte ich ihn in IsolatedStorageSettings speichern und dann die Appresources Datei der gespeicherten Sprache in der InitializeLanguage()-Methode angeben, die in meinem Konstruktor der Klasse app.xaml.cs aufgerufen wurde.Wie speichere ich die Sprachauswahl des Benutzers und ändere die gesamte App-Sprache in Windows Phone 8?

Ich lernte den theoretischen Prozess, aber ich bin nicht in der Lage, weiter zu gehen.

Im Folgenden sind die Code-Schnipsel zum besseren Verständnis meines Problems.

private void InitializeLanguage() 
     { 
      try 
      { 
       RootFrame.Language = XmlLanguage.GetLanguage(AppResources.ResourceLanguage); 
       FlowDirection flow = (FlowDirection)Enum.Parse(typeof(FlowDirection), AppResources.ResourceFlowDirection); 
       RootFrame.FlowDirection = flow; 
      } 
      catch 
      { 
       if (Debugger.IsAttached) 
       { 
        Debugger.Break(); 
       } 
       throw; 
      } 
     } 

Und die Einstellungsseite Code hinter dem ich zunächst die Sprache eines Textfeldes zu Testzwecken geändert, die die Sprache der TextBox in der Laufzeit ändern.

protected override void OnNavigatedTo(NavigationEventArgs e) 
     { 
      base.OnNavigatedTo(e); 

      ChangeLanguageCombo.Items.Add(new LanguageComboBox 
      { 
       Name = "English", 
       Code = "en-US" 
      }); 

      ChangeLanguageCombo.Items.Add(new LanguageComboBox 
      { 
       Name = "Bangla", 
       Code = "bn" 
      }); 
     } 

    public static IsolatedStorageSettings ChangedLanguage = IsolatedStorageSettings.ApplicationSettings; 

    private void ChangeLanguageCombo_OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     var languageComboBox = ChangeLanguageCombo.SelectedItem as LanguageComboBox; 
     ApplyChange(new CultureInfo(languageComboBox.Code.ToString())); 
     //now I want to save the user choice to the `IsolatedStorageSettings ChangedLanguage` and restart the app to take place the changes. 
     MessageBox.Show("Restart"); 
     //after restart I want to indicate the Appresources file to the new selected one,(in InitializeLang() method) RootFrame.Language = XmlLanguage.GetLanguage(AppResources.ResourceLanguage); in this line 
     } 

    } 

    private void ApplyChange(CultureInfo culInfo) 
    { 
     Thread.CurrentThread.CurrentCulture = culInfo; 
     Thread.CurrentThread.CurrentUICulture = culInfo; 
     textBlockHello.Text = AppResources.Salutation; 
    } 

Es tut mir leid, wenn die Frage zu plump ist mein Ziel, zu verstehen, ich bin neu in diesem Bereich und jede Art von Hilfe oder bearbeiten Vorschlag tun wird.

Antwort

2

Für den Wert von LocalStorageSettings von App.xaml.cs Klasse abrufen:

string value= IsolatedStorageSettings.ApplicationSettings["userData"] as string; 

In App.xaml.cs habe ich unter dem try-Block der Methode folgenden Code InitializeLanguage()

private void InitializeLanguage() 
{ 
    try 
    { 
     if (IsolatedStorageSettings.ApplicationSettings.Contains("selectedLang")) 
     { 
      var changedLang = IsolatedStorageSettings.ApplicationSettings["selectedLang"] as string; 
      if (changedLang != null) ApplyChange(new CultureInfo(changedLang)); 
     }    
    } 
    //rest of the part in this method remained same 
} 
private void ApplyChange(CultureInfo culInfo) 
{ 
    Thread.CurrentThread.CurrentCulture = culInfo; 
    Thread.CurrentThread.CurrentUICulture = culInfo; 
} 

Und in meiner Einstellungen Seite wenn der Benutzer eine bevorzugte Sprache auswählt:

 public static IsolatedStorageSettings ChangedLanguage = IsolatedStorageSettings.ApplicationSettings; 
     private void ChangeLanguageCombo_OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      var languageComboBox = ChangeLanguageCombo.SelectedItem as LanguageComboBox; 

      if (languageComboBox != null) 
      { 
       if (!ChangedLanguage.Contains("selectedLang")) 
       { 
        ChangedLanguage.Add("selectedLang", languageComboBox.Code.ToString()); 
       } 
       else 
       { 
        ChangedLanguage["selectedLang"] = languageComboBox.Code.ToString(); 
       } 
       ChangedLanguage.Save(); 
       MessageBox.Show("Restart"); 
      } 

     } 

Nach dem Neustart der App die Standard Appresources Datei wäre die neue Appresources Datei der neuen Sprachen, wie es auf der IsolatedStorageSettings gespeichert wurde und auf App App.xaml.cs Aufruf der Seite ruft die InitializeLanguage() Methode.
So konnte ich die Standard-Datei Appresources ändern, wenn der Benutzer die Sprache meiner App von der Einstellungsseite aus ändert.

Verwandte Themen