与Nibs的国际化。这真的是个好主意吗?

时间:2009-02-28 13:24:57

标签: objective-c cocoa internationalization

在Apple Docs中,他们说Nib只需将笔尖翻译成多种语言即可实现国际化。我现在想的是一个更糟糕但更现实的场景:你已经建立了一个庞大的用户界面。然后你将它翻译成25种语言。所以你得到25个不同的笔尖。您还可以在样式和定义UI方面获得巨大的冗余:相同的东西的25倍。相同的绑定,同样的一切。只是文字是不同的。

所以,我认为这是一个非常糟糕的方法。相反,我宁愿只链接资源包中的所有文本或类似的东西。只是一个带有文本字符串的文件,它在运行时从相应的语言资源链接。然后你只在文本中有“麻烦”链接,这真的没有任何乐趣。但是,您可以对UI ONCE进行更改,而无需一遍又一遍地执行相同的步骤25次。每个笔尖都有一个新的绑定。那真是太可怕了!!

现在,请告诉我,我错了。 Apple并不认为我们做了那么狡猾的事情吗?

3 个答案:

答案 0 :(得分:9)

本地化情况并不理想。尽管Cocoa UI元素在其大小调整(ausosizing标志)中支持一些动态灵活性,但是很难将它们安排在视图中,以便它们可以容纳任何大小的文本。

正如Heng-Cheong所指出的,这通常意味着在每个本地化的基础上需要对布局进行一些调整。 Apple通过与您的开发人员工具捆绑在一起的名为“ibtool”的工具支持称为增量本地化的流程。这个过程远非直观,似乎有一些微妙的错误,但它有助于使过程更容易,比如,分别手动维护25个不同的笔尖。该过程主要涉及将您对主笔尖所做的更改映射到其他本地化的笔尖。 Apple更详细地描述了该过程:

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html

为了避免这种痛苦的过程,有些人会采取不同的方法。如果您在视图布局上妥协,则可以实现每个UI元素都适应最大本地化字符串的情况。使用文本字段等的对齐功能,您可以因此安排可接受的布局,尽管使用最大字符串进行本地化所需的额外间距通常会导致字符串最短的语言的布局不太理想。如果采用这种方法,则需要设计nib,以便控制器类在运行时使用正确的本地化字符串填充nib的UI元素。

最后,一些开发人员甚至将自己的重新布局应用于笔尖中的元素,并根据已设置的字符串大小对其进行优化。这将是上述策略的改进,其中使用单个笔尖并在运行时进行操作以实现期望的效果。

答案 1 :(得分:5)

有时,本地化不仅仅涉及替换文本,还涉及布局的变化。例如,一种语言环境/语言中的字符串可能比另一种语言环境/语言中的字符串长得多,从而迫使布局发生变化。从右到左的语言通常也意味着布局的一些变化。

答案 2 :(得分:5)

在前两个答案的基础上,有一个名为iLocalize的工具,旨在使这个过程比ibtool更容易(并且它比ibtool更早)。我自己从未使用它,但是我的朋友Evan在Adium和Growl上使用它并且喜欢它。