Come localizzare un'applicazione Android

La localizzazione è più della semplice traduzione delle stringhe nella tua applicazione in altre lingue. Implica anche la visualizzazione di dati, come date e orari, nel formato corretto per i tuoi utenti. Anche se vuoi solo una versione inglese della tua applicazione, è bene sapere cosa comporta la localizzazione. In questo modo sarai pronto se decidi di aggiungere supporto per impostazioni locali aggiuntive e non dovrai cercare stringhe e valori su tutto il codice base dell'applicazione.

Con Android SDK, la lingua delle stringhe localizzate e il formato utilizzato per visualizzare i valori dipende dalle impostazioni locali del dispositivo. Il locale è una combinazione della lingua e del paese. La lingua è definita dal ISO 639-1 standard mentre il paese è definito dal ISO 3166-1 standard. Ciò significa che le impostazioni locali di Android sono compatibili con la cultura o le impostazioni locali utilizzate dalla maggior parte degli altri linguaggi e framework di programmazione.

L'unica localizzazione garantita per essere presente su ogni dispositivo Android è Inglese come detto nel stati Uniti. È rappresentato dal it_IT codice, con itessendo il codice della lingua per l'inglese e NOI essendo il codice paese per gli Stati Uniti. Puoi anche usare il itsolo il codice della linguacome locale per rappresentare tutti i paesi e le regioni di lingua inglese.

Per localizzare un'applicazione per una lingua o per un paese e una lingua specifici, è necessario includere le risorse per quella locale nel / res cartella della tua applicazione. Questo di solito include le risorse di stringa nel / res / valori cartella, ma può anche includere altri tipi di risorse, come immagini e layout. L'SDK di Android identifica le varie risorse alternative con i qualificatori di configurazione, che vengono quindi utilizzati per denominare la cartella contenente tali risorse. Il qualificatore di configurazione per le impostazioni internazionali è il codice della lingua, opzionalmente seguito dal codice del paese.Quindi, le risorse stringa localizzate per la tua applicazione devono essere nel/res / valori- /res / valori--r cartella.

È necessario tenere presente che le risorse identificate con un qualificatore di configurazione per una specifica localizzazione hanno la precedenza sulla maggior parte delle altre risorse. Altri qualificatori di configurazione comuni per le risorse con priorità più bassa includono la dimensione dello schermo e la densità dei pixel dello schermo per descrivere layout diversi a seconda delle dimensioni dello schermo. Solo le risorse identificate con un qualificatore di configurazione del codice paese mobile (MCC) hanno una priorità maggiore rispetto alle risorse stringa identificate con un qualificatore di configurazione locale. Il codice del paese mobile viene utilizzato per definire le risorse per un Paese, che può facoltativamente essere seguito con il codice di rete mobile (MNC) da una scheda SIM per rivolgersi a un provider di telefonia mobile specifico in tale paese. Viene utilizzato per fornire contenuti specifici per un paese come un contratto o una politica sulla privacy.

1. Localizzazione di stringhe

Ogni applicazione Android dovrebbe avere tutte le sue risorse di stringa nel /res/values/strings.xml file. Ciò consente il riutilizzo delle stringhe nell'applicazione anche se non è necessaria alcuna localizzazione. Inoltre, se questo file non è disponibile per le impostazioni locali correnti del dispositivo il file è usato Se non ne hai uno e la tua applicazione prova ad accedere a una risorsa stringa che è disponibile solo in a strings.xml file specifico per una locale, l'applicazione si bloccherà senza preavviso poiché le risorse vengono caricate in fase di runtime e non durante la compilazione.

UN strings.xml il file specifico per una locale non ha bisogno di avere tutte le risorse della stringa dal /res/values/strings.xml file. Ciò significa che se una risorsa, come il nome della tua applicazione, non ha bisogno di essere localizzata, non è necessario includerla in ogni file di stringhe.

In fase di esecuzione, il /res / valori--r/strings.xml il file per le impostazioni locali del dispositivo è controllato seguito da / res / valori-/strings.xml file solo per la lingua Se la stringa specificata non è disponibile in questi file, l'applicazione ritorna a / res / Valori / strings.xml.

Ad esempio, se desideri localizzare la tua applicazione per tutte le regioni e i paesi francofoni senza averne il targeting specifico, metti le stringhe per l'applicazione nel / res / valori-fr /strings.xml file. Tuttavia, se vuoi localizzare alcune stringhe con lo spelling specifico per il francese come scritto in Francia, devi metterle in /res/values-fr-rFr/strings.xml file. Assicurati di aggiungere il r prima del codice del paese nel nome della cartella o non sarà trovato in fase di esecuzione quando l'applicazione è localizzata.

Ecco un esempio di a / res / valori /strings.xml file con poche risorse stringa in inglese:

  Demo di localizzazione Android Ciao mondo! Ciao% s!  

Ed ecco un / Res / valori-fr /strings.xmlfile con le stesse risorse in francese:

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

Localizzazione di stringhe nei layout

Le stringhe nei tuoi layout dovrebbero essere risorse di stringa. In effetti, viene visualizzato un avviso Lint se una stringa è codificata. Puoi usare le risorse ovunque in cui imposteresti le stringhe nei layout. Le risorse di stringa sono identificate da @stringa/ seguito dal nome della risorsa dal strings.xml file. Di seguito viene visualizzato il Ciao mondo stringa dell'esempio precedente in a TextView in base alle impostazioni locali del dispositivo:

Questo mostra "Bonjour le monde!"su un dispositivo Android impostato su un'impostazione internazionale che include la lingua francese. Per tutti gli altri locali, il "Ciao mondo!" la stringa è mostrata.

Localizzazione di stringhe nel codice

Dovrai anche localizzare le stringhe dal tuo codice se crei o modifichi i controlli al di fuori dei tuoi layout. Per localizzare quelle stringhe devi prima ottenere il android.content.res.Resources oggetto che contiene tutte le risorse nel pacchetto dell'applicazione per il contesto corrente. Quindi chiami il getString metodo su quell'oggetto, passando l'identificatore della stringa da visualizzare. Ad esempio, il seguente blocco di codice mostra come impostare il testo di a TextView oggetto:

// Ottieni la stringa tradotta dalla risorsa stringa android.content.res.Resources res = context.getResources (); String helloWorld = res.getString (R.string.hello_world); // Imposta la stringa sulla vista testo TextView helloTextView; helloTextView = (TextView) findViewById (R.id.hello_world_textview); helloTextView.setText (helloWorld);

Stringhe più complesse, con uno o più componenti variabili, è necessario utilizzare le stringhe di formato. Le stringhe di formato consentono di specificare i valori per i parametri da visualizzare. I parametri nella stringa di formato sono identificati con gli specificatori di formato. Lo specificatore di formato più comunemente usato è %S, rappresenta una stringa. In effetti, tutte le stringhe di formato dal java.util.Formatter le lezioni sono disponibili. Inoltre, se sono richiesti più parametri, è necessario numerare gli identificatori di formato. Nel caso degli specificatori di formato stringa, dovrebbe essere il primo % 1 $ s, il secondo % 2 $ s, e così via.

Una volta specificate le stringhe di formattazione, si utilizza String.Format metodo per passare i parametri da visualizzare sulla stringa. Ecco come impostare il testo da mostrare in a TextView con il hello_world_name formato stringa dal strings.xml file. Questa stringa di formato include un identificatore di formato per il nome dell'utente:

// Ottieni la stringa di formato android.content.res.Resources res = context.getResources (); String helloFormatString = res.getString (R.string.hello_world_name); String userName = "Bob"; // Inserisci il nome nel formato string String helloWorldName = String.format (helloFormatString, userName); // Imposta il testo della textview TextView helloTextView; helloTextView = (TextView) findViewById (R.id.hello_world_textview); helloTextView.setText (helloWorldName);

Questo mostra il "Bonjour Bob!"stringa per un dispositivo Android con un'impostazione internazionale che include la lingua francese. Per tutti gli altri locali, "Hello Bob!" la stringa è mostrata.

2. Localizzazione di date e orari

Se le stringhe dell'applicazione sono già localizzate, la tua applicazione è già in buona forma. Tuttavia, potrebbe essere necessario mostrare date e orari all'utente in molti casi. Tali date e orari dovrebbero anche essere adattati alle impostazioni locali correnti del dispositivo. Fortunatamente, l'SDK di Android include classi che formattano date e ore in base alle impostazioni locali.

Nell'SDK di Android, date e orari sono gestiti da Data classe dal java.util namespace. La data e l'ora correnti del dispositivo vengono restituite da java.util.Calendar.

Date di localizzazione

Le date possono essere formattate usando un'istanza di Formato data formatter dal java.text namespace. Devi usare il Formato data classe dall'SDK di Android nel android.text.format spazio dei nomi per ottenere il giusto formattatore per le impostazioni locali del dispositivo. Il seguente frammento di codice mostra come ottenere una stringa con la data corrente formattata per le impostazioni locali del dispositivo:

// Ottiene la data e l'ora correnti Date currentDate = Calendar.getInstance (). GetTime (); // Ottiene il formattatore della data standard per le impostazioni internazionali correnti // del dispositivo java.text.DateFormat dateFormat; dateFormat = android.text.format.DateFormat.getDateFormat (this); // Formatta la data corrente in base alla locale String formattedCurrentDate = dateFormat.format (currentDate);

Se la locale corrente del dispositivo è l'inglese parlato negli Stati Uniti, la stringa conterrà la data corrente in un formato di data breve, 2014/11/30. Il Formato data la lezione include alcuni altri formati di data. Ad esempio, il getLongDateFormat metodo restituisce un formato di data lunga, Domenica 30 novembre 2014.

Orari di localizzazione

Poiché i tempi sono rappresentati come Data oggetti da parte dell'SDK Android, devono anche essere visualizzati utilizzando un formattatore restituito da Formato data classe dal android.text.format namespace. Il getTimeFormat metodo restituisce un formato che mostra solo il tempo di a Data oggetto. Il seguente frammento di codice mostra come ottenere una stringa con l'ora corrente formattata per le impostazioni locali del dispositivo:

// Ottiene la data e l'ora correnti java.util.Date currentDate = Calendar.getInstance (). GetTime (); // Ottiene un formattatore della data per le impostazioni internazionali correnti del dispositivo // che mostra le volte. java.text.DateFormat timeFormat; timeFormat = android.text.format.DateFormat.getTimeFormat (this); // Formatta l'ora corrente in base alla locale String formattedTime = timeFormat.format (currentDate);

Se la locale corrente del dispositivo è l'inglese parlato negli Stati Uniti, la stringa conterrà l'ora corrente nel seguente formato, 20:15.

Conclusione

È importante solo localizzare le stringhe utilizzate nell'interfaccia utente dell'applicazione. Ad esempio, non è necessario localizzare i messaggi di debug che vengono utilizzati solo durante lo sviluppo o per scopi diagnostici. Si noti inoltre che non è necessario scrivere date e orari localizzati su disco o su un database. Non solo le impostazioni locali di un dispositivo possono cambiare, ma lavorare con date e orari localizzati rende lo sviluppo inutilmente difficile e complesso.