2016-07-20 11 views
0

Ich arbeite an einer App in Xamarin.Android und es muss Englisch und Bulgarisch zu unterstützen. Der größte Teil des Textes ist in der Strings.xml im Ordner values gespeichert. Der englische Text ist im Standardordner values und der bulgarische Text ist in values-bg. Der Dateiname für beide ist String.xml, und der Name jedes Strings ist derselbe wie seine übersetzte Version. Nun, wie kann ich es so machen, dass, wenn ich auf einen Knopf klicke, liest es die Zeichenfolgen von values-bg und wenn ich einen anderen klicke liest es aus dem Standard wieder? Auch das möchte ich für jede Aktivität in der App so haben.Xamarin Android ändern Sprache Ordner auf Knopf klicken

Antwort

2

Ich habe getestet, wie Locale programmgesteuert ändern, und ich fand schließlich eine Lösung, die für mich arbeitete.

Wie Sie gesagt haben, benötigen Sie einen Werte-Ordner, der strings.xml mit Standardwerten enthält. Das wäre Englisch, dann ein values-bg-Ordner mit derselben Datei, aber mit bulgarischen übersetzten Werten. Es ist wichtig, dass Strings denselben Namen haben, also hast du es richtig gemacht.

Dann in Ihrem Click-Ereignisse, können Sie hinzufügen:

var locale = new Java.Util.Locale ("bg"); 
Android.Content.Res.Configuration conf = Resources.Configuration; 
conf.Locale = locale; 
DisplayMetrics dm = Resources.DisplayMetrics; 
Resources.UpdateConfiguration (conf, dm); 
Recreate(); 

Erstens, dass Code ein Locale-Variable für "bg" locale erklären. Dann erhält es die tatsächliche Konfiguration des Geräts und wendet das neue Gebietsschema darauf an. Mit UpdateConfiguration speichern Sie die Änderungen. Das Recreate ist optional, es erstellt nur, wie sein Name alles erklärt, die aktuelle Aktivität, die mit der neuen Konfiguration geladen wird, mit einem Gebietsschema "bg" anstelle dessen, welches Standardgebietsschema angewendet wurde. Es ruft nun Zeichenfolgen im Ordner "values-bg" ab.

HINWEIS: Ich habe in the comments of the accepted answer here gelesen, dass auf einigen Geräten die Konfiguration nach einiger Zeit in der App auf den Standard zurückgesetzt wird. Ich bin nicht sicher, warum das passiert, aber Sie sollten überprüfen, ob das Gebietsschema beim Laden einer neuen Aktivität irgendwie geändert wurde, um dieses Rollback zu verhindern.

+0

Wird das Gebietsschema für die gesamte App oder nur die aktuelle Aktivität geändert? – Reaper9806

+0

Ich bin mir nicht sicher, aber ich würde für die ganze App sagen. Wenn Sie dieses Verhalten nur für eine Aktivität wünschen, können Sie eine ähnliche Methode wie die in meiner Antwort erstellen, aber anstelle eines neuen Gebietsschemas mit dem Attribut "bg" das Standardgebietsschema anwenden. – YumeYume

+0

Das ist es nur, ich will, dass es für die ganze App funktioniert. Ich hatte noch keine Gelegenheit, es zu versuchen, aber ich werde so schnell wie möglich Rückmeldung geben und die Antwort geben, wenn es funktioniert. – Reaper9806