Hvordan å lokalisere en Android Application

How å lokalisere en Android Application
51
Del
21
Del
Dette Cyber ​​mandag Envato Tuts + Kursene vil bli redusert til bare $ 3. Ikke gå glipp av.

Lokalisering er mer enn bare oversettelsen av strengene i din søknad på andre språk. Det innebærer også viser data, for eksempel datoer og klokkeslett, i riktig format for brukerne. Selv om du bare vil ha en engelsk versjon av programmet er det godt å vite hva lokalisering innebærer. På den måten vil du være klar hvis du bestemmer deg for å legge til støtte for flere steder, og du trenger ikke å lete etter strenger og verdier over programmets kodebasen.

Med Android SDK, språket de lokaliserte strenger og formatet brukes til å vise verdier avhenger av locale av enheten. De lokale er en kombinasjon av språket og landet. Språket er definert av ISO 639-1 standarden mens landet er definert av ISO 3166-1 standarden. Dette betyr at Android locale er kompatibel med kultur eller locale brukes av de fleste andre programmeringsspråk og rammeverk.

Den eneste locale garantert å være til stede på hver Android-enhet er engelsk som snakkes i USA . Det er representert ved no-kode, med en
være språkkoden for engelske og amerikanske være landskoden for USA. Du kan også bruke en
språkkoden bare
som locale å representere alle de engelsktalende land og regioner.

For å lokalisere en søknad om et språk eller for et bestemt land og språk, må du ta med de ressursene for at locale i /res mappe av søknaden din. Dette inkluderer vanligvis streng ressurser i /RES /verdier mappen, men det kan også omfatte andre typer ressurser, for eksempel bilder og oppsett. Android SDK identifiserer de ulike alternative ressurser med konfigurasjons kvalifiseringer, som deretter brukes til å gi navn til mappen som inneholder disse ressursene. Konfigurasjonen kvalifiseringskamp for den nasjonale innstillingen er språkkoden, eventuelt etterfulgt av landskoden. Så må de lokaliserte streng ressurser for søknaden din være i /res /verdi- < språkkoden > eller /res /verdi- < språkkoden > r < landskode > mappe.

Du bør huske på at ressursene som er identifisert med en konfigurasjon kvalifiseringskamp for en bestemt lokalitet har forrang over de fleste andre ressurser. Andre vanlige konfigurasjons kvalifiseringer til ressurser med lavere prioritet inkluderer skjermstørrelse og skjermpikseltetthet for å beskrive forskjellige utforminger, avhengig av størrelsen på skjermen. Kun ressurser identifisert med en mobil landskode (MCC) konfigurasjon kvalifiseringen har en større prioritet enn streng ressurser identifisert med en nasjonal innstilling konfigurasjon kvalifiseringskamp. Den mobile landkoden brukes til å definere ressurser for et land, som kan eventuelt bli fulgt med det mobile nettverket kode (MNC) fra et SIM-kort for å målrette en bestemt mobilleverandør i det landet. Den brukes til å levere innhold som er spesifikk for et land som en kontrakt eller en personvernpolicy

1.. Lokalisering Strings

Hver Android-applikasjonen skal ha alle sine streng ressurser i /res/values/strings.xml filen. Dette gjør det mulig for streng gjenbruk i søknaden din selv om ingen lokalisering er nødvendig. Også, hvis ingen fil er tilgjengelig for enhetens nåværende locale denne filen brukes. Hvis du ikke har en og søknaden din prøver å få tilgang til en streng ressurs som bare er tilgjengelig i et strings.xml fil spesifikke for en lokalitet, vil søknaden din krasjer uten forvarsel siden ressursene er lastet under kjøring og ikke under kompilering.

En strings.xml fil spesifikke for en nasjonal innstilling ikke trenger å ha alle de streng ressurser fra /res/values/strings.xml filen. Dette betyr at hvis en ressurs, som navnet på søknaden din, trenger ikke å være lokalisert, trenger du ikke å inkludere det i alle strenger fil.

Under kjøring på /res /verdi- < språkkoden > r < landskode > /strings.xml fil for locale av enheten er merket etterfulgt av /res /verdi- < språkkoden > /strings.xml fil for bare språket. Hvis den spesifiserte strengen er ikke tilgjengelig i disse filene, da søknaden faller tilbake til /res/values/strings.xml.

For eksempel, hvis du ønsker å lokalisere din søknad for alle de fransktalende regioner og land uten rettet mot en bestemt en, sette deg i trådene for programmet i /res/values-fr/strings.xml filen. Men hvis du ønsker å lokalisere noen strenger med staving spesifikke for fransk som skrevet i Frankrike, må du sette dem i /res/values-fr-rFr/strings.xml filen. Sørg for å legge til r foran landskoden i navnet på mappen eller det vil ikke bli funnet under kjøring når søknaden er lokalisert.

Her er et eksempel på en /res /verdier /strenger. xml fil med noen streng ressurser på engelsk:?
< xml version = "1.0" encoding = "utf-8" > < resources > < string name = "APP_NAME" > Android Lokalisering Demo < /string > < string name = "hello_world" > Hei, verden <! /string > < string name = "hello_world_name" > Hei% s <! /string > < /ressurser >

Og her er en /res/values-fr/strings.xml fil med de samme ressursene i fransk:?
< xml version = "1.0" encoding = "UTF-8" > < resources >?; < string name = "APP_NAME" > Demo de lokalisering Android < /string > < string name = "hello_world" > Bonjour le monde <! /string > < string name = "hello_world_name" > Bonjour% s <! /string > < /ressurser >
Lokal Strings i utforminger

De strenger i din oppsett bør være streng ressurser. Faktisk er en Lint advarsel vises hvis en streng er hardkodet. Du kan bruke ressurser overalt hvor du ville sette strenger i oppsett. String ressursene er identifisert av @ streng /etterfulgt av navnet på ressursen fra strings.xml filen. Følgende viser hello_world strengen fra forrige eksempel i en TextView henhold til nasjonal innstilling av enheten:
< TextView android: id = "+ id /hello_world_textview" android: layout_width = "wrap_content" android: layout_height = " wrap_content "android: text =" @ streng /hello_world "/>

Dette viser" Bonjour le monde "
på en Android-enhet satt til en nasjonal innstilling som omfatter det franske språket!. For alle andre steder, den "Hei, verden!" strengen vises.

Lokal Strings i Kode

Du må også lokalisere strenger fra koden hvis du opprette eller endre kontrollene utenfor dine oppsett. For å lokalisere disse strengene må du først få android.content.res.Resources objekt som inneholder alle ressursene i pakken av programmet for den aktuelle konteksten. Du kan deretter ringe getString metoden på at objektet, passerer i identifikator av strengen som skal vises. For eksempel viser følgende kode blokken du hvordan du setter teksten i en TextView objekt:
//Hent den oversatte strengen fra strengen resourceandroid.content.res.Resources res = context.getResources (); String Helloworld = res .getString (R.string.hello_world); //Sett strengen til textviewTextView helloTextView; helloTextView = (TextView) findViewById (R.id.hello_world_textview); helloTextView.setText (Helloworld);

Mer komplekse strenger, med ett eller flere variable komponenter, må du bruke formatstrenger. Formatstrenger la deg angi verdiene for parametrene å vise. Parametrene i formatstrengen er identifisert med formatbransjen. Den mest brukte formatet specifier er% s, som representerer en streng. Faktisk er alle de formatstrenger fra java.util.Formatter klassen er tilgjengelig. Også, hvis flere parametere er nødvendig, må du nummerere format bransjen. I tilfelle av strengen format bransjen, bør den første% 1 $ s, den andre% 2 $ s, og så videre.

Når formatstrenger er spesifisert, bruker du String.format metode for å passere i parametrene for å vise til streng. Her er hvordan du stiller inn teksten som skal vises i en TextView med hello_world_name formatstrengen fra strings.xml filen. Dette formatet strengen inneholder et format Specifier for navnet på brukeren:
//Få format stringandroid.content.res.Resources res = context.getResources (); String helloFormatString = res.getString (R.string.hello_world_name); String username = "Bob"; //Sett inn navn på formatet stringString helloWorldName = String.format (helloFormatString, username); //Sett teksten i textviewTextView helloTextView; helloTextView = (TextView) findViewById (R.id.hello_world_textview); helloTextView.setText (helloWorldName);

Dette viser
streng for en Android-enhet med en nasjonal innstilling som omfatter det franske språket "Bonjour Bob!". For alle andre steder den "Hello Bob!" strengen vises.

2. Lokaliser Datoer og Times

Hvis strengene på søknaden din er allerede lokalisert, er søknaden allerede i ganske god form. Det kan imidlertid hende du må vise datoer og klokkeslett for brukeren i mange tilfeller. Disse datoer og klokkeslett bør også være tilpasset den aktuelle locale av enheten. Heldigvis, Android SDK inneholder klasser som format datoer og klokkeslett i henhold til nasjonal innstilling.

I Android SDK, datoer og klokkeslett er administrert av Date klassen fra java.util navnerommet. Gjeldende dato og klokkeslett for enheten er returnert av java.util.Calendar.

lokalisering Datoer

Datoer kan formateres ved hjelp av en forekomst av dateformat formaterings fra java.text navnerommet. Du må bruke dateformat klasse fra Android SDK i android.text.format navne å få riktig formaterings for locale av enheten. Følgende kodebit viser hvordan du får en streng med gjeldende dato formatert for enhetens locale:
//Gets gjeldende dato og timeDate currentDate = Calendar.getInstance () getTime (); //Gets standard dato formaterings. for gjeldende locale av //den devicejava.text.DateFormat dateformat; dateformat = android.text.format.DateFormat.getDateFormat (denne); //Formaterer gjeldende dato etter localeString formattedCurrentDate = dateFormat.format (currentDate); < p> Hvis gjeldende locale av enheten er engelsk som snakkes i USA, vil strengen inneholde gjeldende dato i løpet av kort datoformat, 11/30/2014. Den dateformat klasse inneholder et par andre datoformater. For eksempel, returnerer getLongDateFormat metoden en lang datoformat, søndag, 30. november 2014.

Lokalisering Times

Siden tid er representert som Dato objekter ved Android SDK, de må også vises ved hjelp av et formaterings returneres av dateformat klasse fra android.text.format navnerommet. Den getTimeFormat metoden returnerer et format som bare viser tiden på en dato objekt. Følgende kodebit viser hvordan du får en streng med gjeldende klokkeslett formatert for enhetens locale:
//Gets gjeldende dato og timejava.util.Date currentDate = Calendar.getInstance () getTime (); //Gets. en dato formaterings for gjeldende locale av enheten //som viser times.java.text.DateFormat timeFormat; timeFormat = android.text.format.DateFormat.getTimeFormat (denne); //Formaterer gjeldende tid i henhold til localeString formattedTime = timeFormat.format (currentDate);.

Hvis gjeldende locale av enheten er engelsk som snakkes i USA, vil strengen inneholde gjeldende tid i følgende format, 08:15
< h2> Konklusjon

Det er viktig å bare lokalisere strengene som brukes i programmets brukergrensesnitt. For eksempel, er det ingen grunn til å lokalisere feilsøke meldinger som bare brukes under utvikling eller for diagnostiske formål. Legg også merke til at du ikke bør skrive lokaliserte datoer og klokkeslett til disk eller til en database. Ikke bare kan den locale av en endring enhet, som arbeider med lokaliserte datoer og klokkeslett gjør utvikling unødvendig vanskelig og kompleks.