使用“用户定义属性运行”故事板内定位的图(Localize a view within a stor

2019-06-26 17:20发布

我现在有一个半自动化的方式来定位自己的看法。 不过,今天我发现在IB一个有趣的部分,这似乎表明,我可以从界面生成器中定位自己的看法。

因此,在IB,您可以定义在Identity检查所选对象的运行时属性。 因此,对于我UILabel我可以设置text我的标签字符串的keyPath Hello World

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

我不明白,这个机制是如何工作的。 我很想能够翻译我的看法是这样,任何想法?

Answer 1:

“用户定义的属性运行”的记录不完整。 我可以从一些书我读是,UDRA用于MacOSX的编程首次实现的,所以类型“本地化字符串”可能是不完全的iOS支持现在的功能还记得。

有趣的是,他在翻译的故事板预览字符串(的Xcode 4.5.1),但后来在编译的iOS应用,他只是在注射密钥字符串。

一个解决方案,我现在正在考虑,是使一个小帮手类,即检查对viewDidLoad中观点标题/文本串像“钥匙”,如“XYControllerTitleKey”的关键词,然后进行NSLocalizedString法上。

更新:看来,在此期间,有使用UDRAs方式:

情节提要/ XIB和本地化的最佳实践

和教程,结果( 链接 )



Answer 2:

The purpose of the "Localized String" type is to let you define a runtime attribute value that will participate in the localization process (using base localization). This is handy if for example you define a custom control, include it in the storyboard and want to assign a localizable string to one of its properties. However this only works on Mac OS, not on iOS.

You can easily confirm this doing the following experiment: put a UILabel / NSTextField in your storyboard and set the "text" / "stringValue" property using a user defined runtime attribute. If you use "String" as the type of the attribute and generate the corresponding strings file you won't see it anywhere in the file. In contrast, if you change the type to "Localized String" and generate the strings file you will find an entry like this:

/* Class = "IBUILabel"; wij-Kq-q92.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0] = "Localized value"; ObjectID = "wij-Kq-q92"; */
"wij-Kq-q92.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0]" = "Localized value";

Then you can localize this value in the corresponding language strings file. Again, this works on Mac OS, but not on iOS.



Answer 3:

对我来说,使用的是iOS 6,如果你生成你的字符串从你的基地本地化的故事板(具有的XCode生成它们或使用ibtool --generate-strings-file ,你会得到像这样(在应该去自动生成的字符串MainStoryBoard.strings ,例如):

/* Class = "IBUITextField"; b4a-O4-bNZ.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0] = "Event Name"; ObjectID = "b4a-O4-bNZ"; */
"b4a-O4-bNZ.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0]" = "Event Name";

不幸的是,它会是不错的他们确定了关键路径,但至少你有你的地方用户自定义字符串应该是局部的位置。



文章来源: Localize a view within a storyboard using “User Defined Runtime Attributes”