如何本地化自定义“完成”按钮



我在自定义视图中使用Done按钮,我想使其标题本地化。我知道UINavigationBar中的系统Done按钮已经本地化了,以某种方式获得它的本地化字符串将是完美的。有办法做到这一点吗?

仅仅因为局部的Done按钮而使用整个UINavigationBar似乎是不合适的。

澄清:重点是使用系统使用的相同本地化字符串。

没有从操作系统获取标准字符串的官方方法,但很可能所有字符串都在本地化的字符串文件中,其中大多数都在模拟器上(它不会有来自模拟器上不存在的应用程序的字符串,但应该有来自框架的几乎所有字符串)。

模拟器的框架目录是相对于你的Xcode安装目录和类似的东西(从内存中键入,根据需要更改版本):

Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/System/Library/Frameworks/UIKit.framework/

首先,我会查看UIKit.framework/en.lproj/*.strings(或English.lproj或en_US.lproj)。字符串文件是plist,通常是设备上的二进制plist(此类文件以"bplist00"开头)。有多种打开方式:TextWrangler将自动将plist显示为XML,命令行工具plutil将转换为其他格式。我使用bash别名

alias plist-dump='plutil -convert xml1 -o /dev/stdout --'

当你找到字符串时,你有几个选项:

  • 在运行时使用类似的东西直接从框架加载它

    [[NSBundle bundleWithIdentifier:...] localizedStringForKey:@"DONE" value:nil table:...]
    

    这是不推荐的。不能保证它能在不同的操作系统版本上运行。(在实践中,像"完成"这样的字符串可能不会移动,但替代方法足够简单,不值得大惊小怪。)

  • 将字符串复制到项目中。我不知道有什么工具可以自动做到这一点并与现有的Localizable.strings合并,但它可能存在于某个地方,编写起来不会太困难法律上有点可疑(但不会比用眼睛复制你关心的语言的字符串更可疑);我肯定会避免在预发布SDK上做这件事,以避免担心苹果的保密协议。

  • 将整个字符串文件复制到例如UIKit.strings中,并使用类似NSLocalizedStringFromTable(@"DONE",@"UIKit",nil)的内容。很可能是侵犯版权!

在实践中,我认为苹果不太可能关心将iOS中的一些字符串/图像复制到iOS应用程序中。将它们复制到安卓应用程序中完全是另一回事。。。

只需在项目设置中添加所需的本地化,所有系统内容,如done按钮,如果您添加它,将按设备区域设置进行本地化,否则它将使用您也应该设置的默认语言。

对于自定义按钮:

[self.myButton setTitle:NSLocalizedString(@"my localizable title", @"") forState:UIControlStateNormal];

它也适用于项目中的任何NSString。

NSString *someText = NSLocalizedString(@"my localizable title", @"");
self.myLabel.text = someText;

无论如何,您应该通过添加所需的本地化来使您的应用程序可本地化。

之后只需遵循以下说明:

http://www.raywenderlich.com/2876/how-to-localize-an-iphone-app-tutorial

但我真的建议你们在项目结束时这样做。

最新更新