如何使UIBarbuttonItem可以本地化?
我的实施:
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(cancel)];
最初我认为它是自动的,因为它看起来很容易像这样,但看起来不是。
EDIT1:官方Apple dox表示取消,完成,编辑,保存按钮已本地化,但不确定如何制作。
答案 0 :(得分:5)
好吧,我想我知道发生了什么。
UIKit根据[[NSBundle mainBundle] preferredLocalizations]
的值决定显示字符串的语言。这背后的想法是尽可能使用翻译的资源,否则回到英语。例如,如果您未在“设置” - >“常规” - >“国际 - >语言”中选择芬兰语和芬兰语的应用翻译,则您的应用将使用英语。它可能有点复杂(UIKit可能会按照Settings.app中显示的顺序查看所有语言列表,试图找到您的应用程序翻译的第一种语言),但重点是。
以上可能太明显,不能错过一个关键的细微差别。由上述算法确定的语言用于应用程序的整个UI 。例如,如果应用程序包不包含sk.lproj,则斯洛伐克语中不会显示任何内容。事实上,它确实有意义,因为否则UI的某些部分将使用斯洛伐克语,其他部分则使用英语。
打开已编译的应用程序包,查看哪些* .lproj文件夹。 [[NSBundle mainBundle] preferredLocalizations]
将返回根据用户首选项排序的相同集合。所有可本地化的字符串(包括系统栏按钮项)都将以其中一种语言显示。如果您不支持,例如,俄语,整个用户界面将以其他语言显示,即使在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"的系统默认语言。文本。