So implementieren Sie die Lokalisierung in der Swift-Benutzeroberfläche

10

Kann mir jemand helfen? Ich kann keine Beschreibung der Lokalisierung in der Swift-Benutzeroberfläche finden. Kann jemand bitte Ratschläge geben oder besser ein Beispiel, wie man zum Beispiel lokalisiert Text()?

Oleh H.
quelle

Antworten:

15

Wenn Sie sich die Dokumentation für Text ansehen, sehen Sie, dass LocalizedStringKey kein String in den Initialisierer aufgenommen wird:

init(_ key: LocalizedStringKey, tableName: String? = nil, bundle: Bundle? = nil, comment: StaticString? = nil)

Dies macht die Lokalisierung sehr einfach. Alles was du tun musst, ist:

  • Erstellen Sie eine neue Datei vom Typ Strings File und nennen Sie sie Localizable
  • Wählen Sie die neue Datei aus, aktivieren Sie den Dateiinspektor im rechten Bereich und klicken Sie auf Lokalisieren ...
  • Gehen Sie zu Ihrer Projektdatei in den Abschnitt Lokalisierungen und fügen Sie der Liste eine weitere Sprache hinzu. Xcode erstellt Lokalisierungsdateien für Sie

Wenn Sie Localizable.strings auswählen, sehen Sie, dass es Dateien für die Originalsprache und die Sprache enthält, die Sie gerade hinzugefügt haben. Dort platzieren Sie Ihre Übersetzungen, dh schlüssellokalisierte Textpaare.

Wenn Sie einen Text wie diesen haben, ist dies Ihre App:

Text("Hello World!")

Sie müssen jetzt Ihre Übersetzungen zu Ihren Localizable.strings hinzufügen:

für Ihre Basissprache:

"Hello World!" = "Hello World!";

und für Ihre zweite Sprache (in diesem Fall Deutsch):

"Hello World!" = "Hallo Welt!";

Um Ihre Vorschauen lokalisiert zu sehen, können Sie sie wie folgt definieren:

struct ContentViewView_Previews: PreviewProvider {

    static var previews: some View {
        ForEach(["en", "de"], id: \.self) { id in
            ContentView()
                .environment(\.locale, .init(identifier: id))
        }
    }
}
LuLuGaGa
quelle
Danke, es war hilfreich! Aber ich hatte einige Probleme, weil bereits mehrere Sprachen hinzugefügt wurden.
Oleh H
Ich habe diese Anweisungen genau befolgt und es hat nicht funktioniert. Ich verwende iOS 10.15.1 Beta und Xcode 11.1. Jeder Rat gerne angenommen. Im Moment gehe ich von einem Fehler in der Beta-Software aus und verliere keine Zeit mehr damit
Joseph Beuys 'Mum
Was genau war das Problem?
LuLuGaGa
1
Ich habe das Problem @LuLuGaGa gefunden. Es stellt sich heraus, dass ich den Anweisungen des Briefes nicht gefolgt bin, wie ich sagte. Meine Lokalisierungs-String-Datei befand sich in einem Unterordner. Stellen Sie es auf Projektebene und es funktioniert gut
Joseph Beuys 'Mum
1
Habe auch entdeckt (glaube ich), dass das Aufrufen der Strings-Datei etwas anderes als Localizable bedeutet, dass es nicht funktioniert
Joseph Beuys 'Mum
3

Für eine schnelle UI-Datei müssen Sie nur den Zeichenfolgenschlüssel aus der Lokalisierungsdatei .strings einfügen

SwiftUI importieren

struct ContentView: View {
    var body: some View {
        VStack {
            Text("selectLanguage")
            Text("languagesList")
        }



    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
            .environment(\.locale, .init(identifier: "en"))
    }
}

und dies ist ein Beispiel aus der .strings-Datei

"selectLanguage" = "Select language";
"languagesList" = "Languages list";

Ergebnis ist hier

Oleh H.
quelle
0

Um Ihre App zu lokalisieren, benötigen Sie:

  1. Verwenden Sie SwiftUI-Elemente wie: Text ("Nice") . Nizza wird zum Schlüssel in Localizable.strings.
  2. In den Fällen, in denen sich kein Text im SwiftUI-Element befindet, muss NSLocalizedString verwendet werden .
  3. Wählen Sie Ihr App-Ziel aus.
  4. Lokalisierung exportieren : Bearbeiten -> Zur Lokalisierung exportieren ...
  5. Geben Sie exportierte Dateien an den Übersetzer.
  6. Übersetzungen importieren : Bearbeiten -> Lokalisierungen importieren ...
Ramis
quelle
0

Um Localazable in SwiftUI zu verwenden, können Sie folgende Schritte ausführen:

Importieren Sie SwiftUI, um LocalizedStringKey in Ihren Dateien zu verwenden

//MARK: - File where you enum your keys to your Localized file
enum ButtonName: LocalizedStringKey {
case submit
case cancel
}

//MARK: - Your Localized file where are your translation
"submit" = "Submit is pressed";
"cancel" = "Cancel";

//MARK: - In your code
let submitButtonName = ButtonName.submit.rawValue
let cancelButtonName = ButtonName.cancel.rawValue

VStack {
Text(submitButtonName)
Text(cancelButtonName)
}
Roland Lariotte
quelle