Вопрос по android – Android: изменение языка программно

2

У меня есть 3 кнопки, чтобы изменить язык. Поэтому мне нужно создать метод, где я мог бы установить для слушателей кнопки, которые могли бы менять язык при каждом нажатии. Я пробовал этоhttps://stackoverflow.com/a/2900144/1088229 но таким образом он изменяет локаль только один раз и кажется, что это больше не работает (если я нажимаю снова, он даже не отвечает). Итак, я добавилchangeLanguageListener() в конце слушателя, поэтому слушатель обновляется.

Так это нормально, как я это решил или есть другой способ?

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

Ваш Ответ

3   ответа
2
Resources res = context.getResources();
// Change locale settings in the app.

DisplayMetrics dm = res.getDisplayMetrics();

android.content.res.Configuration conf = res.getConfiguration();

conf.locale = new Locale(language_code.toLowerCase());
res.updateConfiguration(conf, dm);

базу на настройку. ## Заголовок ##

почему этот код копируется?stackoverflow.com/a/2900144/3736955
1

ыла бы кнопка, которая открывает настройки локали системы. Вы можете использовать следующее намерение для этого.

startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCALE, 0);

Для получения дополнительной информации о настройках локали: http://developer.android.com/reference/android/provider/Settings.html#ACTION_LOCALE_SETTINGS

@ChuongPham: ваш случай действительно является хорошим примером того, где изменения в приложении действительно полезны и необходимы. Но в общем случае я предпочитаю использовать систему для определения того, на каком языке должно быть приложение.
@Мох:"I would not recommend to change the language within your application" Почему бы и нет? Во многих случаях приложение может изменить язык, чтобы помочь конечному пользователю. Например, приложение для оказания первой помощи, показывающее язык, на котором говорит турист, чтобы позволить им понимать инструкции фельдшера во время лечения травм на чужбине.
Основная причина программного изменения местоположения заключается в том, что в языковых пакетах нет нужного мне языка. Например, в моем телефоне есть языковой пакет для стран Балтии, поэтому в нем много языков, в том числе литовский (мой), английский, но нет русского языка (который нам нужен и для приложения). Paulius Vindzigelskis
2

из-за только двух действий (два режима меню), где я позволяю изменить локаль, я просто перезапускаю Activity сразу после смены локали, поэтому все обновляется. Не нашел другого лучшего решения

Похожие вопросы