首页 文章

UIBarButtonSystemItem可本地化

提问于
浏览
5

如何使UIBarbuttonItem可本地化?

我的实施:

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

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

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

4 回答

  • 0

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

  • 4

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

    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可能存在问题 . 例如,我注意到当您将文件本地化时,其非本地化副本不会从先前构建的应用程序包中删除 .

  • 1

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

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

  • 5

    我在Swift中的实现:

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

    这使用“完成”文本的系统默认语言 .

相关问题