paint-brush
Entwicklung der Lokalisierung in Swift: Von Strings zu String-Katalogenvon@mniagolov
1,097 Lesungen
1,097 Lesungen

Entwicklung der Lokalisierung in Swift: Von Strings zu String-Katalogen

von Maksim Niagolov8m2024/06/12
Read on Terminal Reader

Zu lang; Lesen

Swift bietet leistungsstarke Tools, um die Lokalisierung einfach in Anwendungen zu integrieren. Dieser Leitfaden erläutert den Übergang zur Lokalisierung in Swift, von den frühen Techniken bis hin zum neuesten Tool, damit Entwickler diese Möglichkeiten voll ausschöpfen können. Die Lokalisierung verbessert das Benutzererlebnis, erweitert die Reichweite und kann großen Einfluss auf den Erfolg von Software auf internationaler Ebene haben.
featured image - Entwicklung der Lokalisierung in Swift: Von Strings zu String-Katalogen
Maksim Niagolov HackerNoon profile picture

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.


Frühe Herausforderungen bei der Lokalisierung

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.

Die Grundlagen von 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.

Beispiel für einen 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.

Übergang zu 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

  • Effizienz: Dadurch werden Zeit und Aufwand gespart, die sonst für die Verwaltung und Änderung der Lokalisierungsdateien aufgewendet werden müssten.
  • Genauigkeit: Hilft, die Genauigkeit von Wortübersetzungen zu verbessern, indem mehr Kontext direkt in der Entwicklungsumgebung bereitgestellt wird.
  • Flexibilität: Unterstützt Echtzeit- und dynamische Anpassungen an lokalisierten Inhalt.

Moderne Lokalisierungstechniken mit String-Katalogen

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:

  • Visueller Editor: Im Gegensatz zu herkömmlichen, einfachen Textdateien werden String-Kataloge mithilfe eines visuellen Editors in Xcode bearbeitet, wodurch das Hinzufügen, Ändern oder Löschen lokalisierter Strings wesentlich einfacher wird.


  • Inline-Dokumentation: Entwickler können die Beschreibungen und den Kontext direkt im String-Katalog bereitstellen, was die Klarheit und Korrektheit der Übersetzung erheblich verbessert.


  • Dynamische Lokalisierung: Strings Catalog unterstützt dynamische Lokalisierung, sodass die Entwickler lokalisierte Zeichenfolgen ändern können, ohne die Anwendung zu beenden. Dies ist ideal für Tests und iterative Entwicklung.


  • Erweiterte Pluralisierung und Anpassung: Es überwindet auch einige der Mängel von 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:

  1. Einen String-Katalog erstellen: Fügen Sie Ihrem Projekt einen neuen String-Katalog hinzu. Dadurch wird eine .stringcatalog Datei generiert.


  2. 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.


  3. 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.


  4. 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)



Vorteile von String-Katalogen

  • Effizienz: Spart Zeit und Aufwand bei der Verwaltung von Lokalisierungsdateien.


  • Genauigkeit: Verbessert die Genauigkeit, indem mehr zusätzlicher direkter Kontext direkt in der Entwicklungsumgebung bereitgestellt wird.


  • Flexibilität: Unterstützt Echtzeit- und sogar dynamische Updates des lokalisierten Inhalts, was besonders in einem schnellen Entwicklungszyklus nützlich ist.

Herausforderungen

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.

Abschluss

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!