故事板中的标签没有采用正确的本地化值

Put*_*tte 6 xcode localization storyboard ios swift

我已经构建了一个应用程序,现在是时候将它翻译成不同的语言了。但是我认为我已经本地化的一些标签不会以具有不同值的不同语言显示。

图一:所以首先,我在里面添加了瑞典语

“项目 -> 本地化”

图像1

比我进入“LaunchScreen.storyboard”并编辑文件。这个: 图像2

编辑为: 第二

在那之后,我确保我的启动屏幕支持这样的语言: 这个

对于最后一步..我将应用程序语言编辑为瑞典语,如下所示: 在此处输入图片说明


但是当我在模拟器上运行它时,文本没有被翻译。它仍然保持相同的文本,我不知道如何解决它。你?不要犹豫,帮助我,我真的很感激!

因此,我不确定是否必须添加一些代码或其他任何内容才能使其正常工作,但我遵循了指南,但他们没有。这就是我如此困惑的原因之一。并提前致谢!

不喜欢之前:至少给我一个理由,以便我将来改进它!

den*_*lor 7

由于故事板元素 id 发生变化,并且它们无法在本地化的“键值”对中用作“键”,因此在本地化故事板 (UI) 元素时,一个更好的解决方案可能是提供User Define Attribute定义为Locale Key用于该的自定义UIView.

然后您可以在您Storyboard Attribute Inspector的特定 UI 视图中定义一个输入字段,该字段将填充localized key您的Localizable.strings文件中定义的内容(一个用于英语的将用于瑞典语,两者应该具有相同的键但具有不同的值 - 在英语中将在价值观上有英文翻译,而在瑞典语中则相反。

1)例如,因为您想要本地化一个 UI 视图,而UILabel不是您可以在一个 swift 文件中Localizable.swift使用它(代码使之成为可能:

import UIKit

// MARK: Localizable
public protocol Localizable {
    var localized: String { get }
}

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

// MARK: XIBLocalizable
public protocol XIBLocalizable {
    var localeKey: String? { get set }
}

extension UILabel: XIBLocalizable {
    @IBInspectable public var localeKey: String? {
        get { return nil }
        set(key) {
            text = key?.localized
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

2)您可以uncheck your storyboard translations这样您最终将拥有 1 个故事板,而无需将故事板复制到多个翻译版本中。

3)您现在可以创建一个Localizable.strings包含您的键和翻译的localize文件以及该文件以进行翻译(就像您对故事板所做的那样,但不是将故事板本地化为多个翻译版本,而是本地化 Localizable.strings 文件(所以你会看到两个文件后,您本地化,在两种语言,一个将被调用Localizable.strings (English),另Localizable.strings (Swedish)

Localizable.strings (English)例如,您可能看起来像这样:

"main_page_title_label" = "Main Page Title in English";
Run Code Online (Sandbox Code Playgroud)

Localizable.strings (Swedish)例如,您可能看起来像这样:

"main_page_title_label" = "Huvudsida Titel på engelska";
Run Code Online (Sandbox Code Playgroud)

4)现在转到LaunchScreen.storyboard您应该拥有的un-localized版本,因此您只有一个版本,而不是示例图片中的两个版本(英语,瑞典语)。查找您要本地化的 UILabel,然后Attribute Inspector您将看到一个名为Locale Keyhere的新输入字段,您可以将其作为值输入main_page_title_label。现在您刚刚在故事板中本地化了一个 UILabel。 在此处输入图片说明

5)要从模拟器测试它,您必须更改语言,Edit Scheme > Run > Options > Application Language保存后您现在可以在模拟器中运行该应用程序,它将模拟您的模拟器操作系统系统将设置为瑞典语,因此标签设置为该键将显示该键的瑞典语值。 在此处输入图片说明

支持更多的 UI 视图(UIButton、UITextField、UISearchBar..)

如果您希望能够本地化更多 UI 视图,而不仅仅是类型的 UI 视图,UILabel那么您可以为Localizable.swift文件添加更多支持。

如果您还希望能够本地化 Button 类型的 UI 视图,您可以将其添加Localizable.swift

extension UIButton: XIBLocalizable {
    @IBInspectable public var localeKey: String? {
        get { return nil }
        set(key) {
            setTitle(key?.localized, for: .normal)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

要支持故事板UITextFieldUISearchBar占位符文本中的本地化,请将其添加到您的Localizable.swift

// MARK: Special protocol to localizaze UI's placeholder
public protocol UIPlaceholderXIBLocalizable {
    var localePlaceholderKey: String? { get set }
}

extension UITextField: UIPlaceholderXIBLocalizable {

    @IBInspectable public var localePlaceholderKey: String? {
        get { return nil }
        set(key) {
            placeholder = key?.localized
        }
    }

}

extension UISearchBar: UIPlaceholderXIBLocalizable {

    @IBInspectable public var localePlaceholderKey: String? {
        get { return nil }
        set(key) {
            placeholder = key?.localized
        }
    }

}
Run Code Online (Sandbox Code Playgroud)