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

时间:2017-05-26 09:54:34

标签: ios localization storyboard

我对iOS开发很陌生,我问自己是否有可能使用我的" Localizable.strings"直接进入故事板。 例如,在Android中,您可以从XML文件中执行此操作:

android:text="@string/notConnected"

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

那么是否可以只使用字符串文件并在故事板中使用我需要的内容?最好不要从代码中设置它?

编辑: 这几乎就是我想做的事情: referencing string in storyboard

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

5 个答案:

答案 0 :(得分:13)

我认为能够在故事板中本地化String具有显着的优势。我不同意@elk_cloner,因为每个IBOutlet挂起UILabel s是前进的方向。

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

class LocalisableLabel: UILabel {

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

}

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

enter image description here

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

enter image description here

那就是它!

修改

您可以以相同的方式本地化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()
            }
        }
    }

}

答案 1 :(得分:5)

根据您的要求,这是不可能的,但

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

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

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

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

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

    " THIS_IS_MY_STRING" ="这是我的字符串&#34 ;;

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

    编辑:

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

    ios-localization-tutorial

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

    " THIS_IS_MY_STRING" =" THIS_IS_MY_STRING"

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

答案 2 :(得分:2)

除了Leon's answer外,您还可以使用扩展名来摆脱对显式子类的需求:

<ion-card *ngFor="let item of menu">
  <img [src]="item.img" *ngIf="menu.length <= 6"/>
  <div class="card-title">{{item.text}}</div>
</ion-card>

答案 3 :(得分:2)

制作一个按钮类,并将 @IBInspectable 属性设置为按钮类

    class Button: UIButton {                 

      @IBInspectable public var referenceText: String = "" {
          didSet {
              self.setTitle(NSLocalizedString(referenceText, comment: ""), for: .normal)
          }
      }
}

然后在情节提要中可以设置referenceText enter image description here

按钮文字将为“登录”

答案 4 :(得分:0)

另一种可能的方法是定位情节提要板,并直接在.string文件上直接更改标签和按钮的值。

首先选择情节提要,然后单击本地化:

enter image description here

然后,您将能够选择所需的语言。

enter image description here

通过这种方式,您将能够继续使用自己选择的语言进行开发,并且只需编辑生成的.string文件