Программная смена языка

Интерфейс, диалоги, темы, стили, меню
Ответить
StrauS
Сообщения: 10
Зарегистрирован: 06 апр 2014, 18:42

Программная смена языка

Сообщение StrauS » 06 окт 2015, 21:14

Здравствуйте, хочу реализовать программную смену языка (в независимости от настроек локализации), имеются переведенные файлы строковых ресурсов. В методе onOptionsItemSelected(MenuItem item) пишу следующее:

Код: Выделить всё

if (id == R.id.language_ru) {
            item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                public boolean onMenuItemClick(MenuItem item) {
                    
                }
            });
Подскажите пожалуйста что внутри слушателя написать для смены языка, скажем, на русский
id == R.id.language_ru - id пункта меню.

П.С. Читал эту статью http://habrahabr.ru/post/125812/ но что-то не могу понять как у себя это реализовать.
Изображение

ANdriy123456
Сообщения: 138
Зарегистрирован: 27 июн 2014, 01:41

Re: Программная смена языка

Сообщение ANdriy123456 » 06 окт 2015, 21:48

Configuration config = new Configuration();
config.locale = new Locale("ru","RU");
getResources().updateConfiguration(config, null);

StrauS
Сообщения: 10
Зарегистрирован: 06 апр 2014, 18:42

Re: Программная смена языка

Сообщение StrauS » 06 окт 2015, 22:12

ANdriy123456 писал(а):Configuration config = new Configuration();
config.locale = new Locale("ru","RU");
getResources().updateConfiguration(config, null);
Попробовал, оно мне еще попросило что-то возвратить, добавил
retrun true;

Пока при выборе пункта меню ничего не меняется, может что-то другое надо возвращать?
Изображение

ANdriy123456
Сообщения: 138
Зарегистрирован: 27 июн 2014, 01:41

Re: Программная смена языка

Сообщение ANdriy123456 » 06 окт 2015, 23:19

а какой у вас язык до смены?

польский
config.locale = new Locale("pl","PL");

английский
config.locale = new Locale("en","EN");

у вас есть переводы для нужного вам языка?

StrauS
Сообщения: 10
Зарегистрирован: 06 апр 2014, 18:42

Re: Программная смена языка

Сообщение StrauS » 07 окт 2015, 12:40

ANdriy123456 писал(а):а какой у вас язык до смены?

польский
config.locale = new Locale("pl","PL");

английский
config.locale = new Locale("en","EN");

у вас есть переводы для нужного вам языка?
CСейчас язык зависит от локализации системы. По умолчанию файл strings.xml английский, хочу сделать чтобы программно можно было менять на другие языки, для начала на русский, есть values-ru/string.xml c переведенными строковыми ресурсами на русский.
Изображение


StrauS
Сообщения: 10
Зарегистрирован: 06 апр 2014, 18:42

Re: Программная смена языка

Сообщение StrauS » 08 окт 2015, 12:52

По первой ссылке пробовал

Код: Выделить всё

if (id == R.id.language_ru) {
            String lang = "ru";
            Locale locale = new Locale(lang);
            Locale.setDefault(locale);
            Configuration config = new Configuration();
            config.locale = locale;
            getBaseContext().getResources().updateConfiguration(config,
                    getBaseContext().getResources().getDisplayMetrics());
        }
ничего не происходит

Код: Выделить всё

if (id == R.id.language_ru) {
            config = new Configuration(getResources().getConfiguration());
            config.locale = Locale.GERMANY ;
            getResources().updateConfiguration(config,getResources().getDisplayMetrics());

            setContentView(R.layout.activity_main);
        }
Попробовал на немецкий, потому-что Locale.RUSSIAN выдавало ошибку, исчезают все строковые ресурсы

Код: Выделить всё

if (id == R.id.language_ru) {
            String languageToLoad  = "ru"; // your language
            Locale locale = new Locale(languageToLoad);
            Locale.setDefault(locale);
            Configuration config = new Configuration();
            config.locale = locale;
            getBaseContext().getResources().updateConfiguration(config,
                    getBaseContext().getResources().getDisplayMetrics());
            this.setContentView(R.layout.activity_main);
        }
так же исчезает весь текст

а по второй ссылке немного не подходит, потому-что там всего лишь несколько вьюшек и он каждую отдельно подгружает
private void updateTexts()

Код: Выделить всё

{
 txt_hello.setText(R.string.hello_world);
 btn_en.setText(R.string.btn_en);
 btn_ru.setText(R.string.btn_ru);
 btn_fr.setText(R.string.btn_fr);
 btn_de.setText(R.string.btn_de);
}
а мне нужно все приложение перевести.
Изображение

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Программная смена языка

Сообщение doter.ua » 08 окт 2015, 14:50

Используй БД вместо стрингс.хмл.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

StrauS
Сообщения: 10
Зарегистрирован: 06 апр 2014, 18:42

Re: Программная смена языка

Сообщение StrauS » 08 окт 2015, 15:02

doter.ua писал(а):Используй БД вместо стрингс.хмл.
с БД пока вообще не дружу)
Изображение

Ответить