2010-10-26 18 views
14

Sono consapevole della creazione di una nuova directory dei valori per la lingua con il suffisso del codice della lingua. Per tedesco: valori-de o francese: valori-fr quindi copia il nostro string.xml in quello e traduci ogni voce. E questo funziona in base alle impostazioni di localizzazione del telefonoSupporto multilingue personalizzato

Volevo sapere se è possibile ignorare l'impostazione del telefono e fare in modo che l'utente selezioni la lingua richiesta all'interno dell'app?

Il mio requisito è, voglio dare un'opzione di selezione della lingua all'interno della mia app e fare in modo che l'utente selezioni la lingua che desidera per l'app .. come passare dinamicamente tra string.xml (per lingue diverse) ?? ?

grazie in anticipo

+0

È possibile utilizzare il seguente biblioteca, che fornisce l'elenco delle lingue, la preferenza per la schermata delle impostazioni, e prevale la lingua nella vostra applicazione: https://github.com/delight-im/Android-Lingue – caw

risposta

5

controllare questo post ... E 'la stessa cosa in fondo.

Changing Locale within the app itself

Locale appLoc = new Locale("en"); 
Locale.setDefault(appLoc); 
Configuration appConfig = new Configuration(); 
appConfig.locale = appLoc; 
getBaseContext().getResources().updateConfiguration(appConfig, 
    getBaseContext().getResources().getDisplayMetrics()); 
11

Creare metodo che imposta i Locale.Lets di base dicono

public static void setDefaultLocale(Context context,String locale) { 
     Locale locJa = new Locale(locale); 
     Locale.setDefault(locJa); 

     Configuration config = new Configuration(); 
     config.locale = locJa; 

     context.getResources().updateConfiguration(config, context.getResources() 
       .getDisplayMetrics()); 

     locJa = null; 
     config = null; 
    } 

Ora verificare quando l'utente selezionato Locale. (Qui menù in fondo ho usato per la selezione della lingua).

Configuration config = new Configuration(); 
String newLocale = config.locale.getLanguage().substring(0, 2) 
    .toLowerCase(); 
if ("ja".equalsIgnoreCase(newLocale)) { 
// Call above method with context & newLocale 
} 
// Sequentially you check for Locale & change that. 
+0

Qualsiasi motivo per cui si imposta locJa e config su null alla fine di setDefaultLocale? Stanno per uscire comunque dal campo di applicazione ... –

+0

No, non c'è motivo di impostarli nulli. Il codice del metodo pubblicato qui è preso direttamente dalla mia applicazione, quindi li sto facendo perché non sono stati utilizzati ulteriormente nella mia applicazione. –

+1

+1 Roba buona per spiegare le cose – Naved

1

Se si desidera ottenere le immagini in base rispettive lingue, è necessario creare la cartella di layout di seguito come this.First prendo l'esempio per la localizzazione personalizzata.

Locale appLoc = new Locale("xx"); 
Locale.setDefault(appLoc); 
Configuration appConfig = new Configuration(); 
appConfig.locale = appLoc; 
getBaseContext().getResources().updateConfiguration(appConfig, 
    getBaseContext().getResources().getDisplayMetrics()); 

La cartella di layout dovrebbe essere il layout-xx e la cartella disegnabile dovrebbe anche essere drawable-xx.But una cosa che quando si cambia la lingua, è necessario aggiornare la layout.I utilizzato nella mia app, prendere un pulsante e impostare l'immagine di sfondo. Ma a volte le immagini non vengono cambiate, così ho fatto in questo modo.

btn.setBackgroundDrawable(null); 
btn.setBackgroundResource(R.drwable.yourimage); 
Problemi correlati