更改特定风格的应用程序的默认语言
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
我正在寻找一种方法来 "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