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

我目前有一个半自动的方式来本地化我的意见。 但是,今天我在IB中发现了一个有趣的部分,这似乎表明我可以从Interface Builder中本地化我的视图。

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

然而,当我selectType = Localized String ,然后在我的Localized.strings的一个键的名称,我没有得到一个翻译的string,而只是我在IBinput的值(因此,键)。

我不明白,这个机制应该如何工作。 我很想能够像这样翻译我的意见,任何想法?

“用户定义的运行时属性”logging很差。 从我读的一本书中我能记得的是,UDRA最初是为MacOSX编程实现的,所以types“本地化string”可能是目前在iOS中不完全支持的一个function。

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

我现在正在考虑的一个解决scheme是创build一个辅助类,即检查viewDidLoad中关键字“title”的标题/文本string,例如“XYControllerTitleKey”,然后使NSLocalizedString-Method 。

“本地化string”types的目的是让您定义将参与本地化过程(使用基本本地化)的运行时属性值。 例如,如果您定义一个自定义控件,将其包含在故事板中,并希望将可本地化的string分配给其中一个属性,则此function非常方便。 但是,这只适用于Mac OS,不适用于iOS。

您可以通过以下实验轻松确认:在故事板中放置UILabel / NSTextField,并使用用户定义的运行时属性设置“text”/“stringValue”属性。 如果使用“String”作为属性的types并生成相应的string文件,则不会在文件中的任何位置看到它。 相反,如果将types更改为“本地化string”并生成string文件,则会find如下所示的条目:

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

然后你可以在相应的语言string文件中本地化这个值。 再次,这可以在Mac OS,但不是在iOS上。

对于我来说,使用iOS 6,如果您从基本的本地化故事板生成string(通过让XCode生成它们或使用ibtool --generate-strings-file您将获得自动生成的string,看起来像这样(应该在MainStoryBoard.strings ,例如):

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

不幸的是,通过关键path确定它们会很好,但是至less你有位置,你的用户定义的string应该被本地化。