【问题标题】:UILabel shows wrong Localized StringUILabel 显示错误的本地化字符串
【发布时间】:2017-07-31 13:41:36
【问题描述】:

我在通过 Localizable.stringdict 本地化字符串时遇到问题。我确实为不同大小的测试字符串设置了不同的本地化。请参阅 Localizable.stringdict:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Test</key>
    <dict>
        <key>NSStringVariableWidthRuleType</key>
        <dict>
            <key>20</key>
            <string>test</string>
            <key>25</key>
            <string>test message</string>
            <key>50</key>
            <string>This is a test message</string>
        </dict>
    </dict>
</dict>
</plist>

我的 ViewController 如下所示:

class ViewController: UIViewController {

    @IBOutlet weak var label: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        let string = NSLocalizedString("Test", comment: "This is a test message") as NSString
        let widthFormattedString = string.variantFittingPresentationWidth(50) as String

        print(widthFormattedString)
        label.text = widthFormattedString
    }

    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()

    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

我想将本地化字符串分配给标签。我的 ViewController 中的打印正在打印“这是一条测试消息”,但视图显示的是“测试消息”。我不会在其他任何地方更改标签的文本。所以我想知道为什么会显示错误消息。有人可以帮忙吗?

【问题讨论】:

  • Localizable.stringdict : 你说的是 localizable.strings 文件吗?
  • 不存在 localizable.stringdict 文件,您可以在其中为不同的大小指定不同的文本
  • 您已经声明'我的 ViewController 中的打印正在打印“这是一条测试消息”,但视图显示的是“测试消息”',但它只会打印“测试”键。
  • 不,它不仅仅是打印密钥。它正在使用 Localizable.stringdict 但它正在打印键 25 的值,而不是按要求打印 50。

标签: ios swift localization xcode9-beta


【解决方案1】:

根据documentation 在撰写此答案时指出:

注意

在为标准 UIKit 控件(例如 UILabel)设置用户可见文本时不要调用此方法。 UIKit 提供了对自适应字符串的内置支持,并根据下面描述的行为自动选择适合当前屏幕尺寸的字符串宽度变量。

这似乎证实了你的经历。

您自己打印的内容是正确的,因为它为您提供了您为值 50 请求的字符串:

我的 ViewController 中的打印正在打印“这是一条测试消息”

而 UILabel 通过 UIKit 标准机制获取字符串并显示为:

但视图显示“测试消息”

我的结论是,如果你使用 UIKit 控件,你不需要自己做。这可能对我不知道的自定义控件或其他用例有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多