У меня есть 3 кнопки для изменения языка. Поэтому мне нужно сделать метод, где я мог бы установить слушателей на кнопки, которые могут менять язык при каждом нажатии. Я пробовал это https://stackoverflow.com/a/2900144/1088229, но таким образом он меняет локаль только один раз и кажется, что это больше не работает (если я снова нажимаю, он даже не отвечает). Поэтому я добавил changeLanguageListener()
в конец слушателя, поэтому слушатель обновляется.Android: изменение языка программно
Так хорошо, как я решил это или есть другой способ?
private void changeLanguageListener() {
final Button butEn = (Button) findViewById(R.id.button_language_en);
final Button butLt = (Button) findViewById(R.id.button_language_lt);
final Button butRu = (Button) findViewById(R.id.button_language_ru);
OnClickListener listener = new OnClickListener() {
public void onClick(View v) {
Button but = (Button) v;
Resources res = getResources();
String current = res.getConfiguration().locale.getCountry();
Log.i("Current", current);
String localeString = new String(current);
if (but.equals(butEn)) {
localeString = "en";
} else if (but.equals(butLt)) {
localeString = "lt";
} else if (but.equals(butRu)) {
localeString = "ru";
}
Log.i("Clicked", localeString);
if (!current.equalsIgnoreCase(localeString) && localeString.length() > 0) {
// Change locale settings in the app.
DisplayMetrics dm = res.getDisplayMetrics();
android.content.res.Configuration conf = res.getConfiguration();
conf.locale = new Locale(localeString.toLowerCase());
res.updateConfiguration(conf, dm);
//refresh menu
setGridView();
//added this line to get refreshed listener
changeLanguageListener();
}
}
};
butEn.setOnClickListener(listener);
butLt.setOnClickListener(listener);
butRu.setOnClickListener(listener);
}
Основная причина изменения местоположения программно является то, что на языке там нет языка, который мне нужен. Например, мой телефон имеет балтийский языковой пакет, поэтому в нем много языков, в том числе литовский (мой), английский, но нет русского языка (который нам тоже нужен для приложения). –
@Moss: _ «Я бы не рекомендовал менять язык в вашем приложении» _ Почему нет? Существует много случаев, когда приложение может изменить язык, чтобы помочь конечному пользователю. Например, приложение первой помощи, в котором указывается язык, на котором говорит турист, позволяет им понять инструкции фельдшера, пока они обращаются за травмами на чужбине. – ChuongPham
@ChuongPham: ваш случай действительно очень хороший пример того, где изменения в приложении действительно полезны и требуются. Но в общем случае я предпочитаю использовать систему для обработки, на каком языке должно быть приложение. – Moss