ios - 本地化字符串

标签 ios string swift localization

所以我正在使用我在 SO 上找到的 NSString 扩展来本地化一个项目。该扩展看起来像这样:

extension String {
    var localized: String {
        return NSLocalizedString(self, tableName: nil, bundle: NSBundle.mainBundle(), value: "", comment: "")
    }
}

但是,我在 Localized.strings 列表中遇到了包含参数的字符串。例如:

"explore_item_desc1" = "Welcome to rent my %1$s!";

在我能够做到这一点之前:

uiLabel.text = "localizedString".localized

如何对那些保存参数的字符串执行类似的操作?

最佳答案

您的本地化 key 应如下所示:

"localized_key_name1" = "foo";

"localized_key_name2" = "%@ foo %@";

将您的本地化变量改为函数

extension String {
     var localized: String {
         return NSLocalizedString(self, tableName: nil, bundle: NSBundle.mainBundle(), value: "", comment: "")
     }
     func localized(args : CVarArgType...) -> String {
         return withVaList(args, { (f:CVaListPointer) -> String in
        (NSString.init(format:NSLocalizedString(self, comment:""), arguments: f) as String)
     })
  }
}

不带参数的用法

uiLabel.text = "localized_key_name1".localized   // "foo"

与参数一起使用

uiLabel.text = "localized_key_name2".localized("param1", "param2")   // "param1 foo param2"

credit

关于ios - 本地化字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37128557/

相关文章:

javascript - 使用 split/join 将字符串替换为数组

Swift、接口(interface)和抽象类

swift - NSCountedSet 泛型函数

iphone - Objective-C - SecItemAdd 有错误 :EXC_BAD_ACCESS (first time) and errSecDuplicateItem (second time)

ios - CLLocation altitude 属性在飞行中的有效性

itoa() 的 C++ 标准替代方法,用于将 int 转换为 base 10 char*

C++ 字符串替换不能按预期工作

ios - Swift 异步图像加载器

ios - 从浏览器加载回 iOS 应用程序时,进度指示器无法停止动画

ios - 验证 iCloud 容器上的文档是否存在