12

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

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

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

我不明白,这个机制应该如何工作。我希望能够像这样翻译我的观点,有什么想法吗?

4

3 回答 3

7

“Localized String”类型的目的是让您定义一个将参与本地化过程的运行时属性值(使用基本本地化)。例如,如果您定义一个自定义控件,将其包含在情节提要中并希望将可本地化的字符串分配给其属性之一,这将非常方便。但是,这仅适用于 Mac OS,不适用于 iOS。

您可以通过以下实验轻松确认这一点:在情节提要中放置一个 UILabel / NSTextField 并使用用户定义的运行时属性设置“text”/“stringValue”属性。如果您使用“字符串”作为属性的类型并生成相应的字符串文件,您将不会在文件中的任何位置看到它。相反,如果您将类型更改为“本地化字符串”并生成字符串文件,您将找到如下条目:

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

然后你可以在对应的语言字符串文件中本地化这个值。同样,这适用于 Mac OS,但不适用于 iOS。

于 2014-07-02T09:50:14.567 回答
5

“用户定义的运行时属性”记录得很差。我从读过的一本书中记得,UDRA 最初是为 MacOSX 编程实现的,因此“本地化字符串”类型可能是目前 iOS 中不完全支持的功能。

有趣的是,他正在翻译情节提要预览中的字符串(xCode 4.5.1),但后来在编译的 iOS 应用程序中,他只是注入了密钥字符串。

我现在正在考虑的一个解决方案是制作一个小助手类,即在 viewDidLoad 上检查视图的标题/文本字符串是否有“key”之类的关键字,例如“XYControllerTitleKey”,然后在其上创建 NSLocalizedString-Method .

更新: 与此同时,似乎有一种使用 UDRA 的方法:

Storyboard/XIB 和本地化最佳实践

结果是一个教程(链接

于 2012-10-30T12:04:11.873 回答
1

对我来说,使用 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";

不幸的是,最好让它们通过键路径来识别,但至少你有你的用户定义的字符串应该被本地化的位置。

于 2013-02-06T19:54:35.343 回答