Localiz-6ren">
gpt4 book ai didi

ios - Storyboard中的标签没有采用正确的本地化值

转载 作者:可可西里 更新时间:2023-11-01 01:07:29 30 4
gpt4 key购买 nike

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

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

"Project -> Localizations"

img1

然后我进入“LaunchScreen.storyboard”并编辑了文件。这个: img2

编辑为: second

之后我确保我的启动屏幕支持这样的语言: this

最后一步……我将应用程序语言编辑为瑞典语,如下所示: enter image description here


但是当我在模拟器上运行它时,文本没有得到翻译。它仍然是相同的文本,我不知道如何解决它。你?请随时帮助我,我将不胜感激!

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

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

最佳答案

由于 Storyboard 元素的 id 会发生变化,并且无法将它们用作本地化“键值”对中的“键”,所以在本地化 Storyboard (UI) 元素时,一个更好的解决方案是提供自定义 User Define属性 定义为要用于该 UIViewLocale Key

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

1) 例如,因为你想本地化一个 UI View 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
}
}
}

2) 您可以取消选中您的 Storyboard翻译,这样您最终将拥有 1 个 Storyboard,而无需将 Storyboard复制为多个翻译版本。

3) 您现在可以创建一个包含您的 key 和翻译的 Localizable.strings 文件,并本地化该文件以获得您的翻译(就像您对 Storyboard所做的那样) , 但不是将 Storyboard 本地化为多个翻译版本,而是本地化 Localizable.strings 文件(因此在用两种语言本地化后您会看到两个文件,一个名为 Localizable.strings (English) 和其他 Localizable.strings(瑞典语)

例如,您的 Localizable.strings(英文) 可能如下所示:

"main_page_title_label" = "Main Page Title in English";

例如,您的 Localizable.strings(瑞典语) 可能如下所示:

"main_page_title_label" = "Huvudsida Titel på engelska";

4) 现在转到您的LaunchScreen.storyboard,您应该对其进行未本地化,因此您只有一个版本,而不是示例图片中的两个版本(英语、瑞典语)。查找您要本地化的 UILabel,在 Attribute Inspector 下,您将看到一个名为 Locale Key 的新输入字段,您可以在此处输入值 main_page_title_label。现在您刚刚在 Storyboard中本地化了一个 UILabel。 enter image description here

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

支持更多 UI View (UIButton、UITextField、UISearchBar..)

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

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

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

要支持 Storyboard中 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
}
}

}

关于ios - Storyboard中的标签没有采用正确的本地化值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55062448/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com