Изменение языка приложения по умолчанию для определенного варианта

Я ищу способ «заменить» язык по умолчанию на дополнительный язык, который уже определен файлами string.xml в основном проекте. Это должно повлиять только на конкретный вкус.

Пример ситуации: вариант приложения ориентирован на другой регион, чем все остальные варианты, где язык по умолчанию больше не имеет смысла для пользователей.

Примечание. Копирование и вставка строковых файлов из основного проекта не является решением.




Ответы (4)


может ты попробуешь

public void setLocale(String lang) { 
    myLocale = new Locale(lang); 
    Resources res = getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm);
    reloadUI(); // you may not need this, in my activity ui must be refreshed immediately so it has a function like this.
}

взять из здесь

person MTZ4    schedule 03.09.2015

Решение, которое я выбрал, основанное на решении MTZ4, вызывало это на onCreate() в синглтоне моего приложения:

 /**
  * Sets the locale to {@link Locale#ENGLISH}
  * if the device locale is not {@link Locale#GERMAN}.
  */
 public void setLocale() {
     if(BuildConfig.FLAVOR.equals("flavorWithSwapedLocale")) {
         Resources res = getResources();
         Configuration conf = res.getConfiguration();
         if (!conf.locale.equals(Locale.GERMAN)) {
             conf.locale = Locale.ENGLISH;
             res.updateConfiguration(conf, res.getDisplayMetrics());
         }
     }
 }

Обратите внимание, что язык по умолчанию в основном проекте — немецкий, эта замена делает язык по умолчанию английским, если только устройство не на немецком языке.

При таком подходе может потребоваться перезапуск приложения, чтобы изменения отобразились после смены языка устройства.

person Sebastian    schedule 09.10.2015

Вот как я это сделал, скажем, у вас есть:

main/
  res/
    values/
      strings.xml
    values-es/
      strings.xml

где в разделе main/values указан язык по умолчанию (допустим, английский), а в разделе_main/values-es_ его испанский перевод. Теперь вы хотите, чтобы один из ваших вариантов по умолчанию был испанским, а не английским, даже если пользователь выбирает локали США или Великобритании:

main/
  res/
    values/
      strings.xml
    values-es/
      strings.xml
a_flavor/
  res/
    values/
      strings.xml    // <-- this is a symbolic link

поэтому я добавил в вариант символическую ссылку strings.xml, указывающую на испанский перевод, перезаписав файл по умолчанию в разделе values.

Симлинк был создан с помощью команды вроде:

$ cd app/src/a_flavor/res/values
$ ln -s ../../../main/res/values-es/strings.xml strings.xml
person Alessio    schedule 28.06.2017

Используйте символические ссылки на разные языки в папках ароматов

person kreker    schedule 06.08.2016