2012-06-03 10 views

Odpowiedz

9

Oto kod, który działa dla mnie, jeśli CMK jest tablicą String z bieżącej lokalizacji i CEN jest tablica ciągów z zaczepienia lokalizacji

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); 

Obecny locale nie ulega zmianie i o to chodziło.

+0

+1 kodu! –

+6

czy miałeś na myśli: "cENG = resources.getStringArray (R.array.cities);" ? – xVir

+2

Zmienia ustawienia regionalne dla kontekstu (na przykład dla Twojej aktywności) –

0

W Javie 7 (tak, nie android) Ustawienia regionalne mogą być ustawione inaczej dla zasobów i inna dla formatu ekranu:

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

Podobne wątek: Changing Locale within the app itself.

15

Lepszym rozwiązaniem byłoby (jeśli jesteś na 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

Świetna odpowiedź, dziękuję. Żałuję, że nie mogę tego zrobić ponownie i zaoszczędzić sobie trudu zmierzenia się z "AssetManager" – brandall

+0

Dzięki! Jest to również rozwiązanie zalecane przez Google: https://code.google.com/p/android/issues/detail?id=67672 – phreakhead

Powiązane problemy