iPhone:接口生成器中的NSLocalizedString?

15

有没有一种方法可以在界面构建器中插入NSLocalizedString。 例如将标签文本设置为本地化字符串而不是静态字符串?

我真的不想为每个需要本地化字符串的项目创建一个属性。

6个回答

6

2
为避免创建大量类别,请只创建一个类别来对NSObject进行分类,然后按照建议检查isKindOfClass。请参见下面的代码:
#import "NSObject+Localized.h"

@implementation NSObject (Localized)

///
/// This method is used to translate strings in .xib files.
/// Using the "User Defined Runtime Attributes" set an entry like:
/// Key Path: textLocalized
/// Type: String
/// Value: {THE TRANSLATION KEY}
///
-(void) setTextLocalized:(NSString *)key
{
    if ([self isKindOfClass:[UILabel class]])
    {
        UILabel *label = (UILabel *)self;
        [label setText:NSLocalizedString(key, nil)];
    }
    else if ([self isKindOfClass:[UIButton class]])
    {
        UIButton *button = (UIButton *)self;
        [button setTitle:NSLocalizedString(key, nil) forState:UIControlStateNormal];
    }
    else if ([self isKindOfClass:[UIBarButtonItem class]])
    {
        UIBarButtonItem *button = (UIBarButtonItem *)self;
        [button setTitle:NSLocalizedString(key, nil)];
    }
}

@end

2
您可以利用用户自定义运行时属性:
首先为UILabel定义一个新类别: http://cupobjc.blogspot.com.es/2014/04/interfaz-builder-localization.html
#import "UILabel+Localized.h"

@implementation UILabel (Localized)
-(void) setTextLocalized:(NSString *)aText{
     [self setText:NSLocalizedString(aText, nil)];
}
@end

然后在界面构建器中,选择“用户定义的运行时属性”:

textLocalized String 你要本地化的字符串

enter image description here


非常聪明,但并不适用于所有元素,你最终会为每个UI元素编写一堆类别(例如:分段控件、页面标题、按钮等)。 - aryaxt
很好的解决方案。谢谢!我不得不使用一个单词属性(“localizable”),因为它与“textLocalized”失败了。也许我做错了什么,但我还是在这里评论一下以防万一发生在其他人身上(我得到了:“此类不符合键值编码规范的本地化文本键”)。此外,我在接口中声明了这个方法(也许这很简单,但我也说一下)。 - Ferran Maylinch
您可以将“Localized String”作为属性类型进行选择,其值应该是字符串键...但它没有起作用。它只显示了键(例如“user_greeting”)。 - Ferran Maylinch

2
即使这篇文章已经过时,对于那些对自动本地化IB文件感兴趣的人来说,可以查看这个链接:https://github.com/angelolloqui/AGi18n 免责声明:我是该库的开发者。

@Angel,我在使用你的库时遇到了一些问题。无法通过在线curl语句正确地将其安装在我的机器上。 - Awais Tariq
我在 Github 上回答了你的问题,但基本上如果你只想使用 IB 文件的自动本地化功能,则不需要安装工具。这些工具是用于从 IB 中提取标签,以帮助您本地化所有内容并轻松合并字符串的。 - Angel G. Olloqui

1

10
我不喜欢使用ibtool,因为它会为每种语言创建多个nib文件。如果你决定更改界面,就必须逐个打开每个语言的nib文件并一个一个地进行更改。 - aryaxt
无论如何,ibtool是正确的方法。拥有单独的nibs可以让您调整按钮大小甚至整个布局以适应更长的字符串或特定于文化的期望。ibtool还具有一些功能,允许您进行“增量本地化”;有关更多信息,请参见'man ibtool'。 - Adam Ernst
ibtool在从服务器检索本地化字符串时效果不佳,因为它们在编译时不存在。 - Jeremy Wiebe

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接