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
许可协议 原创文章,如需转载请注明文章作者和出处。谢谢!