Intereting Posts
Получите и проанализируйте CSV-файл в android Как создать анимацию перемещения / изменения размера в Android? Квота создания проекта консоли Google Developers Пользовательское сворачивание панели инструментов сглаживает изменение размера Почему мое векторное масштабируемое масштабирование не ожидается? Лучший подход для oldschool 2D zelda-like game Должен ли я реализовать onRetainNonConfigurationInstance? Отключение ссылок WebView работает на эмуляторе, но нет на устройстве Как вводить зависимости в любой объект с помощью Dagger2? Блокировка кеша InteliJ Android с помощью drawables игнорирует изменения Удалите все фрагменты из ViewPager, заполненные FragmentStatePagerAdapter Удалить маркер из GoogleMap Неожиданная строка состояния: ICY 200 OK для метода URL openStream ()? Получить Spannable String из EditText Флейтовая интеграция с Android-приложением дает ошибку «Не удалось найти класс com.flurry.sdk.i», на который ссылается метод com.flurry.sdk.hu.a "

Переключение языка внутри приложения android

Как реализовать языковое переключение без необходимости вручную устанавливать локаль внутри приложения для Android? Я знаю, что приложение будет загружать strings.xml по языку во время запуска, но я не хочу, чтобы этот выбор выполнялся на основе локали системы, но вместо этого был указан в настройках.

Или вручную настраивает локаль?

Solutions Collecting From Web of "Переключение языка внутри приложения android"

Вы можете расширить класс Application (вы должны также объявить его в манифесте) и поместить в него что-то вроде этого.

Всякий раз, когда вы хотите изменить язык, вы можете позвонить

((App)getApplicationContext()).changeLang(lang); 

Из вашей деятельности. R.string.locale_lang – это всего лишь ключ, который хранится в strings.xml для общих настроек

 public class App extends Application { private Locale locale = null; @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (locale != null) { Locale.setDefault(locale); Configuration config = new Configuration(newConfig); config.locale = locale; getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); } } @Override public void onCreate() { super.onCreate(); SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); String lang = settings.getString(getString(R.string.locale_lang), ""); changeLang(lang); } public void changeLang(String lang) { Configuration config = getBaseContext().getResources().getConfiguration(); if (!"".equals(lang) && !config.locale.getLanguage().equals(lang)) { Editor ed = PreferenceManager.getDefaultSharedPreferences(this).edit(); ed.putString(getString(R.string.locale_lang), lang); ed.commit(); locale = new Locale(lang); Locale.setDefault(locale); Configuration conf = new Configuration(config); conf.locale = locale; getBaseContext().getResources().updateConfiguration(conf, getBaseContext().getResources().getDisplayMetrics()); } } public String getLang(){ return PreferenceManager.getDefaultSharedPreferences(this).getString(this.getString(R.string.locale_lang), ""); } }