2016-07-01 3 views
2

Могу ли я изменить весь текст в своем приложении на другой текст, когда я нажму кнопку или, возможно, выберем пункт меню?Как изменить весь текст во всех моих действиях (текст кнопки, текстовое изображение и т. Д.) С событием клика?

То, что я на самом деле пытаюсь сделать, - это сделать мое приложение для перевода на несколько неязыковых языков («non-iso» означает, что я не смог найти их в списке ISO-639 wiki).

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

У меня есть вся английская кнопка и текстовый текст в файле strings.xml, и я могу создать strings-xx.xml для новых языков.

Я буду использовать подменю с перечисленными языковыми параметрами. Таким образом, изменение текста будет отвечать на событие onclick в этом меню. Любые указатели будут очень желанными.

+1

соответствующей информации здесь: http://stackoverflow.com/questions/2900023/change-language-programmatically-in- android –

ответ

2

Взято из: How to change language of app when user selects language?

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); 
    Intent refresh = new Intent(this, YOURACTIVITY.class); 
    startActivity(refresh); 
    finish(); 
} 

Вы Cann передать любую допустимую строку языка для метода Setlocale, как «де» или «это», но вы должны перезапустить активность.

Я не знаю, как ваше приложение будет вести себя, если вы нажмете кнопку «Назад». Если он начинает свою «старую» активность попробовать это время перезагружать активность:

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); 
    Intent refresh = new Intent(this, YOURACTIVITY.class); 
    refresh.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
    startActivity(refresh); 

}

+0

большое спасибо за ваш ответ. Извинения за задержку ответа. Скончался очень дорогой любимый. Хорошо, поэтому я применил ваше решение, и оно работает хорошо. У меня также есть метод loadLocale(), который я вызываю в onCreate моей активности запуска. единственная проблема, с которой я сталкиваюсь, заключается в том, что когда я закрываю приложение и снова его открываю, я получаю пустой экран. Я обнаружил, что когда я комментирую метод loadLocale, приложение загружается нормально, локали меняются нормально, но настройки локали не сохраняются. Ниже приведен метод loadLocale(). changeLanguage() в последней строке, как и ваш метод setLocale(), выше. – GeorgeF

+0

'public void loadLocale() { Строка langPref =" Язык "; SharedPreferences prefs = getSharedPreferences ("com.georgey.multilanguageapp.PREFERENCES", Context.MODE_PRIVATE); Строковый язык = prefs.getString (langPref, ""); changeLanguage (язык); } ' – GeorgeF