2010-09-30 12 views
5

Mam ustawienie w mojej aplikacji, które pozwala użytkownikowi wybrać inną lokalizację (język), tj. Chinese, German, etc.Android: odzwierciedla zmiany języka interfejsu użytkownika w locie bez ponownego ładowania/restartowania aplikacji.

Co chcę zrobić, to gdy użytkownik wybierze opcję, natychmiast zaktualizuje układ za pomocą ciągów w aktualnie wybranym języku. Oczywiście chcę, aby zmiana języka była propagowana do WSZYSTKICH bieżących działań, bez ponownego ładowania aplikacji.

Znalazłem to (jeszcze próbowałem), ale zastanawiałem się, czy jest to czystszy sposób robienia tego.

http://www.tutorialforandroid.com/2009/01/force-localize-application-on-android.html

Gracias

+0

Witaj, Czy znalazłeś najlepszą praktykę? thx –

Odpowiedz

2

miałem również ten issue.I stosować poniższy kod, a następnie zmieniono język bez odświeżania aktywność

public void setLocale(String lang) { 

    myLocale = new Locale(lang); 
    Resources res = getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm); 
    onConfigurationChanged(conf); 
    /*Intent refresh = new Intent(this, AndroidLocalize.class); 
    startActivity(refresh);*/ 
} 
@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    // refresh your views here 
    lblLang.setText(R.string.langselection); 
    super.onConfigurationChanged(newConfig); 
} 

Mam nadzieję, że to pomoże .. .....

+1

Skopiowano z najczęściej komentowanej odpowiedzi na poniższy link. Nawet skomentowany kod. http://stackoverflow.com/questions/12908289/how-change-language-of-app-on-user-select-language –

0

Istnieje kilka kroków, które należy wykonać:

Po pierwsze, trzeba zmienić ustawienia regionalne od konfiguracji

Resources resources = context.getResources(); 

    Configuration configuration = resources.getConfiguration(); 
    configuration.locale = new Locale(language); 

    resources.updateConfiguration(configuration, resources.getDisplayMetrics()); 

drugie, jeśli chcesz, aby zmiany, aby zastosować bezpośrednio do układu, który jest widoczny, można zaktualizować widoki bezpośrednio albo po prostu zadzwonić aktywność .recreate(), aby ponownie uruchomić bieżącą czynność.

Musisz także kontynuować swoje zmiany, ponieważ po zamknięciu aplikacji przez użytkownika utracisz zmianę języka.

wyjaśniłem bardziej szczegółowe rozwiązanie na moim blogu Change Language Programmatically in Android

Zasadniczo, po prostu zadzwoń LocaleHelper.onCreate() na swojej klasie aplikacji i jeśli chcesz zmienić ustawienia regionalne na bieżąco można nazwać LocaleHelper.setLocale()

Powiązane problemy