我只是熟悉xib文件的本地化,并想知道是否有一种方法通过直接引用plist来本地化xib中的字符串...
欣赏一些想法..
答案 0 :(得分:7)
如果您不想直接本地化.xib文件,可以将它们包含的文本解压缩到.strings文件中,并在翻译.strings文件后,将它们重新注入.xib文件以生成本地化版本。这些提取/注入操作使用ibtool
实用程序完成。
我在this website上找到了有关如何执行此操作的详细说明。
答案 1 :(得分:4)
我的方法稍微取消了@Clafou的答案,但它可能会更直接一点。我只是为我的按钮设置IBOutlets并在我的.h控制器中标记字符串(在xib上创建)。
@interface DetailViewController : UIViewController {
IBOutlet UILabel *TitleLabelMain;
}
然后转到我的.m控制器,并使用NSLocalizableStrings为这些标签和按钮赋值。
- (void)viewWillAppear:(BOOL)animated {
TitleLabelMain.text = NSLocalizedString(@"titleLabel",nil);
当然,您需要在Localizable.strings中定义一个值
"titleLabel" = "THIS TEXT IS LOCALIZED!";
答案 2 :(得分:1)
Apple提出的方法是将字符串转换为.strings
包中的.lproj
文件,这些文件将由Cocoa的本地化框架切换。
Xcode可以从xib生成.strings
文件,这使得本地化非常直接。
右键单击Xcode中的xib文件,然后选择Get Info
。选择General
标签,然后点击Make File Localizable
。然后,您可以通过点击同一标签上的Add Localization
来添加本地化。
我建议this tutorial获取分步信息(以及漂亮的图片)。
答案 3 :(得分:0)
我认为直接本地化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];