Android Sprache ermitteln
Ich zeige euch wie man die unter Android eingestellte Sprache in der App ermittelt und wie man damit weiter arbeitet. Im letzten Artikel zum Thema WebView verbessern habe ich euch ja schon gezeigt wie man den Status einer Activity speichert, damit man jederzeit diesen wieder herstellen kann. Bei mobilen Applikationen unter iOS oder Android ist das notwendig, da das Betriebssystem Hauptspeicher schonend agiert und Activities im Hintergrund gerne zerstört.
Android Sprache ermitteln
Eine App will man üblicherweise für so viele Geräte wie möglich anbieten. Als Entwickler versucht man deshalb möglichst optimiert zu arbeiten, damit der Programmcode auf allen Hardwarekonfigurationen gut läuft und das Layout auf allen Displays möglichst perfekt angezeigt wird. Ein weiterer Schritt in Richtung große Verbreitung ist die Lokalisierung. Wichtigster Punkt dabei ist die Übersetzung von Texten, sofern vorhanden, in die wichtigsten Sprachen. Meine WebView App zeigt zwar nur eine Webseite an, ist diese mehrsprachig, dann kann man über einen URL Parameter direkt die Webseite in der für den Benutzer passenden Sprache anzeigen lassen.
getLanguage
Für die Lokalisierung bietet Android eine eigene Klasse an. In der Activity können wir wie folgt darauf zugreifen:
import java.util.Locale; ... String $lang = Locale.getDefault().getLanguage();
Zuerst importieren wir die nötige Java Bibliothek util.Locale. Locale ist ein Singleton und kann deshalb von überall in der App wie eine globale Variable angesprochen werden. Über diese Klasse bekommen wir über die getDefault() Methode die vom Benutzer eingestellte Sprache im Android Betriebssystem und getLanguage() Methode liefert diese als String. Diese Zeichenkette ist ein Ländercode aus 2 Buchstaben. Für die standardisierten Ländercodes mit 3 Buchstaben erhält man durch die getISO3Language() Methode.
Sprache weiter verwenden
Den String mit dem Ländercode kann man in der Android App weiter verwenden. Android bietet für die Lokalisierung der Layouts eigene Hilfsmittel an, diese werden aber in dem Artikel nicht weiter besprochen. Da ich eine WebView App habe muss ich den Ländercode beim Aufruf der URL übernehmen. Je nach Struktur der Webseite ist diese als URL GET Parameter zu übergeben oder Teil der URL. Der WebView Aufruf würde mit „Android Sprache ermitteln“ deshalb in etwa so aussehen:
//get language and set for app String $lang = Locale.getDefault().getLanguage(); wv.loadUrl("http://example.com?lang=" + $lang);
oder so:
//get language and set for app String $lang = Locale.getDefault().getLanguage(); wv.loadUrl("http://example.com/" + $lang + "/");
Meist werden bei einer Webseite nicht alle möglichen Sprachen angeboten. In meinem Fall nur Deutsch (de) oder für alle anderen Sprache Englisch (en). Aus diesem Grund habe ich eine zusätzliche Abfrage die den Ländercode entsprechend setzt:
if($lang != "de") $lang = "en";
Diese Abfrage muss entweder in der App oder in der Logik der Webseite programmiert werden.
Fazit
Ich habe euch gezeigt wie man die Android Sprache ermitteln kann. Die Sprache kann recht einfach ausgelesen werden, da Android eine sehr umfangreiche und leicht zu verwendende Locale Klasse zur Verfügung stellt. Man merkt, dass die Lokalisierung ein wichtiger Grundbaustein des Android SDKs ist. Wie man mit der gewonnen Information weiter arbeitet bleibt jedem Entwickler selbst überlassen.
Wie lokalisiert ihr eure Android Apps? Welche exotischen Sprachen habt ihr schon lokalisiert? Hat jemand eine Ländercode zu Sprachen Tabelle?