UIBarButtonSystemItem可本地化

Van*_*nya 5 iphone localization objective-c

如何使UIBarbuttonItem可本地化?

我的实施:

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

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

编辑1:官方Apple dox说取消,完成,编辑,保存按钮是本地化的,但不知道如何制作它.

eli*_*ego 6

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


Cos*_*que 5

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

UIKit根据的值决定使用哪种语言显示字符串[[NSBundle mainBundle] preferredLocalizations]。其背后的想法是,尽可能使用翻译后的资源,否则转回英语。例如,如果您不提供芬兰语的应用翻译,并且在设置->常规->国际语言->语言中选择了芬兰语,则您的应用将为英语。可能会稍微复杂一些(UIKit可能会按照Settings.app中显示的顺序浏览所有语言列表,试图找到您的应用翻译的第一种语言),但这很重要。

上面的内容可能太明显而不能忽略一个关键的细微差别。由上述算法确定的语言用于该应用的整个UI。例如,如果应用程序捆绑包不包含sk.lproj,则斯洛伐克语中将不会显示任何内容。实际上,这确实是有道理的,因为否则UI的某些部分将使用斯洛伐克语,而其他部分将使用英语。

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

如果您的应用确实如此,则有两件事情正确,一件错误的事情要做:

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

如果您看到其他行为,则项目/构建/内置应用程序可能存在问题。例如,我注意到当您使文件本地化时,其未本地化的副本不会从以前构建的应用程序捆绑包中删除。


Cos*_*que 1

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

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