IOS静态tableview单元格无法本地化

时间:2018-03-15 20:38:25

标签: ios swift uitableview

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

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

  • Main.Storyboard(base)
  • Main.Strings(FR)

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

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

Example

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

修正:

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

1 个答案:

答案 0 :(得分: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,这是简单的故事板本地化无法实现的。