更改特定风格的应用程序的默认语言

Changing app's default language for a specific flavor

我正在寻找一种方法来 "swap" 默认语言和已由主项目中的 string.xml 文件定义的辅助语言。这应该只会影响特定的口味。

示例情况:某个应用的风格与所有其他风格针对不同的区域,其中默认语言对用户不再有意义。

注意:从主项目复制粘贴字符串文件不是解决方案。

也许你可以试试

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.
}

取自here

基于 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());
         }
     }
 }

请注意,主项目中的默认语言是德语,此交换使默认风味语言为英语,除非设备是德语。

使用这种方法,可能需要重新启动应用才能在更改设备语言后显示更改。

在风味文件夹中使用指向不同语言的符号链接

我就是这样做的,假设你有:

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

main/values 下您有默认语言(假设是英语),在_main/values-es_ 下是它的西班牙语翻译。现在您希望您的一种风格默认为西班牙语而不是英语,即使用户 select 美国或英国语言环境:

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

所以我在flavor中引入了一个符号linkstrings.xml来指向西班牙语翻译,覆盖下的默认文件值.

Symlink 是使用如下命令创建的:

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