Страница 1 из 1

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

Добавлено: 06 окт 2015, 21:14
StrauS
Здравствуйте, хочу реализовать программную смену языка (в независимости от настроек локализации), имеются переведенные файлы строковых ресурсов. В методе 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/ но что-то не могу понять как у себя это реализовать.

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

Добавлено: 06 окт 2015, 21:48
ANdriy123456
Configuration config = new Configuration();
config.locale = new Locale("ru","RU");
getResources().updateConfiguration(config, null);

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

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

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

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

Добавлено: 06 окт 2015, 23:19
ANdriy123456
а какой у вас язык до смены?

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

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

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

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

Добавлено: 07 окт 2015, 12:40
StrauS
ANdriy123456 писал(а):а какой у вас язык до смены?

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

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

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

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

Добавлено: 07 окт 2015, 14:32
ANdriy123456

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

Добавлено: 08 окт 2015, 12:52
StrauS
По первой ссылке пробовал

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

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);
}
а мне нужно все приложение перевести.

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

Добавлено: 08 окт 2015, 14:50
doter.ua
Используй БД вместо стрингс.хмл.

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

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