Lokalisierung mit SwiftUI


Richtet sich ein Programm an ein internationales Publikum, ist es unverzichtbar, die grafische Oberfläche in verschiedenen Sprachen anzubieten. Diese Anpassung kann im schlimmsten Fall für den Erfolg oder Misserfolg einer Anwendung verantwortlich sein. Beispielsweise werden viele Spiele aus asiatischen Ländern in Europa ignoriert, weil eine Übersetzung fehlt. Das schränkt die die Anzahl der möglichen Nutzer ein. Neben den benötigten Kenntnissen der Sprache ist die Lokalisierung immer mit einem Aufwand verbunden, den viele Entwickler scheuen oder als nicht gerechtfertigt erachten. Mit SwiftUI wird der Prozess jedoch etwas einfacher.

Der folgende Code zeigt ein nicht untypisches Anmeldeformular einer SwiftUI-App. Es gibt zwei Textfelder, in denen der Nutzer seinen Benutzernamen und sein Kennwort eintragen kann und eine Schaltfläche, um den Anmeldevorgang zu starten. Über einen zweiten Button kann ein Nutzerkonto angelegt werden, falls der Anwender noch nicht über ein eigenes Konto verfügt.

struct ContentViewView {

    

    @State private var username : String = ""

    @State private var password : String = ""

    

    var bodysome View {

        NavigationView {

            Form {

                Section {

                    TextField("Username", text: $username)

                    TextField("Password", text: $password )

                }

                Button("Login") { }

                Button("Create new") {}

            }.navigationBarTitle(Text("Register"))

        }

    }

}

Stacks Image 27

Die Kommentare im Code unterteilen den Inhalt der Liste in Obst und Gemüse. Diese Unterteilung ist aber nur für den Entwickler sichtbar. Auf der grafischen Oberfläche werden sämtliche Bezeichnungen gemeinsam und untereinander in einer Tabelle angezeigt. In vielen Fällen kann diese Art der Darstellung ausreichen. Enthält eine List jedoch viele Einträge, wird es für den Nutzer schwieriger, Informationen zu finden. Zwar sind in diesem Beispiel alle Namen alphabetisch sortiert, aber nur innerhalb ihrer Kategorie. Dass die Zitrone in der Mitte der Auflistung steht, ist ungünstig und unerwartet. Es wäre für den Anwender leichter, wenn die verschiedenen Obst- und Gemüsesorten nicht nur im Code gruppiert wären, sondern ebenfalls auf der grafischen Oberfläche. In SwiftUI können Gruppierung innerhalb einer List mit einer Section realisiert werden.

Stacks Image 29

Mit einer Text-Struktur im Header der Section wird die Liste zwar wie gewünscht unterteilt, ansehnlich ist das Ergebnis aber nicht. Ohne Anpassungen erzeugt SwiftUI einen schwarzen Text auf einem hellgrauen Hintergrund. In vielen Fällen wird die Section mit diesem Erscheinungsbild nicht zum Design der App passen. Anpassungen sind aber realisierbar, denn jede Art von View kann als Header verwendet werden. Es gibt keine Einschränkung, die ausschließlich einen Text erlaubt. Sogar komplett neue Views sind nicht ausgeschlossen, wie der folgende Codeausschnitt zeigt.

/* 

  Localizable.strings

  SwiftUI-Localization-Sample

  Copyright © 2020 Holger Hinzberg. All rights reserved.

*/


"Username" = "Username";

"Password" = "Password";

"Login" = "Login now";

"Create new" = "Create new account";

"Register" = „Registration";


Nach einem Neustart der App werden auf der grafischen Oberfläche die neuen Bezeichnungen angezeigt. Alle Begriffe für die englische Oberfläche sind jetzt in der Datei hinterlegt. Soll eine ähnliche Datei für andere Sprachen erstellt werden, genügt es, die Datei Localizable.strings im Project Navigator auszuwählen und im File Inspector auf die Schaltfläche Localize zu klicken. Xcode wird anschließend fragen, für welche Sprache die aktuelle Datei sein soll. Das ist Englisch.

Stacks Image 36
Stacks Image 44

Noch hat sich im Projekt nicht viel getan, aber im File Inspector wird jetzt als mögliche Option zusätzlich die Sprache Deutsch (German) angeboten. Zur Auswahl stehen im Inspector nur die Sprachen, die zuvor in der Projekteinstellungen konfiguriert wurden.

Stacks Image 46

Nachdem die Option German aktiviert ist, gibt es die Datei Localizable.strings im Project Navigator zwei Mal. Eine Version für jede vorhandene Sprache. Die Datei Localizable.strings (German) ist aktuell eine Kopie der englischen Version. Die Zuweisungen müssen durch deutsche Bezeichnungen ersetzt werden.

Stacks Image 48

/* 

  Localizable.strings

  SwiftUI-Localization-Sample

  Copyright © 2020 Holger Hinzberg. All rights reserved.

*/


"Username" = "Benutzername";

"Password" = "Kennwort";

"Login" = "Jetzt anmelden";

"Create new" = "Ein neues Konto erstellen";

"Register" = „Anmeldung";

Die App startet anschließend mit der deutschen Oberfläche, wenn dies die gewählte Sprache des Gerätes ist.

Stacks Image 55
Stacks Image 57

Geschrieben am: 03.05.2020
Technologien: Swift, SwiftUI, macOS, iOS