我可以将uilabel链接到Interface Builder中的可本地化字符串吗?

Mat*_*ias 12 iphone localization interface-builder uilabel localizable.strings

谷歌搜索,但没有找到解决方案:

基本上,我有一个Localizable.strings设置,我在我的代码中使用.但是,如果我能以某种方式在我的XIB中引用这些值,那将是非常甜蜜的,这样我就可以避免每种语言创建一个烦人的XIB ...

这可能吗?

Cla*_*och 16

您可以实现UILabel的子类,并在从nib初始化时自动提取本地化值.在XIB中,您只需设置令牌(或英文文本,如果您愿意),并让UILabel从此值中提取本地化文本.


Ibr*_*rim 10

我向你展示了这种敏捷的方式

1.创建UILabel的子类

class LozalizedLabel : UILabel {

    @IBInspectable var keyValue: String {
        get {
            return self.text!
        }
        set(value) {
            self.text = NSLocalizedString(value, comment: "")

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

2.在IB中将类设置为LocalizedLabel

在此输入图像描述

3.直接在IB中输入Localizable.strings中的密钥

在此输入图像描述

现在,Voila花费更少的时间来创建无用的IBOutlets,只是为了使它成为可本地化的UILabel.

注意 这不会使本地化字符串显示在界面构建器中,而只是"键".因此,在构建TextView时,请记住相应地设置约束


rck*_*nes 5

没有办法Localizable.strings直接使用Interface Builder设置.

您可能想要翻译NIB的原因是因为每种语言的单词长度可能不同.因此允许您更改每种语言的笔尖布局.

你可以用你的viewDidLoad方法设置它们UIViewController.

- (void) viewDidLoad {
   [supper viewDidLoad];

   self.someLabel.text = NSLocalizedString(@"Some Label", @"Some label on some view.");
}
Run Code Online (Sandbox Code Playgroud)

  • 多数民众赞成我在做什么,只是想知道是否有更好的方法.不得不说Android dev env设置在这个部门领先.呃,好吧... (4认同)

Ola*_*laf 5

NSLocalizedString具有易于实现的优点.风险在于您可能忘记为新的Gui元素添加条目.

您可以使用itool从原始xib文件转储字符串,转换这些转储的字符串,然后将转换后的字符串加载到other-language-xib文件中.

与此相比,这样做有一些优势NSLocalizedString.

  • 翻译和字符串长度的所有考虑仍然适用,但您只需要触摸原始的xib,其他语言可以通过脚本更新.
  • 您可以看到已转换的元素以及转储文件中每个UIElement的不同可能状态.
  • 您将有更多单个字符串文件发送给您的翻译人员,但更容易概述哪些部分需要翻译,哪些部分已完成.
  • GUI对英语xib所做的更改将应用​​于本地化的xib,您基本上将原始xib与已翻译的字符串合并.

创建XIB时,将其设置为本地化(如前所述),然后itool针对此原始xib 运行以提取字符串.将字符串文件转换为所需的语言,然后将转换加载到本地化的xib中.

如果你谷歌,ibtool --generate-strings-file你应该找到一些教程和例子.

语法应类似于:

  #dump original xib to a $xibfile.strings file:
  ibtool --generate-strings-file Resources/English.lproj/$xibfile.strings Resources/English.lproj/$xibfile.xib
  # offline: translate the $xibfile.xib, place it into the correct lproj folder
  # then: merge translated $xibfile.strings with original xib to create localized xib
  ibtool --strings-file Resources/de.lproj/$xibfile.strings --write Resources/de.lproj/$xibfile.xib Resources/English.lproj/$xibfile.xib
Run Code Online (Sandbox Code Playgroud)

$xibfile.strings在Resources/English.lproj目录中将包含原始(英语)字符串.翻译 $xibfile.strings必须进入适当的xx.lproj目录.

如果将构建脚本添加到xcode,则将在每次构建时调用转换的加载.