You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用本地化:如何仅读取英文strings.xml中的数据?

如何强制读取Android英文strings.xml中的数据

你可以通过创建指定Locale的Resources实例,绕过当前系统的语言设置,直接读取英文strings.xml中的资源,以下是可靠的实现方式:

方法:创建指定Locale的Resources对象(官方推荐)

利用系统资源管理机制,生成独立的英文资源上下文,不会影响全局语言配置:

Java 代码示例

// 获取当前应用的原始Resources
Resources originalRes = getResources();
// 复制当前配置,避免修改全局设置
Configuration config = new Configuration(originalRes.getConfiguration());

// 适配不同Android版本设置英文Locale
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    config.setLocales(new LocaleList(Locale.ENGLISH));
} else {
    config.setLocale(Locale.ENGLISH);
}

// 创建对应英文Locale的上下文与Resources
Context englishContext = createConfigurationContext(config);
Resources englishRes = englishContext.getResources();

// 读取英文strings.xml中的州、地区、分区数据
String state = englishRes.getString(R.string.state_name);
String district = englishRes.getString(R.string.district_name);
String subdivision = englishRes.getString(R.string.subdivision_name);

Kotlin 代码示例

val originalRes = resources
val config = Configuration(originalRes.configuration).apply {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        setLocales(LocaleList(Locale.ENGLISH))
    } else {
        locale = Locale.ENGLISH
    }
}

val englishRes = createConfigurationContext(config).resources

// 读取英文资源
val state = englishRes.getString(R.string.state_name)
val district = englishRes.getString(R.string.district_name)
val subdivision = englishRes.getString(R.string.subdivision_name)

关键注意点

  • 确保res/values-en/strings.xml文件存在,且包含所有需要读取的州、地区、分区对应的字符串键值对。
  • 必须复制全局配置后创建独立上下文,避免修改App全局语言显示。
  • Android 7.0(API 24)及以上版本需使用setLocales()替代已废弃的setLocale()方法。

内容的提问来源于stack exchange,提问作者TechBee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:09:20