iOS本地化(swift)
示例代码在github上localizationsDemo
1 项目中需要配置的语言
这就是项目中其他不同形式本地化可以添加的语种设置。
- 如下图为项目添加不同语种
- 弹框中显示要为两个Storyboard文件添加语种信息
- 添加完多语种后,相关需要本地化的文件会产生一组文件
实际在目录结构中是根据不同语言生成不同的*.lproj
目录,再在*.lproj
目录中生成了不同的.strings
文件。
2 应用名称本地化
App的名称在不同语种下显示不同。
- 新建一个
.strings
文件,名为InfoPlist.strings
。
- 选中
InfoPlist.strings
,在右侧的文件检查器中点击Localize,在弹框中可以选择语种,对应项目中需要配置的语言中配置的语种。
可选中需要本地化的应用名称的语种:
- 在
InfoPlist.strings
的不同语种文件中添加字段CFBundleDisplayName
,表示应用的名称。CFBundleDisplayName = "简体中文名称";
在模拟器中,可通过Edit Scheme...
编辑语种:
3 代码中的字符串的本地化
类似应用名称本地化,代码中的字符串的本地也是利用.strings
文件存储翻译信息。然后再在代码中利用NSLocalizedString
(翻译信息默认在Localizable.strings
文件)或NSLocalizedString(_:tableName:bundle:value:comment:)
(翻译信息在tableName
对应的.strings
文件)文件标注。
NSLocalizedString(_:tableName:bundle:value:comment:)
这种方式可根据需要把翻译信息保存在自定义的文件中,在多人开发时可以很好的防止冲突。
- 新建一个名为
Localizable.strings
的.strings
文件。 - 类似
InfoPlist.strings
文件的配置方式,配置不同语种。
- 在代码中需要本地化的字符串修改为类似
NSLocalizedString("labelName", comment: "Label")
或NSLocalizedString("labelName", tableName: "andy", bundle: Bundle.main, value: "", comment: "Label")
4 图片的本地化
这边所说的图片的本地化就是指,同一个名称图片,在不同语种下显示不同图片。
- 随意添加一张图片到项目,比如
Swift_Logo.png
- 选中上面的图片,在右侧的文件检查器中点击Localize,类似之前的做法,添加所需的不同语种。
- 在Finder中的不同语种的
*.lproj
目录中添加,相同名字但不同的图片
- 在代码中添加类似的代码:
self.imageView.image = UIImage(named: NSLocalizedString("Swift_Logo", comment: ""))
最后的英文中的状态结果为:
5 优化本地化代码书写方式
本地化时,NSLocalizedString("labelName", comment: "Label")
或NSLocalizedString("labelName", tableName: "andy", bundle: Bundle.main, value: "", comment: "Label")
这两种方法代码写法有点繁琐,参考stackoverflow中一个问题What’s NSLocalizedString equivalent in Swift?
Ask的一个答案,扩展一下String
:
|
|
然后,原本下面的写法:
就可以写成:
参考: 【iOS】浅谈多语言本地化(国际化) 3分钟实现iOS语言本地化/国际化(图文详解) What’s NSLocalizedString equivalent in Swift? Ask
文章作者 andyron
上次更新 2024-07-16
许可协议 原创文章,如需转载请注明文章作者和出处。谢谢!