2013-02-26 7 views
12

Ich habe meine Ressourcendateien mit 2 Sprachen und meine App liest bereits die Werte von einem von ihnen. Ich möchte in der Lage sein, die Sprache meiner App (verwenden Sie die andere Ressource-Datei) in C# ändern, anstatt die Sprache des gesamten Telefons in den Einstellungen zu ändern.Wie ändere ich die Lokalisierung in C# auf Windows Phone?

Ist das möglich? Wenn das so ist, wie?

+0

Gute Frage, obwohl ich über Windows Phone nicht weiß, haben Sie versucht, die aktuelle Kultur auf dem Thread zu setzen? – mattytommo

Antwort

9

In App.xaml.cs im InitializePhoneApplication Methode:

private void InitializePhoneApplication() 
{ 
    Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR"); 
    Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture; 
    ....... 
} 

Die Einschränkung ist, dass es in der App-Initialisierung werden muss, so dass, wenn der Benutzer die Sprache ändert, wird ein Neustart erforderlich werden, damit sie wirksam werden .

+0

Danke, das hat den Trick gemacht. Ich werde experimentieren, um zu sehen, ob es in einer anderen Methode gemacht werden kann. Ich schätze mal, dass sobald der Tritt mit einer Kultur begonnen hat, der einzige Weg die Kultur zu ändern wieder neu gestartet werden würde ... – GabCas

4

Sie können dies tun, ohne dass neu zu starten, indem Sie die Seite neu zu laden, wenn der Benutzer eine Sprache ändern und die Aufrechterhaltung der RTL/LTR des Seitenlayouts

ich diese Funktion in App.xaml.cs hinzugefügt

public static void ChangeAppLanguage(string CultureName) 
    { 
     App.RootFrame.Language = XmlLanguage.GetLanguage(CultureName); 
     FlowDirection flow = (FlowDirection)Enum.Parse(typeof(FlowDirection), AppResources.ResourceFlowDirection); 
     App.RootFrame.FlowDirection = flow; 
     App.Current.RootVisual.UpdateLayout(); 
     App.RootFrame.UpdateLayout(); 
     var ReloadUri =(App.RootFrame.Content as PhoneApplicationPage).NavigationService.CurrentSource; 
     (Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri(ReloadUri + "?no-cache=" + Guid.NewGuid(), UriKind.Relative)); 
    } 

wo die CultureName wie folgt aus: "ar-SA", "en-US"

und ich mag dieses genannt

private void EnglishMenuItem_Click(object sender, EventArgs e) 
    {    
     try 
     { 
      if(Thread.CurrentThread.CurrentCulture.Name == "en-US") 
       Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-SA"); 
      else 
       Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 
      Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture; 

      AppResources.Culture = Thread.CurrentThread.CurrentCulture; 

      App.ChangeAppLanguage(Thread.CurrentThread.CurrentCulture.Name); 

      //this._contentLoaded = false; //this way does not refresh appBar 
      //this.InitializeComponent(); 

      //this way work for one time only => if user change language more thane once the api does NOT call constructor 
      //NavigationService.Navigate(new System.Uri("/PhoneApp2;component/MainPage.xaml", System.UriKind.Relative)); 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("error:\n\n" + ex.Message); 
     } 
    } 
+0

Sehr geehrte Zakaria, Ich habe versucht, Ihre Lösung zur Verfügung gestellt. Es funktioniert nicht inplace seine Erstellung der Geschichte per Klick z. wenn ich 5 Mal versuchte, Sprache zu ändern, und als ich zurückgehen will, als ich Knopf des Emulators 5mal drücken muss, als ich in der Lage sein werde, zurückzugehen. und es wird nicht übersetzt. aber es schien die hervorragende Annäherung zu sein. –

Verwandte Themen