Da die Welt heutzutage ein globaler Marktplatz ist, ist die Fähigkeit Ihrer mobilen Anwendungen, in verschiedenen Sprachen und Kulturen verfügbar zu sein, nicht nur eine Option, sondern eine Notwendigkeit. Lokalisierung verbessert das Benutzererlebnis, erweitert seine Reichweite und kann großen Einfluss auf den Erfolg von Software auf internationaler Ebene haben.
Für iOS-Entwickler bietet Swift leistungsstarke Tools, mit denen sich Lokalisierungen ganz einfach in Anwendungen integrieren lassen. In diesem Handbuch wird der Übergang bei der Lokalisierung in Swift von den ersten Techniken zum neuesten Tool erläutert, damit Entwickler diese Möglichkeiten voll ausschöpfen können.
Als Swift erstmals vorgestellt wurde, erbte es die Lokalisierungsinfrastruktur von Objective-C, die um die Datei Localizable.strings
und die Funktion NSLocalizedString
herum aufgebaut war. Daher mussten Entwickler die lokalisierten Zeichenfolgen manuell bearbeiten und sie zwischen verschiedenen Sprachdateien synchronisieren, ein Prozess, der sowohl fehleranfällig als auch zeitaufwändig ist.
Localizable.strings
Die lokalisierbare Datei ist eine einfache Schlüssel-Wert-Paardatei, in der die Zeichenfolgen im Format „Schlüssel“ = „Wert“ gespeichert sind, wobei „Schlüssel“ die Codekennung und „Wert“ die lokalisierte Zeichenfolge ist, die der Benutzer sehen wird. Diese Datei muss dupliziert und in jede unterstützte Sprache übersetzt und in die entsprechenden „.lproj“ -Verzeichnisse eingefügt werden, z. B. „en.lproj“ für die englische Sprache und „de.lproj“ für die deutsche Sprache.
Localizable.strings
Eintrag: "hello_world_key" = "Hello, World!";
Im Swift-Code könnte diese Zeichenfolge wie folgt abgerufen werden:
let greeting = NSLocalizedString("hello_world_key", comment: "The default greeting")
Die Funktion NSLocalizedString erleichtert den Zugriff auf lokalisierte Inhalte durch die Verwendung von Schlüsseln aus Localizable.strings
.
Diese Funktion verwendet einen Schlüssel, stellt einen Fallback-Wert bereit und fügt einen Kommentar für Übersetzer hinzu. Das Anbieten eines Kommentars ist wichtig, da er Übersetzern den Subtext liefert, um die Genauigkeit und Eignung der Übersetzungen zu verbessern.
Beispiel: Begrüßung eines Benutzers basierend auf der Tageszeit:
func greetingBasedOnTime() -> String { let hour = Calendar.current.component(.hour, from: Date()) let key = hour < 12 ? "good_morning_key" : "good_evening_key" return NSLocalizedString(key, comment: "Greeting based on time of day") }
Mit den entsprechenden Localizable.strings
sehen die Einträge etwa so aus:
"good_morning_key" = "Good morning!"; "good_evening_key" = "Good evening!";
Hier sind einige Herausforderungen, die bei Localizable.strings auftreten können:
1) Skalierbarkeitsprobleme.
Wenn die Anzahl der Zeichenfolgen zunimmt, wird es schwierig, sie zu handhaben. Die Verwaltung mehrerer String-Dateien wird mit der Zeit mühsam.
2) Vervielfältigung.
Für jede Sprache ist eine separate Datei erforderlich, was zu möglichen Inkonsistenzen und doppeltem Aufwand bei der Verwaltung von Zeichenfolgen führen kann. Bei der Unterstützung einer Sprache ist dies möglicherweise kein Problem, aber wenn Sie mehrere Sprachen verwalten müssen, wird es manchmal zu mühsam.
3) Fehlender Kontext.
Die Kommentare könnten jedoch in NSLocalizedString hinzugefügt werden – auch wenn sie dem Übersetzer nicht immer helfen, den Kontext vollständig zu verstehen, kann dies zu Ungenauigkeiten in der Übersetzung führen. Entwickler sind oft zu faul, sie richtig auszufüllen.
stringsdict
zur Pluralisierung Die Einführung von stringsdict
-Dateien brachte eine erhebliche Verbesserung für die Swift-Lokalisierung, die vor allem die Probleme der Pluralisierung behebt. Die Hauptursache ist, dass Pluralformen in verschiedenen Sprachen unterschiedlich gebildet werden und was für Englisch effektiv sein kann, ist für andere Sprachen wie Russisch oder Arabisch möglicherweise nicht effektiv.
Vor der Einführung stringsdict
war ihre Verwaltung sehr schwierig. stringsdict
ermöglicht es Programmierern, Regeln für Kategorien wie „eine“, „wenige“, „viele“ und „andere“ festzulegen, die in allen Sprachen das gleiche Maß an Korrektheit bei der Übersetzung gewährleisten.
Grundlegendes zu stringsdict
Dateien
Stringsdict
Datei ist eine XML-Eigenschaftenliste, die zum Erstellen von Zeichenfolgen verwendet wird, die je nach numerischen Werten lokalisiert werden. Diese Funktion dient der korrekten Verarbeitung von Pluralformen, da verschiedene Sprachen ihre eigenen, unterschiedlichen Regeln für die Verarbeitung von Pluralformen haben.
Aufbau einer stringsdict
Datei:
Ein Beispiel einer stringsdict
Datei enthält Einträge aller Zeichenfolgen, die pluralisiert werden müssen. Jeder Eintrag besteht aus einem Schlüssel und einem Wörterbuch, in dem der Benutzer einen oder mehrere Unterschlüssel definiert, die verschiedene Pluralkategorien darstellen.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>numberOfSongs</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@songs@</string> <key>songs</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>One song</string> <key>other</key> <string>%d songs</string> </dict> </dict> </dict> </plist>
Beispiel für die Verwendung von stringsdict
zur Pluralisierung
Nehmen wir an, wir haben eine Anwendung, die die Anzahl der von einem Benutzer gelesenen Artikel anzeigt. Auf dem Bildschirm sollte eine Meldung mit der korrekten Pluralform der Anzahl der gelesenen Artikel angezeigt werden.
Localizable.stringsdict
für Englisch und Polnisch:
<!-- English --> <key>article_count</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@articles@</string> <key>articles</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>One article</string> <key>other</key> <string>%d articles</string> </dict> </dict> <!-- Polish --> <key>article_count</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@articles@</string> <key>articles</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>Jeden artykuł</string> <key>few</key> <string>%d artykuły</string> <key>many</key> <string>%d artykułów</string> <key>other</key> <string>%d artykułu</string> </dict> </dict>
Hier veranschaulicht die polnische Lokalisierung deutlich die Komplexität der Pluralformen in einigen Sprachen, wo mehrere Pluralkategorien (eine, wenige, viele, andere) verwendet werden müssen, um unterschiedliche numerische Kontexte korrekt darzustellen.
Schnelle Implementierung:
Die stringsdict
Einträge können im Code verwendet werden, indem beim Aufruf von NSLocalizedString
einfach auf die in der Datei definierten Schlüssel verwiesen wird.
let count = getArticleCount() let formatString = NSLocalizedString("article_count", comment: "Count of articles read by a user") let message = String(format: formatString, count)
Mit diesem Ansatz können Sie die Ausgabezeichenfolge adaptiv ändern, damit sie der Grammatik der unterstützten Sprachen entspricht; und das alles in nur einer Codezeile.
Vorteile von stringsdict
Eine der neuen Funktionen, die mit Xcode 15 eingeführt wurden, sind String-Kataloge, die Entwicklern helfen sollen, iOS- und macOS-Anwendungen noch einfacher als zuvor zu lokalisieren. Während Localizable.strings
und stringsdict
hilfreiche Ressourcen zum Speichern und Organisieren von Strings waren, sind die String-Kataloge weitaus kohärenter und benutzerfreundlicher für die Verwaltung lokalisierter Strings.
Dies sind die Hauptaspekte, die in den Saitenkatalogen hervorgehoben werden sollten:
stringsdict
, indem es eine feinere Kontrolle der Pluralformen und des Textes mit Variationen je nach UI-Elementen und Gerätetyp bietet.
Schnelle Implementierung:
Nehmen wir an, Sie müssen in einer Messaging-Anwendung Benutzer über die Anzahl der von ihnen ungelesenen Nachrichten informieren. Die Benachrichtigung muss dynamisch sein, indem sie die Anzahl der empfangenen Nachrichten anzeigt und sich entsprechend dem Inhaltstyp anpasst.
Schritt-für-Schritt-Einrichtung:
Einen String-Katalog erstellen: Fügen Sie Ihrem Projekt einen neuen String-Katalog hinzu. Dadurch wird eine .stringcatalog
Datei generiert.
Einträge hinzufügen: Verwenden Sie den Editor, um Einträge für jede Zeichenfolge hinzuzufügen, die lokalisiert werden muss. Geben Sie dann Schlüssel, Standardwerte und alle Pluralregeln oder adaptiven Parameter für jeden Eintrag an.
Inhalt lokalisieren: Stellen Sie Übersetzungen für jede unterstützte Sprache bereit, geben Sie unterschiedliche Pluralformen an, passen Sie sie an Gerätetypen an usw.
Implementierung im Code: Referenzieren Sie diese Zeichenfolgen mithilfe lokalisierter Bezeichner in Ihrem Swift-Code.
<!-- String Catalog Entry --> <key>unread_messages_count</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@messages@</string> <key>messages</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>You have one unread message.</string> <key>other</key> <string>You have %d unread messages.</string> </dict> </dict>
Sie können auf diese Zeichenfolge folgendermaßen zugreifen:
let unreadCount = fetchUnreadMessagesCount() let message = NSLocalizedString("unread_messages_count", value: "You have \(unreadCount) unread messages.", comment: "Notify about unread messages") print(message)
String-Kataloge bieten zwar erhebliche Verbesserungen, bringen aber auch Herausforderungen mit sich. Zunächst ist es ein Lernprozess; es braucht Zeit, sich an ein neues System oder eine neue Art der Erstellung von etwas zu gewöhnen. Eine weitere potenzielle Herausforderung für Entwickler ist der Zeit- und Anpassungsaufwand, der erforderlich ist, um String-Kataloge in bestehende Projekte zu integrieren, in denen bereits traditionelle Lokalisierungsdateien erstellt und verwendet wurden.
String-Kataloge in Swift sind die neueste Weiterentwicklung der Lokalisierungstechnologie und bieten Tools, die nicht nur leistungsstark, sondern auch flexibel und benutzerfreundlich sind. Durch die Integration der Technologie in den Entwicklungszyklus können die Teams die Effizienz und Qualität des Lokalisierungsprozesses drastisch verbessern. Auf diese Weise können bessere globale Produkte erstellt werden.
Ich werde diesen Artikel ständig mit den neuesten Entwicklungen bei Swift-Lokalisierungstools aktualisieren. Wenn Sie der Meinung sind, dass ich etwas ausgelassen habe, oder wenn Sie Anmerkungen zu dem haben, was ich gesagt habe, können Sie diese im Kommentarfeld unten teilen. Folgen Sie mir für weitere interessante Informationen und Neuigkeiten!