【发布时间】:2011-04-11 20:18:04
【问题描述】:
我刚刚熟悉 xib 文件的本地化,想知道是否有一种方法可以通过直接引用 plist 来本地化 xib 中的字符串...
欣赏一些想法..
【问题讨论】:
标签: iphone localization xib
我刚刚熟悉 xib 文件的本地化,想知道是否有一种方法可以通过直接引用 plist 来本地化 xib 中的字符串...
欣赏一些想法..
【问题讨论】:
标签: iphone localization xib
我认为直接本地化 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];
【讨论】:
我的方法有点偏离@Clafou 的答案,但它可能更简单一些。我只是在我的 .h 控制器中为我的按钮和标签字符串(在 xib 上创建)设置 IBOutlets。
@interface DetailViewController : UIViewController {
IBOutlet UILabel *TitleLabelMain;
}
然后转到我的 .m 控制器并使用 NSLocalizableStrings 给这些标签和按钮一个值。
- (void)viewWillAppear:(BOOL)animated {
TitleLabelMain.text = NSLocalizedString(@"titleLabel",nil);
当然你需要在 Localizable.strings 中定义一个值
"titleLabel" = "THIS TEXT IS LOCALIZED!";
【讨论】:
如果您不想直接本地化 .xib 文件,您可以将它们包含的文本提取到 .strings 文件中,一旦 .strings 文件被翻译,将它们注入您的 .xib 文件以生成本地化版本.这些提取/注入操作是使用ibtool 实用程序完成的。
我在this website 上找到了有关如何执行此操作的详细说明。
【讨论】:
Apple 建议的方法是将字符串导出到 .lproj 包中的 .strings 文件中,这将由 Cocoa 的本地化框架切换。
Xcode 可以从 xib 生成 .strings 文件,这使得本地化非常简单。
在Xcode中右击xib文件,选择Get Info。选择General 选项卡并在底部单击Make File Localizable。然后,您将能够通过单击同一选项卡上的 Add Localization 添加本地化。
我会推荐 this tutorial 获取分步信息(和漂亮的图片)。
【讨论】: