Xcode .xcstrings-Kataloge
KI-Übersetzung für Xcode .xcstrings-Dateien mit Lingo.dev CLI
Was sind Xcode .xcstrings-Kataloge?
Xcode .xcstrings-Kataloge sind Apples modernes Lokalisierungsformat, das mit Xcode 15 eingeführt wurde. Sie speichern alle Lokalisierungen in einer einzigen JSON-Datei und unterstützen Pluralisierung, Gerätevarianten und Übersetzungsmetadaten.
Beispiel:
{
"sourceLanguage" : "en",
"strings" : {
"item_count" : {
"comment" : "Number of items displayed in the list - supports pluralization",
"extractionState" : "manual",
"localizations" : {
"en" : {
"variations" : {
"plural" : {
"one" : {
"stringUnit" : {
"state" : "translated",
"value" : "1 item"
}
},
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "%d items"
}
},
"zero" : {
"stringUnit" : {
"state" : "translated",
"value" : "No items"
}
}
}
}
}
}
},
"welcome_message" : {
"comment" : "Welcome message shown on the app's home screen",
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Hello, world!"
}
}
}
}
}
}
Was ist Lingo.dev CLI?
Lingo.dev CLI ist ein kostenloses Open-Source-CLI-Tool zur Übersetzung von Apps und Inhalten mit KI. Es wurde entwickelt, um traditionelle Translation-Management-Software zu ersetzen und sich gleichzeitig in bestehende Pipelines zu integrieren.
Weitere Informationen finden Sie unter Übersicht.
Über diesen Leitfaden
Dieser Leitfaden erklärt, wie Sie Xcode .xcstrings-Dateien mit Lingo.dev CLI übersetzen.
Sie lernen:
- Ein Projekt von Grund auf zu erstellen
- Eine Übersetzungspipeline zu konfigurieren
- Übersetzungen mit KI zu generieren
Voraussetzungen
Um Lingo.dev CLI zu verwenden, stellen Sie sicher, dass Node.js v18+ installiert ist:
❯ node -v
v22.17.0
Schritt 1. Projekt einrichten
Erstellen Sie im Verzeichnis Ihres Projekts eine i18n.jsonDatei:
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.10",
"locale": {
"source": "en",
"targets": ["es"]
},
"buckets": {}
}
Diese Datei definiert das Verhalten der Übersetzungspipeline, einschließlich der Sprachen, zwischen denen übersetzt werden soll, und wo sich die lokalisierbaren Inhalte im Dateisystem befinden.
Weitere Informationen zu den verfügbaren Eigenschaften finden Sie unter i18n.json.
Schritt 2. Quell-Locale konfigurieren
Das Quell-Locale ist die ursprüngliche Sprache und Region, in der Ihr Inhalt verfasst wurde. Um das Quell-Locale zu konfigurieren, setzen Sie die Eigenschaft locale.source in der i18n.jsonDatei:
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.10",
"locale": {
"source": "en",
"targets": ["es"]
},
"buckets": {}
}
Das Quell-Locale muss als BCP 47 Language Tag angegeben werden.
Eine vollständige Liste der von der Lingo.dev CLI unterstützten Locale-Codes finden Sie unter Unterstützte Locale-Codes.
Schritt 3. Ziel-Locales konfigurieren
Die Ziel-Locales sind die Sprachen und Regionen, in die Sie Ihre Inhalte übersetzen möchten. Um die Ziel-Locales zu konfigurieren, setzen Sie die Eigenschaft locale.targets in der Datei i18n.json:
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.10",
"locale": {
"source": "en",
"targets": ["es"]
},
"buckets": {}
}
Schritt 4. Quellinhalte erstellen
Falls noch nicht geschehen, erstellen Sie eine .xcstrings-Datei, die die zu übersetzenden Inhalte enthält.
Hinweis: Während des Übersetzungsprozesses werden die Quellinhalts-Dateien überschrieben, um die übersetzten Inhalte (zusätzlich zu den Quellinhalten) einzuschließen.
Schritt 5. Bucket erstellen
-
Fügen Sie in der Datei
i18n.jsonein Objekt"xcode-xcstrings"zum Objektbucketshinzu:{ "$schema": "https://lingo.dev/schema/i18n.json", "version": "1.10", "locale": { "source": "en", "targets": ["es"] }, "buckets": { "xcode-xcstrings": {} } } -
Definieren Sie im Objekt
"xcode-xcstrings"ein Array aus einem oder mehrerenincludeMustern:{ "$schema": "https://lingo.dev/schema/i18n.json", "version": "1.10", "locale": { "source": "en", "targets": ["es"] }, "buckets": { "xcode-xcstrings": { "include": ["./example.xcstrings"] } } }Diese Muster definieren, welche Dateien übersetzt werden sollen, und können entweder:
- auf spezifische Dateipfade verweisen (z. B.
"some/dir/file.xcstrings") - Sternchen als Wildcard-Platzhalter verwenden (z. B.
"some/dir/*.xcstrings")
Rekursive Glob-Muster (z. B.
**/*.xcstrings) werden nicht unterstützt. - auf spezifische Dateipfade verweisen (z. B.
Schritt 6. LLM konfigurieren
Die Lingo.dev CLI verwendet Large Language Models (LLMs), um Inhalte mit KI zu übersetzen. Um eines dieser Modelle zu verwenden, benötigen Sie einen API-Schlüssel von einem unterstützten Anbieter.
Um so schnell wie möglich loszulegen, empfehlen wir die Verwendung der Lingo.dev Engine – unserer eigenen, gehosteten Plattform, die 10.000 Tokens kostenlose monatliche Nutzung bietet:
-
Führen Sie den folgenden Befehl aus:
npx lingo.dev@latest loginDies öffnet Ihren Standard-Browser und fordert Sie zur Authentifizierung auf.
-
Folgen Sie den Anweisungen.
Schritt 7. Übersetzungen generieren
Führen Sie im Verzeichnis, das die i18n.jsonDatei enthält, folgenden Befehl aus:
npx lingo.dev@latest run
Dieser Befehl:
- Liest die
i18n.jsonDatei. - Findet die Dateien, die übersetzt werden müssen.
- Extrahiert den übersetzbaren Inhalt aus den Dateien.
- Verwendet das konfigurierte LLM, um den extrahierten Inhalt zu übersetzen.
- Schreibt den übersetzten Inhalt zurück in das Dateisystem.
Beim ersten Generieren von Übersetzungen wird eine i18n.lockDatei erstellt. Diese Datei verfolgt, welcher Inhalt übersetzt wurde, und verhindert unnötige erneute Übersetzungen bei nachfolgenden Durchläufen.
Beispiel
example.xcstrings (vor der Übersetzung)
{
"sourceLanguage" : "en",
"strings" : {
"welcome_message" : {
"comment" : "Welcome message shown on the app's home screen",
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Hello, world!"
}
}
}
},
"item_count" : {
"comment" : "Number of items - supports pluralization",
"extractionState" : "manual",
"localizations" : {
"en" : {
"variations" : {
"plural" : {
"zero" : {
"stringUnit" : {
"state" : "translated",
"value" : "No items"
}
},
"one" : {
"stringUnit" : {
"state" : "translated",
"value" : "1 item"
}
},
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "%d items"
}
}
}
}
}
}
}
}
}
example.xcstrings (nach der Übersetzung)
{
"sourceLanguage" : "en",
"strings" : {
"welcome_message" : {
"comment" : "Welcome message shown on the app's home screen",
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Hello, world!"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "¡Hola, mundo!"
}
}
}
},
"item_count" : {
"comment" : "Number of items - supports pluralization",
"extractionState" : "manual",
"localizations" : {
"en" : {
"variations" : {
"plural" : {
"zero" : {
"stringUnit" : {
"state" : "translated",
"value" : "No items"
}
},
"one" : {
"stringUnit" : {
"state" : "translated",
"value" : "1 item"
}
},
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "%d items"
}
}
}
}
},
"es" : {
"variations" : {
"plural" : {
"zero" : {
"stringUnit" : {
"state" : "translated",
"value" : "Sin elementos"
}
},
"one" : {
"stringUnit" : {
"state" : "translated",
"value" : "1 elemento"
}
},
"other" : {
"stringUnit" : {
"state" : "translated",
"value" : "%d elementos"
}
}
}
}
}
}
}
}
}
i18n.json
{
"version": "1.10",
"locale": {
"source": "en",
"targets": ["es"]
},
"buckets": {
"xcode-xcstrings": {
"include": ["./example.xcstrings"]
}
},
"$schema": "https://lingo.dev/schema/i18n.json"
}
i18n.lock
version: 1
checksums:
d3330df55a54ce785f378e7388282a96:
welcome_message: 57da71b2c89eaddcbca81b3c3766deed
item_count/zero: 955c31a42e9ff663a49e69e944c8c537
item_count/one: 154c8eed472b867c8d5af66d162abd2c
item_count/other: ecb3f18dc6a5e7b3e1d9afe7ef62cf07
614e9d20c639fed18ee30b9f9637c83d:
item_count/one: d25ee41f72a2ea94ebc6debc85b9e573
item_count/other: ecb3f18dc6a5e7b3e1d9afe7ef62cf07
item_count/zero: 955c31a42e9ff663a49e69e944c8c537
welcome_message: 0468579ef2fbc83c9d520c2f2f1c5059