2012-06-03 17 views
7

Ho due impostazioni internazionali nella mia applicazione. Posso accedere alle risorse, ad esempio array di stringhe da impostazioni internazionali diverse senza modificare le impostazioni locali correnti? Intendo con la codifica non mi piace cambiarlo in Impostazioni.Posso accedere alle risorse da diverse versioni Android?

risposta

9

Ecco il codice che funziona per me se Cmk è String matrice da locale corrente e il CEN è array di stringhe da locale differente

cMK = getResources().getStringArray(R.array.cities); 

     Configuration confTmp =new Configuration(getResources().getConfiguration()); 

     confTmp.locale = new Locale("en"); 

     DisplayMetrics metrics = new DisplayMetrics(); 

     getWindowManager().getDefaultDisplay().getMetrics(metrics); 

     Resources resources = new Resources(getAssets(), metrics, confTmp); 

     /* get localized string */ 
     cENG = getResources().getStringArray(R.array.cities); 

locale corrente non viene modificato e questo era il punto.

+0

+1 per il codice! –

+6

intendevi: "cENG = resources.getStringArray (R.array.cities);" ? – xVir

+2

Modifica le impostazioni locali per il contesto (ad esempio per la tua attività) –

0

In Java 7 (e quindi non androide) Locale può essere impostato in modo diverso per le risorse di formato e diverso per una visualizzazione:

Locale.setDefault(DISPLAY, Locale.PL); 
Locale.setDefault(FORMAT, Locale.US); 

filetto simili: Changing Locale within the app itself.

15

La soluzione migliore sarebbe (se siete su API 17):

@NonNull 
protected String getEnglishString() { 
    Configuration configuration = getEnglishConfiguration(); 

    return getContext().createConfigurationContext(configuration).getResources().getString(message); 
} 

@NonNull 
private Configuration getEnglishConfiguration() { 
    Configuration configuration = new Configuration(getContext().getResources().getConfiguration()); 
    configuration.setLocale(new Locale("en")); 
    return configuration; 
} 
+0

Ottima risposta, grazie. Vorrei poter eseguire il backup di questo e risparmiare lo sforzo di fare scherzi con il 'AssetManager' – brandall

+0

Grazie! Questa è anche la soluzione consigliata da Google: https://code.google.com/p/android/issues/detail?id=67672 – phreakhead

Problemi correlati