如何在不为每种语言创建 xib 的情况下本地化 xib 视图中的文本?

Posted

技术标签:

【中文标题】如何在不为每种语言创建 xib 的情况下本地化 xib 视图中的文本?【英文标题】:How can I localize text in xib views without creating xib for each language? 【发布时间】:2012-01-11 06:50:47 【问题描述】:

我想在 xib 视图中本地化文本。目前我为每种语言都有几个 xib。

是否可以在不为每种语言创建单独的 xib 的情况下本地化 xib 文件中的文本?

【问题讨论】:

【参考方案1】:

听起来你想了解 .string 文件。

您可以查看以下相关问题以获取更多信息: Open .string files as an NSDictionary

【讨论】:

您能否从 xib 引用 .strings 文件中的翻译,或者如果您只需要一个 xib 而不是每种语言一个 xib,您是否需要在代码中设置标签(等)值?跨度> 好问题@jrturton,我不确定答案。从 xib 本身中引用 .strings?我怀疑这可能通过 KVC 实现,但我从未尝试过。 看这个教程:raywenderlich.com/2876/how-to-localize-an-iphone-app-tutorial 我从未本地化过应用程序,对我来说,仅仅为了本地化而拥有不同版本的 xib 似乎很愚蠢 - 未来对 xib 的任何更改都将涉及大量的工作和风险。 我已经在使用 .strings 文件了。但是我在界面构建器中使用它们。我想从 xib 中的 .strings 文件中引用特定的字符串。【参考方案2】:

来自 android 背景,我也在问同样的问题。甚至 Apple recommends 也为每种语言创建单独的 xib 文件。幸运的是,可以在构建脚本中使用ibtool 自动执行此过程。 this article 中有很好的描述。

【讨论】:

【参考方案3】:

本地化适用于文本而不是 Xib。所以,你不需要 考虑xib文件。本地化很容易不太复杂。查看 这个链接对你有帮助。

http://www.raywenderlich.com/2876/how-to-localize-an-iphone-app-tutorial

【讨论】:

【参考方案4】:

这个问题把我逼疯了。

我在尝试使 xib 本地化对自己更容易时遇到了这篇文章和其他几篇文章。我在这个问题上发布了包含标签/按钮的 IBOutles 的方法,对我来说效果很好,将所有更改限制在 Localization.strings 文件中。

https://***.com/a/15485572/1449834

【讨论】:

【参考方案5】:

我认为直接本地化 xibs 不是一个好选择。我正在使用https://github.com/steipete/Aspects 来挂钩 UILabel 的 awakeFromNib 方法并在那里本地化文本。示例:

 #define Localized(_v_) NSLocalizedString(_v_, nil)
 NSError *err = nil;
[UILabel aspect_hookSelector:@selector(awakeFromNib)
                 withOptions:AspectPositionAfter
                  usingBlock:^(id<AspectInfo> aspectInfo) 
                      UILabel *label = aspectInfo.instance;
                      NSString *lStr = Localized(label.text);
                      if (lStr) 
                          label.text = lStr;
                      
 error:&err];

如果你有 UIButton 和其他 UIView 需要处理,你可以挂钩 UIView 的 awakeFromNib 并本地化每种视图。

【讨论】:

以上是关于如何在不为每种语言创建 xib 的情况下本地化 xib 视图中的文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用尺寸等级和情节提要的情况下创建适用于 iPhone 4 到 iPhone 6 Plus 的 XIB?

如何在不为其创建专用网站的情况下为我的应用提供隐私政策?

如何在不使用自动布局的情况下以 XIB/故事板大小查看手机尺寸

如何在不为 Java Bridge 添加 tomcat 服务器的情况下将 Java 后端添加到现有 PHP 站点?

Xcode - 如何在不更改 UIScreen 大小的情况下添加 xib 启动屏幕

使用 XIB(界面生成器)在 iOS 中进行本地化