【问题标题】:IOS Static tableview cell cannot be localizedIOS静态tableview单元格无法本地化
【发布时间】:2018-03-15 20:38:25
【问题描述】:

假设,故事板是Main.storyboard,我有一个TableViewController。我有一个包含 2 个部分的静态表视图,每个部分有 1 行。

我创建了本地化文件,所以我的项目结构如下所示:

  • Main.Storyboard(基础)
  • Main.Strings (FR)

Main.Strings 包含法语的所有本地化字符串。问题是,当我在 FR 中运行设备时,内容没有本地化。

这是我正在谈论的故事板的图像。 (您可以将label 替换为任何文本)。

Example

注意:它以前在 Xcode 8 和 Swift 3.0 中工作过。但是,一旦我使用 Swift 4.0 升级到 Xcode 9,它似乎就不起作用了。

固定:

  • Xcode 错误。开始了一个新的故事板,一切似乎都很完美......

【问题讨论】:

  • 其他所有内容都本地化了吗?
  • 是的。故事板中的所有其他内容都已本地化,除了那两个静态单元格。
  • Xcode 10 与 swift 4?
  • 抱歉,这是 Xcode 9 和 Swift 4。我的错!
  • 您可以使用“Localize_Swift”库进行本地化

标签: ios swift uitableview


【解决方案1】:

在我看来,本地化故事板文件很难维护。我建议将所有翻译放在一个 Localizable.strings 文件中,并在视图控制器中以编程方式设置本地化。

您可以使用以下扩展使事情变得更简单:

extension String {

    var localized: String {
        return NSLocalizedString(self, comment: "")
    }

}

如果您随后将翻译定义为全局常量,例如:

class Texts {

    class MyViewController {

        static let title = "My Title".localized
        static let editLabel = "Edit your text".localized
        static let editTextFieldPlaceholder = "Sample text".localized
        static let editButtonTitle = "Edit".localized

    }

}

您可以像这样简单地为视图控制器设置本地化:

override func viewDidLoad() {
    super.viewDidLoad()
    // Localization
    self.title = Texts.MyViewController.title
    self.editLabel.text = Texts.MyViewController.editLabel
    self.editTextField.placeholder = Texts.MyViewController.editTextFieldPlaceholder
    self.editButton.setTitle(Texts.MyViewController.editButtonTitle, for: .normal)
}

这样,您的本地化将变得更加结构化和可维护。此外,您无需在更改单个元素时重新翻译整个情节提要。你甚至可以localize plurals,这在简单的故事板本地化中是不可能的。

【讨论】:

  • 可维护?真的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
  • 1970-01-01
  • 1970-01-01
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多