Cum să localizați o aplicație Android

Localizarea este mai mult decât traducerea șirurilor din aplicația dvs. în alte limbi. De asemenea, implică afișarea datelor, cum ar fi datele și orele, în formatul potrivit pentru utilizatorii dvs. Chiar dacă doriți doar o versiune în limba engleză a aplicației dvs., este bine să știți ce implică localizarea. În acest fel, veți fi gata dacă vă decideți să adăugați asistență pentru localizări suplimentare și nu va trebui să căutați șiruri de caractere și valori peste baza de cod a aplicației dvs..

Cu SDK-ul Android, limba șirurilor localizate și formatul utilizat pentru afișarea valorilor depind de localizarea dispozitivului. Localizarea este o combinație a limbii și a țării. Limba este definită de ISO 639-1 standard în timp ce țara este definită de ISO 3166-1 standard. Aceasta înseamnă că locația Android este compatibilă cu cultura sau localizarea utilizată de cele mai multe alte limbi de programare și cadre.

Singura localizare garantată a fi prezentă pe fiecare dispozitiv Android este Engleză așa cum este vorbit în Statele Unite. Este reprezentat de ro_ cod, cu rofiind codul de limbă pentru limba engleză și NE fiind codul țării pentru Statele Unite. De asemenea, puteți utiliza funcția rocodul de limbă numaica localizare pentru a reprezenta toate țările și regiunile vorbite în limba engleză.

Pentru a localiza o aplicație pentru o limbă sau pentru o anumită țară și limbă, trebuie să includeți resursele pentru acel locale în / res dosar al aplicației dvs. Aceasta include, de obicei, resurse de șir în / res / valori , dar poate include și alte tipuri de resurse, cum ar fi imagini și layout-uri. SDK-ul Android identifică diferitele resurse alternative cu calificări de configurare, care sunt apoi folosite pentru a numi dosarul care conține aceste resurse. Calificatorul de configurare pentru localizare este codul de limbă, opțional urmat de codul de țară.Deci, resursele de șir localizate pentru aplicația dvs. trebuie să fie în/res / valori- sau /res / valori--r pliant.

Trebuie să rețineți că resursele identificate cu un calificativ de configurare pentru o anumită localizare au prioritate față de majoritatea celorlalte resurse. Alte calificative de configurare obișnuite pentru resursele cu prioritate mai mică includ dimensiunea ecranului și densitatea pixelilor pentru a descrie diferite aspecte în funcție de dimensiunea ecranului. Numai resursele identificate cu un calificator de configurare a codului mobil (MCC) au o prioritate mai mare decât resursele de șir identificate cu un calificativ de configurare a locației. Codul mobil al țării este utilizat pentru a defini resursele pentru o țară, care poate fi urmată opțional cu codul rețelei mobile (MNC) de pe o cartelă SIM pentru a viza un anumit furnizor de telefonie mobilă din țara respectivă. Este folosit pentru a oferi conținut specific unei țări, cum ar fi un contract sau o politică de confidențialitate.

1. Localizarea șirurilor

Fiecare aplicație Android ar trebui să aibă toate resursele de șir în /res/values/strings.xml fişier. Aceasta permite reutilizarea șirului în aplicația dvs. chiar dacă nu este necesară localizarea. De asemenea, dacă nu există niciun fișier pentru localizarea actuală a dispozitivului, aceasta este fișierul este utilizat. Dacă nu aveți una și aplicația dvs. încearcă să acceseze o resursă de șir care este disponibilă doar într-o strings.xml fișier specific pentru o localizare, aplicația dvs. se va prăbuși fără avertisment, deoarece resursele sunt încărcate la timpul de execuție și nu în timpul compilării.

A strings.xml fișierul specific localizării nu are nevoie să aibă toate resursele de șir din /res/values/strings.xml fişier. Aceasta înseamnă că, dacă o resursă, ca și numele aplicației dvs., nu trebuie să fie localizată, nu este necesar să o includeți în fiecare fișier de fișiere.

În timpul rulării, /res / valori--r/strings.xml fișierul pentru localizarea dispozitivului este verificat, urmat de / res / valori-/strings.xml fișier numai pentru limbă. Dacă șirul specificat nu este disponibil în acele fișiere, atunci aplicația cade înapoi la / res / valori / strings.xml.

De exemplu, dacă doriți să localizați aplicația dvs. pentru toate regiunile și țările vorbitoare de limbă franceză fără a viza o anumită regiune, puneți șirurile pentru aplicație în / res / valori-fr /strings.xml fişier. Cu toate acestea, dacă doriți să localizați anumite șiruri de caractere cu ortografie specifică în franceză așa cum este scrisă în Franța, trebuie să le puneți în /res/values-fr-rFr/strings.xml fişier. Asigurați-vă că adăugați r înainte de codul de țară în numele dosarului sau nu va fi găsit la rularea când aplicația este localizată.

Iată un exemplu de a / res / valori /strings.xml fișier cu câteva resurse de șir în limba engleză:

  Demo pentru localizarea Android Salut Lume! Bună ziua% s!  

Și aici este a / Res / valori-fr /strings.xmlfișier cu aceleași resurse în limba franceză:

  Démo de localizare Android Bonjour le monde! Bonjour% s! 

Localizarea șirurilor în layout-uri

Corzile din structurile dvs. ar trebui să fie resurse de șir. De fapt, un avertisment Lint este afișat dacă un șir este codat greu. Aveți posibilitatea să utilizați resursele oriunde ați stabili șiruri în layout-uri. Resursele de șir sunt identificate prin @şir/ urmată de numele resursei din strings.xml fişier. Următoarele afișează: Salut Lume șir din exemplul anterior din a TextView în funcție de localizarea dispozitivului:

Aceasta arată "Bonjour le monde!"pe un dispozitiv Android setat la o localizare care include limba franceză. Pentru toate celelalte localități, "Lumea bună!" șirul este afișat.

Localizarea șirurilor în cod

De asemenea, va trebui să localizați șiruri de caractere din codul dvs. dacă creați sau modificați comenzi în afara planșelor. Pentru a localiza aceste șiruri, trebuie mai întâi să obțineți android.content.res.Resources obiect care conține toate resursele din pachetul aplicației pentru contextul curent. Apoi, apelați getString pe acel obiect, trecând în identificatorul șirului de afișat. De exemplu, următorul bloc de cod vă arată cum să setați textul unui TextView obiect:

// Obțineți șirul tradus din resursa șir și android.content.res.Resources res = context.getResources (); Stringul helloWorld = res.getString (R.string.hello_world); // Setați șirul în TextView helloTextView; helloTextView = (TextView) findViewById (R.id.hello_world_textview); helloTextView.setText (HelloWorld);

Corzi mai complexe, cu una sau mai multe componente variabile, trebuie să utilizați șiruri de format. Formatarea șirurilor vă permit să specificați valorile parametrilor de afișat. Parametrii din șirul format sunt identificați cu specificatorii de format. Cea mai frecvent utilizată specificator de format este % s, reprezentând un șir. De fapt, toate șirurile de format din java.util.Formatter sunt disponibile. De asemenea, dacă sunt necesari mai mulți parametri, trebuie să numerotați parametrii de formatare. În cazul specificatorilor de format de șir, primul ar trebui să fie % 1 $ s, al doilea % 2 $ s, si asa mai departe.

După ce sunt specificate șiruri de format, utilizați String.format metoda de a transmite parametrii de afișat în șirul dvs. Iată cum puteți seta textul să se afișeze într-un TextView cu hello_world_name șir de format din strings.xml fişier. Acest șir de formate include un specificator de format pentru numele utilizatorului:

// Obțineți șirul de formate android.content.res.Resources res = context.getResources (); Stringul helloFormatString = res.getString (R.string.hello_world_name); String userName = "Bob"; // Introduceți numele în șirul de formate String helloWorldName = String.format (helloFormatString, userName); // Setați textul textului TextView helloTextView; helloTextView = (TextView) findViewById (R.id.hello_world_textview); helloTextView.setText (helloWorldName);

Acest lucru arată "Bonjour Bob!"string pentru un dispozitiv Android cu localizare care include limba franceză. Pentru toate celelalte locații "Hello Bob!" șirul este afișat.

2. Localizarea datelor și a timpului

Dacă șirurile aplicației dvs. sunt deja localizate, aplicația dvs. este deja în formă bună. Cu toate acestea, este posibil să fie necesar să afișați date și ore pentru utilizator în multe cazuri. Aceste date și ore ar trebui, de asemenea, să fie adaptate locației actuale a dispozitivului. Din fericire, SDK-ul Android include clase care formatează datele și orele în funcție de localizare.

În Android SDK, datele și orele sunt gestionate de către Data clasa de la java.util Spațiu de nume. Data și ora curente ale dispozitivului sunt returnate de către java.util.Calendar.

Localizarea datelor

Datele pot fi formatate folosind o instanță a Formatul datei formator de la java.text Spațiu de nume. Trebuie să utilizați Formatul datei clasa din SDK Android în android.text.format spațiu de nume pentru a obține formatul potrivit pentru localizarea dispozitivului. Următorul fragment de cod arată cum să obțineți un șir cu data curentă formatată pentru localizarea dispozitivului:

// Returnează data și ora curente Data curentDate = Calendar.getInstance (). GetTime (); // Obține formatorul de date standard pentru locația curentă a // dispozitivului java.text.DateFormat dateFormat; dateFormat = android.text.format.DateFormat.getDateFormat (aceasta); // Formează data curentă în funcție de locația String formattedCurrentDate = dateFormat.format (currentDate);

Dacă locația curentă a dispozitivului este engleza așa cum este vorbită în Statele Unite, șirul va conține data curentă într-un format de dată scurtă, 11/30/2014. Formatul datei clasa include câteva alte formate de date. De exemplu, getLongDateFormat metoda returnează un format de dată lungă, Duminică, 30 noiembrie 2014.

Localizarea timpului

Deoarece ori sunt reprezentate ca Data obiecte de pe Android SDK, acestea trebuie de asemenea afișate folosind un formatator returnat de către Formatul datei clasa de la android.text.format Spațiu de nume. getTimeFormat metoda returnează un format care afișează doar timpul unui a Data obiect. Următorul fragment de cod arată cum să obțineți un șir cu timpul curent formatat pentru localizarea dispozitivului:

// Permite data și ora curentă java.util.Date currentDate = Calendar.getInstance (). GetTime (); // Obține un formatator de dată pentru locația curentă a dispozitivului // care arată orele. java.text.DateFormat timeFormat; timeFormat = android.text.format.DateFormat.getTimeFormat (aceasta); // Formează ora curentă în funcție de locația String formattedTime = timeFormat.format (currentDate);

Dacă locația curentă a dispozitivului este engleza așa cum este vorbită în Statele Unite, șirul va conține ora curentă în formatul următor, 20:15.

Concluzie

Este important să localizați numai șirurile care sunt utilizate în interfața de utilizare a aplicației. De exemplu, nu este nevoie să localizați mesajele de depanare care sunt utilizate numai în timpul dezvoltării sau în scopul diagnosticării. De asemenea, rețineți că nu trebuie să scrieți date și ore localizate pe disc sau într-o bază de date. Nu numai că se poate modifica localizarea unui dispozitiv, lucrul cu datele și orele localizate face ca dezvoltarea să fie inutil de dificilă și complexă.


Cod