
android 通过资源限定符机制支持多语言,只需为不同语言创建对应 values-xx 文件夹并提供翻译后的 strings.xml,系统便会根据设备语言自动加载,无需修改 java 代码。
android 通过资源限定符机制支持多语言,只需为不同语言创建对应 values-xx 文件夹并提供翻译后的 strings.xml,系统便会根据设备语言自动加载,无需修改 java 代码。
在 Android 开发中,字符串本地化(Internationalization, i18n)是提升应用用户体验的关键环节。你当前的代码逻辑完全正确——使用 context.getString(R.string.xxx) 是标准且推荐的方式,它会自动根据设备当前系统语言查找匹配的字符串资源。但仅在 res/values/strings.xml 中设置 translatable="true" 并不能触发翻译;该属性仅用于标记该字符串允许被翻译工具识别和导出(如 Android Studio 的 Translation Editor 或外部翻译平台),本身不产生任何运行时效果。
真正的多语言支持依赖于 Android 的资源限定符(Configuration Qualifiers)机制。你需要为每种目标语言单独创建带语言代码后缀的资源目录,并在其中提供对应翻译:
✅ 正确操作步骤如下:
-
创建语言专属资源目录
在 app/src/main/res/ 下新建文件夹,命名格式为 values-<language-code>:- 德语 → values-de
- 法语 → values-fr
- 日语 → values-ja
- 简体中文 → values-zh-rCN(注意:r 表示 region,CN 为国家码)
-
在对应目录中添加 strings.xml
例如 res/values-de/strings.xml:<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Newsapp</string> <string name="see">sehen</string> <string name="news">Nachrichten</string> </resources>⚠️ 注意:<string> 标签内无需重复声明 translatable="true"(它仅在默认 values/ 中用于翻译管理);也不必复制未修改的字符串(如 app_name),Android 会自动回退到 values/strings.xml 中的定义。
-
Java/Kotlin 代码保持简洁原样
你现有的调用方式已是最佳实践:String see = context.getString(R.string.see).toLowerCase(Locale.ROOT); String news = context.getString(R.string.news).toLowerCase(Locale.ROOT); String str = see + " " + news; Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
系统会在运行时自动选择 values-de/strings.xml(若设备语言为德语)或 values/strings.xml(若无匹配语言资源),开发者无需手动判断语言或切换资源。
? 验证技巧:
- 在模拟器或真机中进入 Settings → System → Languages & input → Languages,将首选语言设为“Deutsch”,重启 App 即可看到 Toast 显示 sehen nachrichten;
- 使用 Android Studio 的 Design → Language dropdown 可在布局预览中实时切换查看不同语言效果。
? 进阶提示:
- 对含占位符的字符串(如 <string name="welcome">Hello %s!</string>),务必在所有语言版本中保持相同格式与参数顺序;
- 使用 Locale.getDefault().getLanguage() 仅作调试参考,切勿用于手动资源选择——这会绕过 Android 资源框架,导致配置变更(如横竖屏、深色模式)时无法自动更新;
- 推荐启用 tools:ignore="MissingTranslation" 避免未翻译字符串的 Lint 警告(需配合 translatable="false" 用于不需翻译的字符串,如内部标识符)。
只要结构规范、资源路径准确,Android 将无缝完成语言适配——你的 Toast,本就该说用户听得懂的话。


















