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

时间:2013-02-21 23:46:21

标签: iphone objective-c cocoa localization uinavigationbar

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

仅因为本地化UINavigationBar按钮而使用整个Done似乎不合适。

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

2 个答案:

答案 0 :(得分:3)

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

模拟器的框架目录是相对于你的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)。字符串文件是plists,通常是设备上的二进制plists(此类文件以“bplist00”开头)。有多种方法可以打开它们:TextWrangler会自动将plists显示为XML,命令行工具plutil将转换为其他格式。我使用bash别名

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

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

  • 在运行时直接从框架加载它,如

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

    不推荐。我不能保证它可以在不同的操作系统版本上运行。 (在实践中,像“完成”这样的字符串可能不会移动,但替代方案很容易,不值得大惊小怪。)

  • 将字符串复制到项目中。我不知道有一个工具可以自动执行此操作并与现有的Localizable.strings合并,但它可能存在于某处,并且编写起来也不会太难。 略微在法律上可疑(但不比用你所关心的语言通过眼睛复制字符串更多);我肯定会避免在预发布SDK上进行,以避免担心Apple的NDA。

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

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

答案 1 :(得分:1)

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

对于自定义按钮:

[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

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