So lokalisieren Sie eine Android-Anwendung

Lokalisierung ist mehr als nur die Übersetzung der Zeichenfolgen in Ihrer Anwendung in andere Sprachen. Es beinhaltet auch die Anzeige von Daten wie Datum und Uhrzeit im richtigen Format für Ihre Benutzer. Selbst wenn Sie nur eine englische Version Ihrer Anwendung wünschen, ist es gut zu wissen, was die Lokalisierung betrifft. Auf diese Weise sind Sie bereit, wenn Sie zusätzliche Gebietsschemas unterstützen möchten und nicht mehr nach Zeichenfolgen und Werten in der gesamten Codebasis Ihrer Anwendung suchen müssen.

Beim Android SDK hängen die Sprache der lokalisierten Zeichenfolgen und das Format für die Anzeige der Werte von der Ländereinstellung des Geräts ab. Das Gebietsschema ist eine Kombination aus Sprache und Land. Die Sprache wird durch die definiert ISO 639-1 Standard, während das Land durch die ISO 3166-1 Standard. Dies bedeutet, dass das Android-Gebietsschema mit der Kultur oder dem Gebietsschema kompatibel ist, das von den meisten anderen Programmiersprachen und Frameworks verwendet wird.

Das einzige Gebietsschema, das garantiert auf jedem Android-Gerät vorhanden ist, ist Englisch wie in der Vereinigte Staaten. Es wird durch die vertreten de_DE Code mit ender Sprachcode für Englisch und UNS der Ländercode für die Vereinigten Staaten. Sie können auch die enNur Sprachcodeals das Gebietsschema, um alle englischsprachigen Länder und Regionen zu repräsentieren.

Um eine Anwendung für eine Sprache oder für ein bestimmtes Land und eine bestimmte Sprache zu lokalisieren, müssen Sie die Ressourcen für dieses Gebietsschema in die Sprache einschließen / res Ordner Ihrer Anwendung. Dies beinhaltet normalerweise String-Ressourcen in der / res / values Ordner, es kann jedoch auch andere Arten von Ressourcen enthalten, z. B. Bilder und Layouts. Das Android SDK identifiziert die verschiedenen alternativen Ressourcen mit Konfigurationsqualifikationsmerkmalen, aus denen der Ordner mit diesen Ressourcen benannt wird. Das Konfigurationsqualifikationsmerkmal für das Gebietsschema ist der Sprachcode, optional gefolgt vom Ländercode.Die lokalisierten Zeichenkettenressourcen für Ihre Anwendung müssen sich also im Verzeichnis befinden/res / values- oder /res / values--r Mappe.

Beachten Sie, dass die Ressourcen, die mit einem Konfigurationsqualifizierer für ein bestimmtes Gebietsschema identifiziert wurden, Vorrang vor den meisten anderen Ressourcen haben. Andere gebräuchliche Konfigurationsqualifizierer für Ressourcen mit niedrigerer Priorität umfassen die Bildschirmgröße und die Pixeldichte des Bildschirms, um unterschiedliche Layouts in Abhängigkeit von der Bildschirmgröße zu beschreiben. Nur Ressourcen, die mit einem Mobile Country Code (MCC) -Konfigurationsqualifikationsmerkmal identifiziert wurden, haben eine höhere Priorität als Zeichenfolgenressourcen, die mit einem Gebietsschemakonfigurationsqualifikationsmerkmal identifiziert wurden. Der Mobilfunk-Ländercode wird verwendet, um Ressourcen für ein Land zu definieren, auf den optional der Mobilfunknetzcode (MNC) von einer SIM-Karte folgt, um einen bestimmten Mobilfunkanbieter in diesem Land anzusprechen. Es wird verwendet, um landesspezifische Inhalte wie einen Vertrag oder eine Datenschutzrichtlinie bereitzustellen.

1. Lokalisieren von Strings

Jede Android-Anwendung sollte alle ihre String-Ressourcen in haben /res/values/strings.xml Datei. Dies ermöglicht die Wiederverwendung von Zeichenfolgen in Ihrer Anwendung, auch wenn keine Lokalisierung erforderlich ist. Wenn für das aktuelle Gebietsschema des Geräts keine Datei verfügbar ist, ist dies ebenfalls der Fall Datei wird verwendet. Wenn Sie nicht über eine verfügen, und Ihre Anwendung versucht, auf eine Zeichenkettenressource zuzugreifen, die nur in a verfügbar ist strings.xml Da diese Datei für ein Gebietsschema spezifisch ist, stürzt die Anwendung ohne Warnung ab, da Ressourcen zur Laufzeit und nicht während des Kompilierens geladen werden.

EIN strings.xml Eine für ein Gebietsschema spezifische Datei muss nicht über alle String-Ressourcen aus dem Verzeichnis verfügen /res/values/strings.xml Datei. Das bedeutet, wenn eine Ressource wie der Name Ihrer Anwendung nicht lokalisiert werden muss, müssen Sie sie nicht in jede Strings-Datei einfügen.

Zur Laufzeit wird der /res / values--r/strings.xml Die Datei für das Gebietsschema des Geräts wird geprüft, gefolgt von der / res / Werte-/strings.xml Datei nur für die Sprache. Wenn die angegebene Zeichenfolge in diesen Dateien nicht verfügbar ist, greift die Anwendung wieder auf / res / values ​​/ strings.xml.

Wenn Sie beispielsweise Ihre Anwendung für alle französischsprachigen Regionen und Länder lokalisieren möchten, ohne auf eine bestimmte Region zu zielen, geben Sie die Zeichenfolgen für die Anwendung in das Feld ein / res / values-fr /strings.xml Datei. Wenn Sie jedoch einige Zeichenfolgen mit einer für Französisch bestimmten Schreibweise lokalisieren möchten, wie in Frankreich geschrieben, müssen Sie sie in die Zeichenfolge einfügen /res/values-fr-rFr/strings.xml Datei. Stellen Sie sicher, dass Sie das hinzufügen r vor dem Ländercode im Namen des Ordners oder wird zur Laufzeit nicht gefunden, wenn die Anwendung lokalisiert wird.

Hier ist ein Beispiel von a / res / values ​​/strings.xml Datei mit einigen String-Ressourcen auf Englisch:

  Android-Lokalisierungsdemo Hallo Welt! Hallo% s!  

Und hier ist ein / res / values-fr /strings.xmlDatei mit den gleichen Ressourcen auf Französisch:

  Démo de localization Android Bonjour le monde! Bonjour% s! 

Lokalisieren von Strings in Layouts

Die Zeichenfolgen in Ihren Layouts sollten Zeichenkettenressourcen sein. Tatsächlich wird eine Lint-Warnung angezeigt, wenn eine Zeichenfolge hart codiert ist. Sie können Ressourcen überall dort einsetzen, wo Sie Zeichenfolgen in Layouts setzen. String-Ressourcen werden mit gekennzeichnet @ string / gefolgt vom Namen der Ressource aus der strings.xml Datei. Im Folgenden wird angezeigt Hallo Welt String aus dem vorherigen Beispiel in a Textvorschau je nach Standort des Geräts:

Dies zeigt "Bonjour le monde!"Stellen Sie auf einem Android-Gerät ein Gebietsschema ein, das die französische Sprache enthält. Für alle anderen Schauplätze ist die "Hallo Welt!" Zeichenfolge wird angezeigt.

Lokalisieren von Strings im Code

Sie müssen auch Strings aus Ihrem Code lokalisieren, wenn Sie Steuerelemente außerhalb Ihrer Layouts erstellen oder ändern. Um diese Zeichenfolgen zu lokalisieren, müssen Sie zuerst die android.content.res.Resources Objekt, das alle Ressourcen im Paket der Anwendung für den aktuellen Kontext enthält. Sie rufen dann an getString Methode für dieses Objekt, wobei der Bezeichner der anzuzeigenden Zeichenfolge übergeben wird. Der folgende Codeblock zeigt beispielsweise, wie Sie den Text von a einstellen Textvorschau Objekt:

// Den übersetzten String von der String-Ressource abrufen android.content.res.Resources res = context.getResources (); String helloWorld = res.getString (R.string.hello_world); // Setze den String auf die Textansicht TextView helloTextView; helloTextView = (TextView) findViewById (R.id.hello_world_textview); helloTextView.setText (helloWorld);

Bei komplexeren Zeichenfolgen mit einer oder mehreren variablen Komponenten müssen Sie Formatzeichenfolgen verwenden. Mit Formatzeichenfolgen können Sie die Werte für die anzuzeigenden Parameter angeben. Die Parameter in der Formatzeichenfolge werden mit Formatbezeichnern angegeben. Der am häufigsten verwendete Formatbezeichner ist % s, eine Zeichenfolge darstellen. Tatsächlich sind alle Formatzeichenfolgen aus java.util.Formatter Klasse stehen zur Verfügung. Wenn mehrere Parameter erforderlich sind, müssen Sie Ihre Formatbezeichner nummerieren. Bei String-Formatbezeichnern sollte der erste Wert angegeben werden % 1 $ s, der Zweite % 2 $ s, und so weiter.

Sobald Formatzeichenfolgen angegeben sind, verwenden Sie die String.format Methode, um die Parameter zu übergeben, die in Ihrer Zeichenfolge angezeigt werden sollen. So legen Sie den Text für die Anzeige in a fest Textvorschau mit dem hallo_weltname Formatstring aus dem strings.xml Datei. Diese Formatzeichenfolge enthält einen Formatbezeichner für den Namen des Benutzers:

// Holen Sie sich den Formatstring android.content.res.Resources res = context.getResources (); String helloFormatString = res.getString (R.string.hello_world_name); String userName = "Bob"; // füge den Namen in den Formatstring ein String helloWorldName = String.format (helloFormatString, userName); // Text der Textansicht setzen TextView helloTextView; helloTextView = (TextView) findViewById (R.id.hello_world_textview); helloTextView.setText (helloWorldName);

Dies zeigt den "Bonjour Bob!"Zeichenfolge für ein Android-Gerät mit einem Gebietsschema, das die französische Sprache enthält. Für alle anderen Ländereinstellungen "Hallo Bob!" Zeichenfolge wird angezeigt.

2. Lokalisieren von Datum und Uhrzeit

Wenn die Zeichenfolgen Ihrer Anwendung bereits lokalisiert sind, befindet sich Ihre Anwendung bereits in sehr gutem Zustand. In vielen Fällen müssen Sie dem Benutzer jedoch Datum und Uhrzeit anzeigen. Diese Datums- und Uhrzeitangaben sollten auch an das aktuelle Gebietsschema des Geräts angepasst werden. Glücklicherweise enthält das Android SDK Klassen, die Datumsangaben und Uhrzeiten entsprechend dem Gebietsschema formatieren.

Datum und Uhrzeit werden im Android SDK vom verwaltet Datum Klasse aus der java.util Namespace. Das aktuelle Datum und die Uhrzeit des Geräts werden vom zurückgegeben java.util.Calendar.

Termine lokalisieren

Datumsangaben können mit einer Instanz von formatiert werden Datumsformat Formatierer aus dem java.text Namespace. Sie müssen das verwenden Datumsformat Klasse aus dem Android SDK im android.text.format Namespace, um das richtige Formatierungsprogramm für das Gebietsschema des Geräts zu erhalten. Der folgende Codeausschnitt zeigt, wie eine Zeichenfolge abgerufen wird, deren aktuelles Datum für das Gebietsschema des Geräts formatiert ist:

// Ruft das aktuelle Datum und die aktuelle Uhrzeit ab Date currentDate = Calendar.getInstance (). GetTime (); // Ruft den Standard-Datumsformatierer für das aktuelle Gebietsschema des Geräts ab. Java.text.DateFormat dateFormat; dateFormat = android.text.format.DateFormat.getDateFormat (this); // Formatiert das aktuelle Datum entsprechend dem Gebietsschema String formatattedCurrentDate = dateFormat.format (currentDate);

Wenn das aktuelle Gebietsschema des Geräts in den USA Englisch ist, enthält die Zeichenfolge das aktuelle Datum in einem kurzen Datumsformat, 30.11.2014. Das Datumsformat Klasse enthält einige andere Datumsformate. Zum Beispiel die getLongDateFormat Diese Methode gibt ein langes Datumsformat zurück, Sonntag, 30. November 2014.

Zeiten lokalisieren

Da sind Zeiten als dargestellt Datum Objekte vom Android - SDK müssen sie auch mit einem von der Datumsformat Klasse aus der android.text.format Namespace. Das getTimeFormat Die Methode gibt ein Format zurück, in dem nur die Uhrzeit von a angezeigt wird Datum Objekt. Der folgende Codeausschnitt zeigt, wie eine Zeichenfolge mit der aktuellen Uhrzeit abgerufen wird, die für das Gebietsschema des Geräts formatiert ist:

// Ruft das aktuelle Datum und die aktuelle Uhrzeit ab java.util.Date currentDate = Calendar.getInstance (). GetTime (); // Ruft einen Datumsformatierer für das aktuelle Gebietsschema des Geräts ab, // das Zeiten anzeigt. java.text.DateFormat timeFormat; timeFormat = android.text.format.DateFormat.getTimeFormat (this); // Formatiert die aktuelle Uhrzeit entsprechend dem Gebietsschema String formatattedTime = timeFormat.format (currentDate);

Wenn das aktuelle Gebietsschema des Geräts in den USA Englisch ist, enthält die Zeichenfolge die aktuelle Uhrzeit im folgenden Format, 20.15 Uhr.

Fazit

Es ist wichtig, nur die Zeichenfolgen zu lokalisieren, die in der Benutzeroberfläche der Anwendung verwendet werden. Beispielsweise müssen Sie keine Debug-Meldungen lokalisieren, die nur während der Entwicklung oder zu Diagnosezwecken verwendet werden. Beachten Sie außerdem, dass Sie keine lokalisierten Daten und Zeiten auf die Festplatte oder in eine Datenbank schreiben sollten. Das Gebietsschema eines Geräts kann sich nicht nur ändern, das Arbeiten mit lokalisierten Daten und Zeiten macht die Entwicklung unnötig schwierig und komplex.