一、什么是本地化(Localization)
本地化(Localization) 是指让应用程序能够根据用户的语言和地区自动显示相应的内容。
例如:
- 中文用户看到「登录」
- 英文用户看到「Login」
- 日语用户看到「ログイン」
在 Swift / iOS 开发中,本地化字符串通常通过 NSLocalizedString 实现。
二、NSLocalizedString 的基本用法
最基础的语法如下:
NSLocalizedString("Login", comment: "登录按钮标题")"Login"是字符串键(key)"登录按钮标题"是注释(供翻译人员理解使用,不会显示在界面上)
系统会自动根据当前语言环境,在对应的 .strings 文件中查找该 key 的翻译。
三、创建 Localizable.strings 文件
在 Xcode 中选择:
File → New → File → Strings File- 命名为 Localizable.strings
- 选中文件 → 在右侧的 File Inspector 中点击 Localize...
选择要支持的语言,例如:
- English
- Chinese (Simplified)
- Japanese
这样 Xcode 会自动为每种语言生成一个对应目录:
en.lproj/Localizable.strings
zh-Hans.lproj/Localizable.strings
ja.lproj/Localizable.strings四、在 .strings 文件中添加内容
示例:
英文版 (en.lproj/Localizable.strings)
"Login" = "Login";
"Email" = "Email";
"Password" = "Password";中文版 (zh-Hans.lproj/Localizable.strings)
"Login" = "登录";
"Email" = "邮箱";
"Password" = "密码";日文版 (ja.lproj/Localizable.strings)
"Login" = "ログイン";
"Email" = "メール";
"Password" = "パスワード";五、在 Swift 中使用本地化字符串
直接调用:
Text(NSLocalizedString("Login", comment: "登录按钮标题"))或者用在控制器里:
title = NSLocalizedString("Settings", comment: "设置页标题")六、优化写法:字符串扩展(推荐 ✅)
在项目中频繁使用 NSLocalizedString 会显得冗长,
我们可以通过 String 扩展 提供更简洁的写法:
extension String {
/// 快速返回本地化后的字符串
var LocalizedStr: String {
return NSLocalizedString(self, comment: "")
}
}使用方式更优雅:
Text("Login".LocalizedStr)
TextField("Email".LocalizedStr, text: $email)✨ 优点:
- 代码更简洁
- 可读性更高
- 不需要重复填写注释参数
七、带格式的本地化字符串
有时我们需要插入变量,例如:
let name = "小明"
Text(String(format: NSLocalizedString("Hello, %@!", comment: "问候语"), name)).strings 文件中对应:
"Hello, %@!" = "你好,%@!";这样不同语言都能保持正确语法结构。
八、支持动态语言切换(可选进阶)
如果希望用户能在 App 内切换语言(不依赖系统设置),
可以使用第三方库(如 Localize-Swift)或自定义本地化管理器。
例如:
Localize.setCurrentLanguage("zh-Hans")然后重新刷新视图即可。
九、常见问题总结
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 翻译没显示 | 没有在对应 .lproj 文件添加 key | 检查字符串文件是否同步 |
| 中文正常,英文不显示 | 没设置英文语言资源 | 在 Localizable.strings(en) 中补充内容 |
| 注释出现在界面上 | 写错了参数位置 | 确保 comment 不在显示文本位置 |
| 新增语言没生效 | 没勾选 Localize 文件 | 右键 Localizable.strings → Localize... |
🔚 十、总结
Swift 本地化流程图:
代码调用 → NSLocalizedString(key) → 查找系统语言目录 → 对应的 Localizable.strings → 返回翻译结果最佳实践:
- 所有用户可见文字均通过
NSLocalizedString处理; - 使用
.LocalizedStr扩展简化调用; - 为每个字符串添加清晰注释;
- 测试多语言切换场景,确保排版和长度兼容。