如何使UIBarbuttonItem可本地化?
我的实施:
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemDone
target:self
action:@selector(cancel)];
最初我认为它是自动的,因为看起来容易这样,但看起来不是 .
编辑1:官方Apple dox说取消,完成,编辑,保存按钮是本地化的,但不知道如何制作它 .
4 回答
凹凸,但我认为Vanya的问题可能是Info.plist中的“本地化本地开发区域”/
CFBundleDevelopmentRegion
条目 . 如果将此设置为英语并且没有明确提供本地化,如Costique所述,则所有系统字符串都将是非本地化的 . 但是,将它设置为sk和 - violà .好吧,我想我知道发生了什么 .
UIKit根据
[[NSBundle mainBundle] preferredLocalizations]
的值决定显示字符串的语言 . 这背后的想法是尽可能使用翻译的资源,否则回到英语 . 例如,如果您未在设置 - >常规 - >国际 - >语言中选择芬兰语和芬兰语的应用程序翻译,则您的应用程序将使用英语 . 它可能有点复杂(UIKit可能会按照Settings.app中显示的顺序浏览所有语言列表,试图找到您的应用程序翻译的第一种语言),但重点是 .以上可能太明显,不能错过一个关键的细微差别 . 由上述算法确定的语言用于应用程序的整个UI . 例如,如果应用程序包不包含sk.lproj,则斯洛伐克语中不会显示任何内容 . 事实上,它确实有意义,因为否则UI的某些部分将使用斯洛伐克语,其他部分则使用英语 .
打开已编译的应用程序包,查看哪些* .lproj文件夹 .
[[NSBundle mainBundle] preferredLocalizations]
将返回根据用户首选项排序的相同集合 . 所有可本地化的字符串(包括系统栏按钮项)都将以其中一种语言显示 . 如果您不支持,例如,俄语,即使在Settings.app中选择了俄语,整个用户界面也将以其他语言显示 .如果您的应用确实存在这种情况,那么有两件事情和一件错误的事情要做:
右:为您应用中显示的每个字符串提供斯洛伐克语翻译,将任何包含文本的笔尖翻译成斯洛伐克语;
右:如果你不能(或不需要)支持斯洛伐克,就完全忽略斯洛伐克;
错误:选择任何字符串文件或任何nib,打开在Settings.app中选择的Xcode 's inspector, click 1124443 (if the button is disabled, first click 1124444 ), type 1124445 , click 1124446 and build the project. This will make UIKit think your app is translated to Slovak, and system bar button items will automatically appear in Slovak when it' .
如果您看到不同的行为,则project / build / built app可能存在问题 . 例如,我注意到当您将文件本地化时,其非本地化副本不会从先前构建的应用程序包中删除 .
我不确定我是否正确理解您的问题,但标准(系统)栏按钮项目已本地化,因此会自动以用户选择的语言显示 . 有一些值得注意的例外,例如UISwitch显示0/1而不是ON / OFF . 你遇到什么语言问题?
也就是说,您可以随时使用自定义栏按钮项代替系统项,并自行提供必要的翻译 . 在大多数情况下,它只是矫枉过正 .
我在Swift中的实现:
这使用“完成”文本的系统默认语言 .