神刀安全网

iOS本地化(swift)

iOS本地化(swift)

参考:
【iOS】浅谈多语言本地化(国际化)
3分钟实现iOS语言本地化/国际化(图文详解)
What’s NSLocalizedString equivalent in Swift?
Ask

示例代码在github上localizationsDemo

1 项目中需要配置的语言

这就是项目中其他不同形式本地化可以添加的语种设置。

  • 如下图为项目添加不同语种
iOS本地化(swift)

  • 弹框中显示要为两个Storyboard文件添加语种信息
iOS本地化(swift)

  • 添加完多语种后,相关需要本地化的文件会产生一组文件
iOS本地化(swift)

实际在目录结构中是根据不同语言生成不同的*.lproj目录,再在*.lproj目录中生成了不同的.strings文件。

iOS本地化(swift)

2 应用名称本地化

App的名称在不同语种下显示不同。

  • 新建一个.strings文件,名为InfoPlist.strings
iOS本地化(swift)

  • 选中InfoPlist.strings,在右侧的文件检查器中点击Localize,在弹框中可以选择语种,对应项目中需要配置的语言中配置的语种。
iOS本地化(swift)

可选中需要本地化的应用名称的语种:

iOS本地化(swift)

  • InfoPlist.strings的不同语种文件中添加字段CFBundleDisplayName,表示应用的名称。
    CFBundleDisplayName = "简体中文名称";
iOS本地化(swift)

iOS本地化(swift)

在模拟器中,可通过Edit Scheme...编辑语种:

iOS本地化(swift)

3 代码中的字符串的本地化

类似应用名称本地化代码中的字符串的本地也是利用.strings文件存储翻译信息。然后再在代码中利用NSLocalizedString(翻译信息默认在Localizable.strings文件)或NSLocalizedString(_:tableName:bundle:value:comment:)(翻译信息在tableName对应的.strings文件)文件标注。

NSLocalizedString(_:tableName:bundle:value:comment:)这种方式可根据需要把翻译信息保存在自定义的文件中,在多人开发时可以很好的防止冲突。

  • 新建一个名为Localizable.strings.strings文件。
  • 类似InfoPlist.strings文件的配置方式,配置不同语种。
iOS本地化(swift)

  • 在代码中需要本地化的字符串修改为类似NSLocalizedString("labelName", comment: "Label")NSLocalizedString("labelName", tableName: "andy", bundle: Bundle.main, value: "", comment: "Label")
iOS本地化(swift)

4 图片的本地化

这边所说的图片的本地化就是指,同一个名称图片,在不同语种下显示不同图片。

  • 随意添加一张图片到项目,比如Swift_Logo.png
  • 选中上面的图片,在右侧的文件检查器中点击Localize,类似之前的做法,添加所需的不同语种。
iOS本地化(swift)

  • Finder中的不同语种的*.lproj目录中添加,相同名字但不同的图片
iOS本地化(swift)

  • 在代码中添加类似的代码: self.imageView.image = UIImage(named: NSLocalizedString("Swift_Logo", comment: ""))

最后的英文中的状态结果为:

iOS本地化(swift)

5 优化本地化代码书写方式

本地化时,NSLocalizedString("labelName", comment: "Label")NSLocalizedString("labelName", tableName: "andy", bundle: Bundle.main, value: "", comment: "Label")这两种方法代码写法有点繁琐,参考stackoverflow中一个问题What’s NSLocalizedString equivalent in Swift?
Ask的一个答案,扩展一下String

extension String {     var localized: String {         return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")     }          func localized(withComment:String) -> String {         return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: withComment)     }          func localized(tableName: String) -> String{         return NSLocalizedString(self, tableName: tableName, bundle: Bundle.main, value: "", comment: "")     } } 

然后,原本下面的写法:

        self.label.text = NSLocalizedString("labelName", comment: "Label")         self.label2.text = NSLocalizedString("labelName", tableName: "andy", bundle: Bundle.main, value: "", comment: "Label")         self.imageView.image = UIImage(named: NSLocalizedString("Swift_Logo", comment: "")) 

就可以写成:

        self.label.text = "labelName".localized         self.label2.text = "labelName".localized(tableName: "andy")         self.imageView.image = UIImage(named: "Swift_Logo".localized) 

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » iOS本地化(swift)

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址