如何在不为每种语言创建 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 站点?