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

如何识别默认strings.xml文件以匹配服务端JSON默认多语言消息?

解决方案

以下提供两种实现方式,优先推荐第一种资源标记法,准确性更高:


方案1:资源标记法(推荐)

无需判断系统语言,直接通过资源自带的标记识别当前加载的strings.xml类型:

  • 首先给每个语言的strings.xml新增专属标识字段:
    • 默认values/strings.xml中添加:
      <string name="current_xml_lang_tag">default</string>
    • values-en/strings.xml中添加:
      <string name="current_xml_lang_tag">en</string>
    • 其余ar、es、de、it、ru对应的strings.xml同理,分别填入对应语言代码即可。
  • 运行时直接读取标记,匹配服务端JSON即可,示例代码(Kotlin):
// 读取当前加载的strings.xml对应的标识
val currentLangTag = getString(R.string.current_xml_lang_tag)
// 假设服务端JSON已解析为对应实体类serverLangData
val langContent = serverLangData[0]
val showMessage = when(currentLangTag) {
    "default" -> langContent.default.Message
    "en" -> langContent.en.Message
    "ar" -> langContent.ar.Message
    "es" -> langContent.es.Message
    "de" -> langContent.de.Message
    "it" -> langContent.it.Message
    "ru" -> langContent.ru.Message
    // 异常情况兜底走默认文案
    else -> langContent.default.Message
}
// 直接使用showMessage展示即可

方案2:系统语言匹配法(无需修改资源文件)

通过当前系统生效的语言和你支持的语言列表做比对,判断是否加载默认资源:

  • 先获取当前App生效的语言代码,适配不同系统版本的示例代码:
val currentSysLang = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    resources.configuration.locales[0].language
} else {
    @Suppress("DEPRECATION")
    resources.configuration.locale.language
}
// 你已适配的非默认语言列表
val supportLangSet = setOf("en", "ar", "es", "de", "it", "ru")
val isLoadDefaultXml = currentSysLang !in supportLangSet
  • 匹配JSON逻辑和方案1一致,如果isLoadDefaultXml为true则取default字段的文案,否则取对应语言代码的字段即可。

注意:如果你的App支持手动切换语言(不跟随系统),只能使用方案1,方案2会受手动切语言逻辑的影响导致判断错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:24:07