2015-05-27 4 views
1

Я пытаюсь добавить языковой контроллер, что означает изменение языка моего приложения.Android - Изменить язык (язык)

Я добавил 4 флажка (ImageView), и всякий раз, когда я нажимаю флаг, который я хочу, я хочу, чтобы приложение меняло языковой depennding на этот флаг.

Main Menu

Приложения начинают быть на английском языке, и когда я нажимаю датский falg, язык НЕ переключиться на датском, но всякий раз, когда я хочу, чтобы вернуться на английском, ничего не происходит.

Я сделал несколько strings.xml файлов в отдельной папке значения

value-en/strings.xml 
value-dk/strings.xml 

Метод изменение язык:

english.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Locale locale = new Locale("en"); 
     Locale.setDefault(locale); 
     Configuration config = new Configuration(); 
     config.locale = locale; 
     getResources().updateConfiguration(config,getResources().getDisplayMetrics()); 
      setContentView(R.layout.activity_main); 
    } 
}); 

english мой переменный для ImageView

+0

Ваш код абсолютно правильно. В чем проблема, возникающая при запуске этого кода? ??? – user2477865

+0

Язык просто не меняется. Он остается Датским – Detilium

+0

Используйте «en_US» вместо «en» в локальном. –

ответ

1

Я нашел свое решение.

Для того, чтобы сохранить onClickListener() на моих других компонентов, мне нужно обновить свою деятельность, размещена ниже:

Чтобы возобновить деятельность

Я просто сделал метод, как показано ниже:

//Restarts the activity after changing the languagse 
private void RestartActivity(){ 
    Intent intent = getIntent(); 
    finish(); 
    startActivity(intent); 
} 

И каждый раз, когда я изменить язык, я бегу метод:

english.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Locale locale = new Locale("en"); 
     Locale.setDefault(locale); 
     Configuration config = new Configuration(); 
     config.locale = locale; 
     getResources().updateConfiguration(config,getResources().getDisplayMetrics()); 
     setContentView(R.layout.activity_main); 
     RestartActivity(); //Run the method as the last thing 
    } 
}); 

По какой-то причине слушатели не видят mto stay, но это решение работает для меня.

0

Я проверил ниже код и работает в соответствии с моим рассмотрением. Проверьте это, это поможет вам или нет. Вызовите этот метод на своем прослушивателе кликов и передайте строку locale в качестве параметра.

частная пустота setDeviceDefaultLanguage (String languageToLoad) {

Locale locale = new Locale(languageToLoad); 
    Locale.setDefault(locale); 
    Configuration config = new Configuration(); 
    config.locale = locale; 
    getResources().updateConfiguration(config, 
      getResources().getDisplayMetrics()); 
    Intent i = getBaseContext().getPackageManager() 
      .getLaunchIntentForPackage(getBaseContext().getPackageName()); 
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(i); 
} 
Смежные вопросы