iRepair

Gør dine programmer internationale

En af hemmelighederne bag et godt salg i App Store er, at man laver sine programmer på det sprog, der tales der, hvor man vil sælge programmerne. Det giver næsten sig selv, men alt for mange udviklere overser dette vigtige faktum. Kan en tysker for eksempel vælge mellem to lige gode programmer, et på engelsk og et på tysk, vælger de fleste naturligvis det tyske. Det er altså en konkurrenceparameter, at tilbyde sine programmer på flere forskellige sprog. Der er også et andet aspekt. Mange danske udviklere, laver deres programmer på dansk (tak for det), men det hæmmer unægteligt markedet, da de færreste udover danske taler dansk. En engelsk version vil alt andet lige øge salget.

Det, det handler om, er, at gøre et internationalt program lokalt (ved at tale til folk på deres modersmål) eller om at gøre et lokalt program internationalt (ved at inkludere engelsk sprog foruden den danske). Den helt oplagte løsning på dette er selvfølgelig, at lave flere forskellige udgaver at sit program, til de forskellige markeder. Det lyder besværligt, og det er det også, og det er nok hovedgrunden til, at folk ikke får det gjort.

Men der findes faktisk en nemmere metode indbygget i iPhone-sdk’et, der gør, at man kan inkludere alle de sprog man vil i ét program. Vel og mærke på en måde, så brugeren per automatik får det ønskede sprog. Man skal med andre ord ikke selv vælge sprog i programmet, via et flag eller ligende, det sker helt automatisk ud fra det sprog iPhonen er indstillet til. Programmet fremstår altså som om, det er for eksempel native tysk. Det er smart, for det betyder, at man ikke skal indsende og opdatere 117 programmer, men kun et enkelt.

Forberedelse

Først skal du selvfølgelig åbne det projekt, du vil arbejde med. Har du ikke noget konkret, så kan du hente et sidst i denne artikel.

I dette eksempel vil vi lave vores program på dansk og engelsk. Åben Finder og find mappen med dit projekt. I denne mappe skal du lave to nye mapper. De skal hedde en.lproj og da.lproj. Disse mapper fortæller xcode, at vi vil internationalisere vores projekt og bruges til at gemme de engelske henholdsvis danske filer i.

Skærmbillede 2009-12-11 kl. 10.55.16Når mapperne er oprettet, går du tilbage til xcode. Nu skal vi oprette to filer, der skal indeholde hver deres sprog-strenge. I xcode vælger du File -> New File -> Resource (under Mac OS X) -> Strings File. Giv filen navnet “Localizable.strings” og gem den i den ene af de to mapper vi lige lavede, for eksempel en.lproj. Du vælger mappen ved at trykke på Choose-knappen. Lav en ny fil med samme navn, men gem i da.lproj-mappen.

Har du gjort det rigtigt, skal det i xcodes “Groups and Files”-panel se ud som på billedet til højre. Xcode finder med andre selv ud af, at du har to filer med samme navn i hver deres mappe, og at de derfor er en del af “sprogpakken”.

Opsætning af sprogpakke

Sprogstrenge kommer i formatet:

"nøgle" = "værdi";

Nøglen er bare et navn, der fortæller os (og xcode) hvad vi snakker om, mens værdien er den aktuelle tekst der skal vises på det pågældende sprog, når nøglen kaldes.

Lad os sige, at vi har en label, hvor der på dansk skal stå “beregn”, mens der på engelsk skal stå “calculate”.

I Localizable.strings (da) skriver vi:

"beregnknap" = "beregn";

I Localizable.strings (en) skriver vi:

"beregnknap" = "calculate";

Nu har vi altså lavet en oversættelse, som vi gerne vil implementere i vores program. Lad os sige at vi har en variabel der hedder:

NSString *tekstPaaKnap = @"beregn";

Den skal vi have ændret, så den i stedet henter information i vores sprogfiler. Til det formål bruger vi
NSLocalizedString(@"nøgle", @"evt_kommentar")

I vores eksempel vil koden derfor komme til at se sådan ud:

NSString *tekstPaaKnap = NSLocalizedString(@"beregnknap", @"");

Det der sker, er at vi nu via NSLocalizedString henter den værdi der er gemt i nøglen “beregnknap” i den pågældende Localizable.strings . Er vores iPhone indstillet til dansk vil den hente “beregn”, er iPhonen indstillet til engelsk vil den hente “calculate”.

Så nemt er det faktisk. Det eneste man skal er, at finde alle de steder, hvor man har en tekst, og erstatte den med et kald til Localizable.strings.

View-filer

Nu er det langt fra altid, at alt ens tekst defineres i xcode. Det foregår også i Interface Builder. Heldigvis, er det så smart indrettet, at man kan placere sine view-filer i de to sprogmapper. Det vil sige, at man laver et view til engelsk og et til dansk. På samme måde som tidligere, skal de have samme navn, men placeres i hver deres mappe.

Jeg har illustreret princippet i det projekt du kan hente her, hvor jeg dels bruger sprogstrenge og forskellige views. Bemærk at de to views kan indeholde forskellige elementer og være designet forskellige. De behøver altså ikke være tro kopier af hinanden.

Prøv at skifte sproget i iPhonesimulatoren og se hvad der sker. God fornøjelse.

international.zip

Skrevet af Martin Wolsing, 11/12 2009
Relaterede indlæg

Kommentarer
Subscribe to RSS
  • marianne

     

    Hej sa
    En stor bøn::::::::::
    Har kobt en iphone i kina den er desværre med engelsk sprogpakke, er der nogle der kan hjælpe mig med installering af en dansk sprogpakke.

    på forhaånd tusinde tak.

    27. juli 2010 @ 15:54

Skriv en kommentar

For at kommentere skal du udfylde navn og mailadresse. Du kan også oprette en profil på siden. Du finder registreringsformen nederst i sidebaren i højre side (klik på "Opret").