是否有选项可以在Interface Builder中隐式本地化标签

时间:2011-09-14 07:48:02

标签: ios xcode internationalization interface-builder

在博客文章的某处,我偶然发现了一个字符串文件,如下所示:

// de.lproj/Localizable.strings
"This is the title" = "Das ist der Titel"

对我而言,看起来编辑器处理了“接口”构建器中的实际标签,因此不再需要使用NSLocalizedString(@"SOME_IDENTIFIER", @"");进行显式转换。

我现在的问题是,是否存在某种快捷方式,或者我是否需要在我的视图中本地化所有单个标签,例如在awakeFromNib方法中。

1 个答案:

答案 0 :(得分:3)

我找到了一种半自动化过程的方法,这样我就不必这样做了:

label1.text = NSLocalizedString(@"label1_key", @"");
label2.text = NSLocalizedString(@"label2_key", @"");
....
labeln.text = NSLocalizedString(@"labeln_key", @"");

因此,对于应该进行本地化的所有标签,我将其文本设置为IB中的__KeyForLabelX。然后在viewcontroller的viewWillAppear方法中,我遍历视图中的项目并将文本设置为本地化值:

for (UIView *view in self.view){
    if([view isMemberOfClass:[UILabel class]]){
        UILabel *l = (UILabel *)view;

        BOOL shouldTranslate = [l.text rangeOfString:@"__"].location != NSNotFound;
        NSString *key = [l.text stringByReplacingOccurrencesOfString:@"__" withString:@"TranslationPrefix"];
        if (shouldTranslate){
            l.text = NSLocalizedString(key, @"");
        }
    }
}

我的.strings文件看起来像这样:

"TranslationPrefixKeyForLabelX" = "Translation of Label X";

更新:要进一步调整机制,您还可以检查其他UIView,例如UIButtonsUITextField s(包括提示文字)等。< / p>