有什么方法可以禁用 Android 应用程序中的本地化?它必须只使用英文字符串。我们有带有法语本地化字符串的库项目。一些使用这些库的应用程序必须只有英文版,有些则不是。
3 回答
2019 - 基于 Gradle 的方法
正如Nidhin在他们的回答中指出的那样,现在这比 2012 年更容易且更不容易出错。在文件defaultConfig
部分的android
部分中build.gradle
,您可以设置resConfigs
为您支持的单一语言。例如:
android {
defaultConfig {
resConfigs "en"
}
}
这不仅仅是为了禁用本地化——resConfigs
只是告诉构建系统要保留哪些资源。它可以设置为一种语言,理想情况下可以设置为多种语言,它还可以用于按语言以外的其他方式过滤资源,例如屏幕密度。因此,说“仅包含英语资源”有效地强制应用程序始终使用该语言。
为特定语言加载资源的编程方式有时仍然很有用,因此仍然提供了我 2012 年的答案:
2012 - 程序化方法
在调用或任何其他加载特定于语言环境的资源之前执行以下setContentView()
操作应确保您始终仅加载英文字符串。
Resources res = getApplicationContext().getResources();
Locale locale = new Locale("en");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
res.updateConfiguration(config, res.getDisplayMetrics());
在 build.gradle 中添加具体的资源配置
defaultConfig {
resConfigs "en"
}
Android 的正常行为是仅在您支持给定语言时才定义它。对于法语,这将是 values-fr/strings.xml。如果您不想支持法语,请不要包含法语的 strings.xml,它将退回到 values 文件夹中的 strings.xml
http://developer.android.com/guide/topics/resources/localization.html
如果您无法控制提供的字符串,或者如果您想动态设置语言环境以支持您可以覆盖默认语言环境。
http://developer.android.com/reference/java/util/Locale.html#setDefault(java.util.Locale )
编辑
我忘了提到的是您必须使用新配置更新配置
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());