我在自定义视图中使用Done
按钮,我想让它的标题可本地化。我知道系统Done
按钮UINavigationBar
已经本地化,以某种方式获取本地化字符串将是完美的。有没有办法做到这一点?
UINavigationBar
仅因为本地化按钮而使用整体Done
似乎是不合适的。
澄清:重点是使用系统使用的相同本地化字符串。
我在自定义视图中使用Done
按钮,我想让它的标题可本地化。我知道系统Done
按钮UINavigationBar
已经本地化,以某种方式获取本地化字符串将是完美的。有没有办法做到这一点?
UINavigationBar
仅因为本地化按钮而使用整体Done
似乎是不合适的。
澄清:重点是使用系统使用的相同本地化字符串。
没有从操作系统获取标准字符串的官方方法,但很可能所有字符串都在本地化字符串文件中,并且其中大部分都存在于模拟器上(它不会有来自应用程序的字符串'不存在于模拟器上,但应该具有框架中的几乎所有字符串)。
模拟器的框架目录是相对于你的 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:...]
不建议这样做。不能保证它可以在不同的操作系统版本上运行。(实际上,像“Done”这样的字符串可能不会移动,但替代方法很简单,不值得大惊小怪。)
将字符串复制到您的项目中。我不知道有一种工具可以自动执行此操作并与您现有的 Localizable.strings 合并,但它可能存在于某个地方并且不会太难编写。在法律上有点可疑(但仅比用眼睛复制您关心的语言的字符串更重要);我肯定会避免在预发布的 SDK 上这样做,以避免担心 Apple 的 NDA。
将整个字符串文件复制到 egUIKit.strings
并使用类似NSLocalizedStringFromTable(@"DONE",@"UIKit",nil)
. 很可能是侵犯版权!
实际上,我认为 Apple 不太可能关心将少量字符串/图像从 iOS 复制到 iOS 应用程序中。将它们复制到 Android 应用程序中完全是另一回事......
只需在项目设置中添加所需的本地化,所有系统内容(如完成按钮)都将通过设备区域设置进行本地化,如果您添加它,则它将使用您也应该设置的默认语言。
对于自定义按钮:
[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
但我真的建议你在项目结束时这样做。