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
相关产品推荐
相关产品推荐

