Interfacebuilder 中是否有隐式本地化标签的选项

发布于 2024-12-05 01:23:03 字数 349 浏览 1 评论 0原文

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

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

对我来说,这看起来像 Interface Builder 中的实际标签由编译器处理,因此没有使用 NSLocalizedString(@"SOME_IDENTIFIER", @" 进行显式翻译"); 将不再是必要的。

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

Somewhere in a blog post I stumbled upon a strings file which looked like this:

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

To me this looked like the actual labels in Interface builder were processed by the compiler so that no explicit translations using NSLocalizedString(@"SOME_IDENTIFIER", @""); would be necessary any more.

My question now, is whether there is some kind of shortcut or do I need to localise all my individual labels on my view e.g. in the awakeFromNib method.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凉城已无爱 2024-12-12 01:23:03

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

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

因此,对于所有应该本地化的标签,我将其文本设置为IB中的__KeyForLabelX。然后在视图控制器的 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(包括提示文本)等。

I have figured out a way to semi-automate the process so that I don't have to do this:

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

So for all labels which should be localised I set their text to __KeyForLabelX in IB. Then in the viewWillAppear method of the viewcontroller I loop through the items on the view and set the text to the localized value:

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, @"");
        }
    }
}

My .strings file then look like this:

"TranslationPrefixKeyForLabelX" = "Translation of Label X";

Update: To further adapt the mechanism you could also check for other UIViews like UIButtons, UITextFields (including prompt text) etc.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文