是否可以自动在故事板中本地化UITabBarItem文本?

时间:2014-07-28 05:55:52

标签: ios objective-c localization uistoryboard nslocalizedstring

我是原生iOS开发的新手,并且一直在玩本地化的故事板。

我通过更新故事板的UILabel文件,在我的故事板中本地化UIButtonMain.strings个对象的文本:

// UIButton:
"cEx-Yi-RY8.normalTitle" = "Done";

// UILabel:
"1l2-H9-hRc.text" = "Safety information!";

如何为UITabBarItem执行相同的操作?我试过了:

//UITabBarItem:
"oSH-y1-hFoB.title" = "Scan";

但它不起作用:(

我不明白为什么......我可以看到可以在UITabBarController中手动更新文本:

- (void)viewDidLoad
{
    //...
    item.title = NSLocalizedString(@"scan", nil);
}

但是我必须将这些翻译放在一个单独的Localizable.strings文件中,这似乎很蹩脚。

另一方面,至少Localizable.strings中的翻译有些可读,即"scan" = "Scan";而不是"oSH-y1-hFoB.title" = "Scan"; ......

仍然......我没有理解为什么有些东西可以在Interface Builder中运行,但其他东西并不是,你必须手动完成。

我讨厌必须添加所有这些样板代码来做重复的事情,比如在UI中本地化文本,当框架应该能够为我做这件事时。 (如果它可以为UIButton做,为什么不是UITabBarItem ...)

或者我只是忽略了什么?

4 个答案:

答案 0 :(得分:9)

您可以完全本地化UITabBarItem如何本地化其他故事板组件。 在我看来,这在你的情况下不起作用的主要原因是因为在一个故事板中你有两个标题:一个在标签栏上,另一个在视图控制器上......你使用的是错误的ID :-)

从新项目,选项卡式应用程序开始,单击项目(左侧),右侧的项目(不是目标),信息选项卡,在本地化中添加语言(我使用意大利语)。保留所有默认值。

Xcode将为意大利语创建此.strings文件:

...
/* Class = "IBUIViewController"; title = "First"; ObjectID = "CZ4-MO-1fc"; */
"CZ4-MO-1fc.title" = "First";

/* Class = "IBUIViewController"; title = "Second"; ObjectID = "QUy-BD-bpt"; */
"QUy-BD-bpt.title" = "Second";

/* Class = "IBUITabBarItem"; title = "Second"; ObjectID = "Z7h-1E-pvt"; */
"Z7h-1E-pvt.title" = "Second";

/* Class = "IBUITabBarItem"; title = "First"; ObjectID = "u1e-5L-l1D"; */
"u1e-5L-l1D.title" = "First";
....

如您所见,有两个标题,一个在VC上,另一个在TabBarItem上。 您必须更新标有IBUITabBarItem

的标题

答案 1 :(得分:1)

虽然您可以像任何其他StoryBoard组件一样本地化UITabBarItem,但请注意,如果为关联的视图控制器设置标题,它将覆盖UITabBarItem的标题。这样可以防止您的本地化出现。

答案 2 :(得分:0)

显然你可以在你的视图控制器中设置它。您可以在.m文件中设置此操作。如果您使用故事板,它也有效。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
    self.tabBarItem.title =NSLocalizedString(@"Alerts",nil);
    }

    return self;
}

或者您也可以在viewDidLoad方法中编写它。

self.tabBarItem.title =NSLocalizedString(@"Alerts",nil);

答案 3 :(得分:0)

另一种选择是以编程方式将标签栏项目上的标题设置为NSLocalizedStrings。

tabBar.items![0].title = NSLocalizedString("tab1", comment: "")
tabBar.items![1].title = NSLocalizedString("tab2", comment: "")
tabBar.items![2].title = NSLocalizedString("tab3", comment: "")
tabBar.items![3].title = NSLocalizedString("tab4", comment: "")