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

asg*_*eo1 9 localization objective-c nslocalizedstring ios uistoryboard

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

我通过更新故事板的文件来本地化我的故事板中的文本UILabelUIButton对象Main.strings:

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

// UILabel:
"1l2-H9-hRc.text" = "Safety information!";
Run Code Online (Sandbox Code Playgroud)

我怎么做同样的UITabBarItem?我试过了:

//UITabBarItem:
"oSH-y1-hFoB.title" = "Scan";
Run Code Online (Sandbox Code Playgroud)

但它不起作用:(

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

- (void)viewDidLoad
{
    //...
    item.title = NSLocalizedString(@"scan", nil);
}
Run Code Online (Sandbox Code Playgroud)

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

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

仍然......我没有关注为什么有些东西在Interface Builder中工作,但其他东西没有,你必须手动完成.

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

或者我只是忽略了什么?

Lom*_*baX 11

您可以完全本地化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";
....
Run Code Online (Sandbox Code Playgroud)

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


小智 10

另一种选择是以编程方式将选项卡栏项上的标题设置为 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: "")
Run Code Online (Sandbox Code Playgroud)