Warum Ihre App Internationalisierung braucht?
\nStellen Sie sich vor: Sie haben eine großartige iOS-App geschrieben. Sie funktioniert perfekt, die Benutzeroberfläche ist ein Augenschmaus, und Nutzer aus Russland geben fünf Sterne. Aber was, wenn Ihr Code Englisch sprechen würde? Oder Chinesisch? Oder Arabisch, wo Text von rechts nach links gelesen wird?
\nInternationalisierung in Swift ist nicht nur die Übersetzung von Schaltflächen. Es ist ein architektonischer Ansatz, der es Ihrer App ermöglicht, die Sprache des Benutzers zu sprechen, seine kulturellen Besonderheiten (Datumsformate, Währungen, Maßeinheiten) zu respektieren und bei einem Locale-Wechsel nicht zu brechen.
\nIn diesem Artikel werden wir uns ansehen, wie man i18n (Internationalisierung) richtig in ein Swift-Projekt integriert, unter Verwendung moderner Xcode-Tools und bewährter Methoden. Bereit, Ihren Code zum Weltbürger zu machen? Los geht's!
\n\nGrundlagen der Lokalisierung in Swift: Von NSLocalizedString bis String Catalog
\nDer klassische Ansatz: NSLocalizedString
\nDas grundlegendste Werkzeug ist das Makro NSLocalizedString. Es sucht nach Übersetzungen in .strings-Dateien und zeigt, falls keine gefunden werden, den Schlüssel (oder den Standardwert) an.
let hello = NSLocalizedString("hello_world", comment: "Begrüßung auf dem Hauptbildschirm")\nprint(hello) // Gibt die Übersetzung basierend auf der Gerätesprache aus\nDer Kommentar ist keine bloße Formalität. Er hilft Übersetzern, den Kontext zu verstehen: "hello_world" kann sowohl eine Begrüßung als auch ein Abschnittstitel sein. Schreiben Sie immer einen aussagekräftigen comment.
\n\nString Catalog – der neue Standard (Xcode 15+)
\nVergessen Sie Dutzende von Localizable.strings-Dateien. In Xcode 15 gibt es String Catalogs (.xcstrings). Dies ist eine einzige Datei mit Unterstützung für mehrere Sprachen, Pluralbildung und Kontextnotizen.
So erstellen Sie einen Katalog: File → New → File → String Catalog. Schlüssel hinzugefügt – fertig:
// Der Code bleibt derselbe!\nlet welcome = NSLocalizedString("welcome_message", comment: "Begrüßung für einen neuen Benutzer")\n\n// Im String Catalog fügen Sie einfach Übersetzungen für en, ru, ar usw. hinzu.\nVorteile: Keine Notwendigkeit, Dateien zu synchronisieren, geringeres Risiko von Kodierungsfehlern, integrierte Unterstützung für Pluralbildung.
\n\nFormatierung von Zahlen und Daten: Kultureller Code
\nFehler: Das Datumsformat fest als "dd.MM.yyyy" festlegen. In den USA schreibt man "MM/dd/yyyy", in Japan "yyyy年MM月dd日". Swift rettet mit DateFormatter und NumberFormatter.
Daten, die man zeigen kann
\nlet date = Date()\nlet formatter = DateFormatter()\nformatter.dateStyle = .long\nformatter.timeStyle = .none\nformatter.locale = Locale.current // Passt sich automatisch an die Gerätesprache an\n\nlet localizedDate = formatter.string(from: date)\n// Für en: "January 15, 2025"\n// Für ru: "15 января 2025 г."\n// Für de: "15. Januar 2025"\nprint(localizedDate)\nKeine dateFormat-Strings! Verwenden Sie .short, .medium, .long – diese berücksichtigen bereits die kulturellen Regeln.
Zahlen und Währungen: Respektieren Sie Kommas und Punkte
\nIn Russland wird die Zahl 1234,56 als "1 234,56" geschrieben, in den USA als "1,234.56". NumberFormatter weiß das:
\nlet price = 1234.56\nlet numberFormatter = NumberFormatter()\nnumberFormatter.numberStyle = .currency\nnumberFormatter.locale = Locale.current\n\nlet localizedPrice = numberFormatter.string(from: NSNumber(value: price))!\n// Für en_US: "$1,234.56"\n// Für ru_RU: "1 234,56 ₽"\n// Für de_DE: "1.234,56 €"\nprint(localizedPrice)\n\nPluralbildung: Eins, zwei, viele – raten Sie nicht
\nDie Regel "eins – viele" funktioniert nur im Englischen. Im Russischen gibt es "1 минута", "2 минуты", "5 минут". Im Arabischen gibt es sechs Formen! String Catalog und NSStringPluralRule lösen das elegant.
Im String Catalog fügen Sie einen Schlüssel hinzu, geben den Typ "Plural" an und füllen die Formen aus:
\n// Im Code