UIBarButtonSystemItem可本地化

时间:2010-11-03 17:05:09

标签: iphone objective-c localization

如何使UIBarbuttonItem可以本地化?

我的实施:

UIBarButtonItem         *cancelButton = [[UIBarButtonItem alloc] 
                                             initWithBarButtonSystemItem:UIBarButtonSystemItemDone
                                             target:self
                                             action:@selector(cancel)];

最初我认为它是自动的,因为它看起来很容易像这样,但看起来不是。

EDIT1:官方Apple dox表示取消,完成,编辑,保存按钮已本地化,但不确定如何制作。

4 个答案:

答案 0 :(得分:5)

好吧,我想我知道发生了什么。

UIKit根据[[NSBundle mainBundle] preferredLocalizations]的值决定显示字符串的语言。这背后的想法是尽可能使用翻译的资源,否则回到英语。例如,如果您未在“设置” - >“常规” - >“国际 - >语言”中选择芬兰语和芬兰语的应用翻译,则您的应用将使用英语。它可能有点复杂(UIKit可能会按照Settings.app中显示的顺序查看所有语言列表,试图找到您的应用程序翻译的第一种语言),但重点是。

以上可能太明显,不能错过一个关键的细微差别。由上述算法确定的语言用于应用程序的整个UI 。例如,如果应用程序包不包含sk.lproj,则斯洛伐克语中不会显示任何内容。事实上,它确实有意义,因为否则UI的某些部分将使用斯洛伐克语,其他部分则使用英语。

打开已编译的应用程序包,查看哪些* .lproj文件夹。 [[NSBundle mainBundle] preferredLocalizations]将返回根据用户首选项排序的相同集合。所有可本地化的字符串(包括系统栏按钮项)都将以其中一种语言显示。如果您不支持,例如,俄语,整个用户界面将以其他语言显示,即使在Settings.app中选择了俄语。

如果您的应用确实存在这种情况,那么有两件事情可做并且有一件错误:

  • 右:为应用中显示的每个字符串提供斯洛伐克语翻译,将包含文字的笔尖翻译成斯洛伐克语;
  • 右:如果您不能(或不需要)支持斯洛伐克,则完全忽略斯洛伐克;
  • 错误:选择任何字符串文件或任何笔尖,打开Xcode的检查器,单击“添加本地化...”(如果禁用该按钮,首先单击“使文件可本地化”),键入“sk”,单击“添加”并构建该项目。这将使UIKit认为您的应用程序已翻译为斯洛伐克语,系统栏按钮项目将在Settings.app中选择时自动显示在斯洛伐克语中。

如果您看到不同的行为,则project / build / built app可能存在问题。例如,我注意到当您将文件本地化时,其非本地化副本不会从之前构建的应用程序包中删除。

答案 1 :(得分:5)

Bump,但我认为Vanya的问题可能是Info.plist中的“本地化本地开发区域”/ CFBundleDevelopmentRegion条目。如果将此设置为英语并且没有明确提供本地化,如Costique所述,则所有系统字符串都将是非本地化的。但是,将它设置为sk和 - violà。

答案 2 :(得分:1)

我不确定我是否正确理解您的问题,但标准(系统)栏按钮项 已本地化,因此会自动以用户选择的语言显示。有一些值得注意的例外,例如UISwitch显示0/1而不是ON / OFF。你遇到什么语言问题?

也就是说,您可以随时使用自定义栏按钮项代替系统项,并自行提供必要的翻译。在大多数情况下,它只是矫枉过正。

答案 3 :(得分:0)

我在Swift中的实现:

let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(doneButtonTapped(button:)))

这使用" Done"的系统默认语言。文本。