在Android应用程序中禁用本地化

6

有没有办法在Android应用程序中禁用本地化?它必须只使用英语字符串。我们有带有法语本地化字符串的库项目。使用这些库的某些应用程序必须仅为英语,而其他一些则不是。

3个回答

15

2019 - 基于Gradle的方法

正如Nidhin他们的回答中指出的那样,现在比2012年更容易且较少出错。 在你的build.gradle文件中的android部分的defaultConfig节中,可以将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());

这个可以工作,但我认为 https://dev59.com/tGTWa4cB1Zd3GeqPH-ur#54302531 是在整个应用程序中正确执行的方法。 - HBB20
@HBB20 看起来这是一种更简单(且不易出错)的方法,适用于现代 Gradle 构建系统。在问题被提出并我写下这个答案时,Android 还没有转向 Gradle(我和其他一些人直接在命令行上使用 ant;许多人使用 Eclipse),而且我认为还没有可行的基于构建系统的方法。感谢您的评论引起了注意!我会点赞那个答案,并在此处注明基于 Gradle 的方法。 - Darshan Rivka Whittle
感谢您更新答案... :) - HBB20

9
在build.gradle文件中添加特定的资源配置。
 defaultConfig {

          resConfigs "en"
}

这个修复方案非常适合我的需求!如此优雅。谢谢! - Gary McGowan

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());

我已经尝试在应用程序和活动的onCreate()方法中调用Locale.setDefault(Locale.US) - 但仍然显示法语字符串。 - user1031477
应用程序的onCreate对我有效。你使用的是哪个版本的Android?ICS大大改进了整个语言环境业务,如果你运行的是较低版本,它可能会有所不同。 - Geert Weening
我忘了提到你还需要更新配置,就像Darshan提到的那样。我已经将它添加到我的答案中。 - Geert Weening

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接