在故事板中使用本地化字符串

Jam*_*GNT 10 localization storyboard ios

我对iOS开发很新,我问自己是否有可能将我的"Localizable.strings"文件中的本地化字符串直接用于故事板.例如,在Android中,您可以从XML文件中执行此操作:

android:text="@string/notConnected"
Run Code Online (Sandbox Code Playgroud)

我知道你可以制作故事板的本地化版本,但是拥有不同的字符串文件和不同的故事板对我来说看起来很难看.

那么有可能只有字符串文件并使用我需要的故事板吗?最好不要从代码中设置它?

编辑:这几乎是我想要做的: 在故事板中引用字符串

这可能吗?是否有合法的方式从Android中调用字符串?

Leo*_*eon 14

我认为能够String在故事板中本地化s具有显着的优势.我不同意@elk_cloner,IBOutlet因为每个人UILabel都是前进的道路.

让它工作的一种方法是在UILabel子类上使用@IBInspectable属性:

class LocalisableLabel: UILabel {

    @IBInspectable var localisedKey: String? {
        didSet {
            guard let key = localisedKey else { return }
            text = NSLocalizedString(key, comment: "")
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

在故事板中设置自定义类:

在此输入图像描述

在属性检查器中,将显示localisedKey字段,您只需在此处添加密钥即可.

在此输入图像描述

而已!

编辑:

您可以UIButton以相同的方式本地化,但如果故事板的标题字段中的文本与本地化的字符串(它将在其他语言中)不同,则标题的设置将具有动画效果.

要解决此问题,请将setTitle放在一个performWithoutAnimation块中:

class LocalisableButton: UIButton {

    @IBInspectable var localisedKey: String? {
        didSet {
            guard let key = localisedKey else { return }
            UIView.performWithoutAnimation {
                setTitle(key.localized, for: .normal)
                layoutIfNeeded()
            }
        }
    }

}
Run Code Online (Sandbox Code Playgroud)


elk*_*ner 5

根据你的要求,这是不可能的

您不需要不同的故事板进行本地化

假设您要本地化标签字符串.

  1. 使用绘制和出口并更改文本

mylabel.text = nsLocalizedString("THIS_IS_MY_STRING",nil);

当然,在你的本地化文件中会有一行.你必须有不同语言的不同文件.假设你有一个英文文件,必须有一行.

"THIS_IS_MY_STRING"="这是我的字符串";

编译应用程序时,该功能将使用映射来本地化您的应用程序.

编辑:

如果您想了解详细信息,请查看这些教程 internationalization-tutorial-for-ios-2014

ios-localization-tutorial

有一些在线脚本(例如localize.py)可以帮助您自动搜索所有代码并找出nslocalizedString函数并在localizableString文件中创建行.像这样.

"THIS_IS_MY_STRING"="THIS_IS_MY_STRING"

以后你只需要在那里写实际的字符串.:)

  • 好吧,我觉得它更好,但我会更好地记录自己,如果你编辑你的答案也说不可能我会接受它,谢谢你的时间和耐心 (2认同)

Joh*_*145 5

除了Leon的答案之外,您还可以通过使用扩展来摆脱对显式子类的需求:

extension UILabel {
    @IBInspectable var localizableText: String? {
        get { return text }
        set(value) { text = NSLocalizedString(value!, comment: "") }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 在此[帖子](https://medium.com/@mario.negro.martin/easy-xib-and-storyboard-localization-b2794c69c9db)中,您可以找到此方法的详细说明以及[示例]( https://github.com/emenegro/xib-localization)一些小部件。 (2认同)