使用 Nibs 进行国际化。这真的是个好主意吗?

Posted

技术标签:

【中文标题】使用 Nibs 进行国际化。这真的是个好主意吗?【英文标题】:Internationalization with Nibs. Is that really a good idea? 【发布时间】:2009-02-28 13:24:56 【问题描述】:

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

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

现在,请告诉我我错了。 Apple 不会认为我们会做如此疯狂的事情吗?

【问题讨论】:

【参考方案1】:

本地化情况并不理想。尽管 Cocoa UI 元素在其大小(ausoizing 标志)方面支持一些动态灵活性,但很难将它们排列在视图中以适应任何大小的文本。

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

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

我支持这个。如果您计划支持从右到左的语言,那么简单的字符串替换几乎是不可能的。【参考方案3】:

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

【讨论】:

以上是关于使用 Nibs 进行国际化。这真的是个好主意吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 url 中提供 jwt 令牌是个好主意吗?

在 PHP mkdir 中使用模式 0664 是个好主意吗?

(何时)使用 FluentAssertions 是个好主意吗? [关闭]

在 JSF 2 Web 应用程序中使用 Bean Validation (JSR 303) 是个好主意吗?

在 debounce 函数中使用 requestAnimationFrame 是个好主意吗?

使用带有特殊字符的 URL 名称是个好主意吗? [关闭]