SwiftUI 中拼接的“Every ”字符串无法正常本地化翻译问题求助
问题原因
SwiftUI 的 Text 组件仅在传入静态字符串字面量时会自动触发本地化查找逻辑,你当前的写法是先将 "Every " 和 repeatedDay.day 做运行时字符串拼接,再将拼接后的普通字符串传入 Text,因此不会触发本地化匹配。
解决方案
方案1:使用带参数的本地化词条(推荐)
这种写法适配不同语言的语序差异,兼容性更好:
- 修改
Localizable.strings配置,将固定词条改为带占位符的格式:
"Every %@" = "Every %@";
对应土耳其语的 Localizable.strings 中配置翻译:
"Every %@" = "Her %@";
- 调整代码中
Text的写法:
如果是 SwiftUI 3.0+ 版本,可以直接用本地化插值:
Text("Every \(repeatedDay.day)") .foregroundColor(Color(.label))
更低版本可以显式调用 NSLocalizedString 处理:
Text(String(format: NSLocalizedString("Every %@", comment: ""), repeatedDay.day)) .foregroundColor(Color(.label))
方案2:单独本地化固定字符串后拼接
如果你需要保留原有拼接逻辑,可以单独对 "Every " 做本地化处理后再拼接:
Text(NSLocalizedString("Every ", comment: "") + repeatedDay.day) .foregroundColor(Color(.label))
额外检查点
- 确认所有语言版本的
Localizable.strings都已经添加到App目标的Target Membership中 - 确认土耳其语对应的
Localizable.strings中已经配置了对应词条的翻译,而非仅在基础语言配置文件中保留原文字符串
内容的提问来源于stack exchange,提问作者Yasin Cengiz
相关产品推荐
相关产品推荐

