Lokalisera en iOS-applikation i Xcode 6

Vad du ska skapa

Att översätta en iOS-applikation till olika språk är en tvåstegsprocess. Först måste du förbereda din app genom att skilja alla text, bilder och andra resurser som du behöver översättas från resten av din kod och storyboards. Denna process kallas internationalisering (I18N).

När du har avslutat internationaliseringen av din app är du redo att lokalisera den. Här exporterar du dina resurser och skickar dem till din översättare. När du får de översatta resurserna tillbaka, importerar du dem enkelt till Xcode, och din app är redo att stödja ett annat språk.

1. Inställning

Vi använder ett enkelt exempelapp för att experimentera med lokaliseringar. Skapa ett nytt Xcode-projekt, använd Enkel visningsprogram för mallen och ring projektet LocalizationExample.

Därefter måste vi skapa ett enkelt användargränssnitt så att vi kan se våra lokaliseringar i aktion. I Main.storyboard, lägg till en etikett och en bildvy. Ändra etikettens text till "Hej världen!". Ladda ner dessa bildresurser, lägg till en / logo.png till ditt Xcode-projekt (kontrollera Kopiera objekt om det behövs är markerad) och visa den i bildvyn genom att ändra dess Bild fält till logo.png. Också vara säker på att lägga till en Centrum horisontellt i behållaren Layoutbegränsning till båda användargränssnittet.

Du behöver också veta hur man lokaliserar hårdkodade strängar så fortsätt och lägg till ett konsolmeddelande till AppDelegate.m. Lägg till följande loggutdrag till applicationDidFinishLaunching:.

- (BOOL) ansökan: (UIApplication *) ansökan gjordeFinishLaunchingWithOptions: (NSDictionary *) launchOptions NSLog (@ "Hej, Värld!"); returnera JA;  

Detta ger oss tre resurser att lokalisera, en bild, en etikett och en hårdkodad sträng. Observera att att utveckla en lokal app är i stort sett densamma som att skapa en icke-lokaliserad app. Du kan konfigurera visningar och definiera anpassat beteende utan att verkligen oroa dig för lokalisering. Det mesta händer när du har din grundläggande funktionalitet som fungerar.

2. Internationalisering

Nu när vi har en grundläggande applikation att arbeta med, är vi redo att internationalisera vår app. Det är här vi förbereder oss för att lokalisera resurser genom att isolera dem från resten av vår kod. Xcode ger omfattande I18N-funktioner, vilket gör det mycket lättare att lokalisera en app.

Steg 1: Förbereda storyboards

Låt oss först titta på att internationalisera vår apps användargränssnitt. Det första steget är att berätta för Xcode vilka regioner eller platser du vill stödja. Klicka på LocalizationsExample projekt i Project Navigator och välj den blå projektikonen i popuplistan till vänster.

De lokaliseringar avsnittet är där du kan lägga till locales i din app. Vi översätter vårt exempelprojekt till spanska, så klicka på plustecknet och välj Spanska. Detta öppnar ett dialogfönster där du frågar vad du vill göra med dina befintliga resurser. Se till Lokaliserbara strängar är vald för båda Main.storyboard och LaunchScreen.xib som visas i följande skärmdump. Klick Avsluta att fortsätta.

Du hittar nu två saker under Main.storyboard, en bas storyboard och a Main.strings fil. Den förra är din faktiska storyboard-fil och den senare är en strängfil som innehåller all den text som användaren står inför i storyboardet. Denna strängfil är vad som så småningom kommer att översättas.

De Main.storyboard filen är nu internationaliserad och redo att vara lokaliserad.

Steg 2: Förbereda hårdkodade strängar

Användarvänliga strängar som är hårdkodade i dina objektiv-C / Swift-klasser behöver viss specialbehandling. Det här är ett nödvändigt steg, till exempel om du programmatiskt ställer in texten för användargränssnitt i dina storyboards.

Lyckligtvis är internationalisering av hårdkodade strängar en enkel process. Allt du behöver göra är att lägga dem i en NSLocalizedString makro, som så:

- (BOOL) ansökan: (UIApplication *) ansökan gjordeFinishLaunchingWithOptions: (NSDictionary *) launchOptions NSString * hälsning = NSLocalizedString (@ "Hej, Värld!", @ "En vänlig hälsning"); NSLog (@ "% @", hälsning); returnera JA;  

Det första argumentet är en nyckel som pekar på strängen du letar efter och det andra (frivilliga) argumentet är en kommentar som kommer att inkluderas i den exporterade strängfilen. Du kan använda abstrakta tangentbordstangenter (t.ex.., @"hälsning"), men jag finner att koden är mer läsbar om du använder den aktuella strängen som ska översättas som nyckeln.

I nästa avsnitt, någon NSLocalizedString samtal kommer automatiskt att dras ut ur vår kod och läggas till i listan över strängar som behöver översättas.

3. Lokalisering

När din app är internationaliserad är du redo att börja lokalisera dina resurser. Lokalisering är en ganska enkel process där du exporterar alla strängar som behöver översättas, skicka dem till din översättare och importera dem tillbaka till ditt projekt. Denna export / översätt / importcykel kan fortsätta när du utvecklar din app, men det är vanligtvis en bra idé att slutföra majoriteten av ditt användargränssnitt innan du börjar lokaliseringsprocessen.

Steg 1: Exportera strängar

Xcode gör det enkelt att exportera alla dina internationaliserade strängar till en enda XML Localization Interchange File Formatera (.xliff) dokument, vilket är standardformatet för lokaliseringsindustrin.

För att generera den här filen, välj LocalizationExample i Project Navigator, välja Redaktör> Exportera för lokalisering ... från Xcode-menyn och välj en filväg utanför ditt Xcode-projekt för att förhindra eventuell förvirring.

klick Spara kommer att skapa en ny mapp som innehåller en es.xliff fil. Om du öppnar den hittar du en hel del XML som innehåller information om varje sträng i din app som behöver lokaliseras.

Det här är filen du behöver skicka till din översättare. De har speciella verktyg för att redigera XML, men för vårt exempel, låt oss gå in och redigera det direkt. Öppna es.xliff och leta efter texten "Hej världen!". Du borde hitta två separata  element som visas nedan.

 Hej världen! Hola, Mundo! Klass = "IBUILabel"; text = "Hej, Värld!"; ObjectID = "Cns-Fc-27j";    Hej världen! Hola, Mundo!