Applicazioni Android ed il supporto multilingue

di  Antonio Coschignano, giovedě 06 gennaio 2011
Tradurre le nostre applicazioni android in diverse lingue ci consente di raggiungere naturalmente un numero di utenti maggiore rispetto alla sola lingua locale o magari limitandoci solo a quella inglese. Per sfruttare il supporto multilingue che la piattafroma android ci mette a disposizione bisogna semplicemente rispettare alcune regole, che ci consentono di aggiungere tutte le traduzioni che vogliamo senza particolari sforzi implementativi.

Come abbiamo visto nell'articolo Struttura di un'applicazione Android ogni stringa (ma anche array, e tanti altri tipi di dati) che utilizziamo all'interno dell'applicazione può essere dichiarata all'interno di una risorsa XML nella cartella res/values/ in un documento del tipo:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, ExampleActivity!</string>
    <string name="app_name">Example</string>
</resources>
dove questi valori possono essere facilmente richiamati all'interno di un'Activity nel modo seguente:
public class MyActivity extends Activity {
....
	String helloWorld = getString(R.values.hello);
....
}
La regola da rispettare è quella appunto di 'mappare' qualsiasi stringa - che compare nell'applicazione - all'interno delle risorse res/values. La cartella values identifica la lingua di default dell'applicazione. Quando un'applicazione viene avviata la piattaforma android individua la lingua con cui è impostato il dispositivo ed in base ad essa carica la cartella values-xx dove xx è il suffisso della lingua. Se ad esempio in un'applicazione abbiamo definito una serie di stringhe all'interno della risorsa res/values/string.xml e vogliamo avere il supporto per la lingua italiana, inglese e francese, basta tradurre le stringhe di questo file e inserirle rispettivamente nelle sottocartelle:
  • res/values/strings.xml: default (ad esempio inglese)
  • res/values-it/strings.xml: lingua italiana
  • res/values-fr/strings.xml: lingua francese
  • res/values-xx/strings.xml: la lingua corrispondente al suffisso xx
Se non viene individuata la sottocartella values-xx relativa alla lingua del dispositivo allora viene caricata la cartella di default values. Ecco come appare la struttura all'interno del progetto:

Esempio Android struttura cartella multilingua

Quindi con questo meccanismo possiamo aggiungere qualsiasi lingua senza scrivere una riga di codice ma solo traducendo ed aggiungendo al progetto i soli file xml. I suffissi per le rispettive lingue (language code) sono definiti nella ISO 639-1. Per la lista completa consultate la ISO 639-1 language matrix.

Altri link che potrebbero interessarti
  • » Struttura di un'applicazione Android
  • » Screenshot su un dispositivo Android
  • » Pubblicare applicazioni nell'Android Market
  • » Integrare Google Analytics nelle applicazioni Android
  • » Integrare AdMob nelle applicazioni Android
  • » Guida all'installazione dell'Android SDK
  • » Guida agli Adapter e le ListView in Android
  • » Gestire Thread e GUI nelle applicazioni Android
  • » Android VideoView e le Youtube Api
  • » Android Linkify e i collegamenti testuali
  • » Android HTML TextView
  • » Android e tecniche multithreading
  • » Android e la gestione dei sensori
  • » Android e l'interfaccia Parcelable