5

有什么方法可以禁用 Android 应用程序中的本地化?它必须只使用英文字符串。我们有带有法语本地化字符串的库项目。一些使用这些库的应用程序必须只有英文版,有些则不是。

4

3 回答 3

13

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());
于 2012-06-14T00:14:50.327 回答
7

在 build.gradle 中添加具体的资源配置

 defaultConfig {

          resConfigs "en"
}
于 2019-01-22T06:36:56.910 回答
5

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());
于 2012-06-13T11:53:45.283 回答