Dokumentation / iOS
iOS- und macOS-Lokalisierung mit String Catalogs, automatisiert
Finden Sie fest codierten Text in SwiftUI und UIKit, übersetzen Sie ihn in Localizable.xcstrings für jede Sprache und umschließen Sie UIKit-Strings mit String(localized:), in einem Befehl oder einem Pull Request.
Funktionsweise
SwiftUI sucht den Text von Text("…"), Button, Label, TextField, .navigationTitle und anderen Ansichten selbst im String Catalog auf, sodass der Code unverändert bleibt. UIKit verwendet einfache Strings, sodass label.text = "…", setTitle("…", for:) und Alert-Titel zu String(localized: "…") werden.
Eine Zahl mit ihrem Wort, "\(n) \(n == 1 ? "item" : "items")", wird zu "\(n) items": Der Katalog variiert %lld items je nach Anzahl, mit den jeweiligen Pluralformen der Sprache.
Jede Zeichenkette wird in Localizable.xcstrings aufgenommen, wobei sie nach ihrem Text wie von Xcode geschrieben (Welcome back, %@!) indiziert wird. Jede Sprachübersetzung befindet sich im selben Datei und nummerierte Platzhalter (%1$@, %2$lld) werden verwendet, wenn es mehr als einen gibt. Text(verbatim:), Bildnamen und Kommentare bleiben unverändert.
Vorher und nachher
Die tatsächliche Ausgabe der Engine für diese Datei. Bei einer echten Ausführung benennt das gehostete Modell die Schlüssel anhand des Kontexts.
import SwiftUI
struct CartView: View {
let name: String
var body: some View {
VStack {
Text("Welcome back, \(name)!")
Button("Checkout") {}
}
.navigationTitle("Your cart")
}
}
final class LoginController: UIViewController {
let label = UILabel()
override func viewDidLoad() {
label.text = "Sign in to continue"
}
}import SwiftUI
struct CartView: View {
let name: String
var body: some View {
VStack {
Text("Welcome back, \(name)!")
Button("Checkout") {}
}
.navigationTitle("Your cart")
}
}
final class LoginController: UIViewController {
let label = UILabel()
override func viewDidLoad() {
label.text = String(localized: "Sign in to continue")
}
}{
"sourceLanguage" : "en",
"strings" : {
"Checkout" : {
},
"Sign in to continue" : {
},
"Welcome back, %@!" : {
},
"Your cart" : {
}
},
"version" : "1.0"
}Was das Setup hinzufügt
Der erste Durchlauf richtet String Catalogs (Localizable.xcstrings) ein, falls das Projekt es noch nicht hat:
Localizable.xcstrings, die Sie überall im Projekt oder am Root erstellen: fügen Sie es in der Xcode-Projektzielkonfiguration einmal hinzu.
Ausführen
Die CLI benötigt Node.js 22 oder neuer, sonst nichts: npx führt es aus, ohne ein package.json zum Projekt. Kein Node auf Ihrem Rechner? Die GitHub Action unten führt es für Sie aus.
npx localize-dev login
# Preview, then write the changes
npx localize-dev run --dry-run -l es,fr,de
npx localize-dev run -l es,fr,de
# Or open a pull request instead
npx localize-dev pr -l es,fr,deOder fügen Sie die GitHub Action und erhalten Sie bei jedem Push einen Pull Request. Probieren Sie es zuerst mit Ihrem eigenen Code im Spielbereich.