我们知道iOS对于App本地化支持提供了较方便的接口,我们只需要在本地化支持文件中设置好各种语言对应的字符串就可以了,比如:
//英文 “NameString" = "Name"; //中文 "NameString" = "名称";
调用时使用:
let nameString = NSLocalizedString("NameString",comment:"")
但是对于本地化中包括可变内容的字符串该如何处理呢?
let content = "已存在 \(currentCount) 个备份(最多 \(MaxCount) 个备份)" showMessage(content)
如上,iOS本地化对于字符串嵌入语法是不支持的,你无法将其嵌入到本地化文件中去。
一个简单的方法是在本地化文件中对于可变内容的位置放入占位符,然后在运行时再加以处理:
//中文 "BackupInfoSectionFooterTitle" = "已存在 # 个备份(最多 # 个备份)"; //英文 "BackupInfoSectionFooterTitle" = "already has # backups(max # backups)";
然后写一个对应的小方法来搞定:
private func setBackupSectionFooterTitleFor(backupCount:Int){ let title = NSLocalizedString("BackupInfoSectionFooterTitle", comment: "") var titleCompents = title.split(separator: "#").map {String($0)} titleCompents.insert("\(backupCount)", at: 1) titleCompents.insert("\(MaxDBBackupCount)", at: 3) backupSection.footer?.title = titleCompents.joined() }
只需简单的用占位符分隔字符串数组,然后在相应位置插入可变内容即可,其实完全可以写出一个通用的方法来完成可变本地化的功能,这里本猫就不展开了,大家请自便。