使用"用户定义的运行时属性"在故事板中本地化视图

Bes*_*esi 12 iphone localization interface-builder ios uistoryboard

我目前有一种半自动化的方式来本地化我的观点.然而,今天我在IB中发现了一个有趣的部分,这似乎表明我可以在Interface Builder中本地化我的视图.

因此,在IB中,您可以在Identity Inspector中为选定对象定义运行时属性.所以对于我,UILabel我可以将text标签的keypath 设置为String Hello World.

但是,当我选择Type = Localized String然后我的键中的名称时,Localized.strings我没有得到翻译的字符串,而只是我在IB中输入的值(因此是键).

我不明白,这种机制应该如何运作.我会到能够翻译我的看法是这样,任何想法?

Jos*_*lez 6

"Localized String"类型的目的是让您定义将参与本地化过程的运行时属性值(使用基本本地化).如果您定义自定义控件,将其包含在故事板中并希望将可本地化的字符串分配给其中一个属性,则这很方便.但是这仅适用于Mac OS,而不适用于iOS.

您可以通过以下实验轻松确认:在故事板中放置UILabel/NSTextField,并使用用户定义的运行时属性设置"text"/"stringValue"属性.如果使用"String"作为属性的类型并生成相应的字符串文件,则不会在文件中的任何位置看到它.相反,如果您将类型更改为"Localized String"并生成字符串文件,您将找到如下条目:

/* Class = "IBUILabel"; wij-Kq-q92.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0] = "Localized value"; ObjectID = "wij-Kq-q92"; */
"wij-Kq-q92.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0]" = "Localized value";
Run Code Online (Sandbox Code Playgroud)

然后,您可以在相应的语言字符串文件中本地化此值.同样,这适用于Mac OS,但不适用于iOS.


Tim*_*ann 5

"用户定义的运行时属性"记录很少.从我读过的一本书中我记得的是,UDRA最初是为MacOSX编程实现的,因此Type"Localized String"可能是目前iOS中尚未完全支持的功能.

有趣的是,他正在翻译故事板预览中的字符串(xCode 4.5.1),但后来在编译的iOS应用程序中,他只是注入了密钥字符串.

我现在正在考虑的一个解决方案是创建一个小帮助类,即在viewDidLoad上检查视图的标题/文本字符串以获取关键字,如"key",例如"XYControllerTitleKey",然后在其上创建NSLocalizedString-Method .

更新: 在此期间,似乎有一种方法可以使用UDRA:

故事板/ XIB和本地化最佳实践

并作为结果的教程(链接)