我在自定义视图中使用Done
按钮,我想使其标题可以本地化。我知道来自Done
的系统UINavigationBar
按钮已经本地化,以某种方式获取本地化字符串是完美的。有没有办法做到这一点?
仅因为本地化UINavigationBar
按钮而使用整个Done
似乎不合适。
澄清:重点是使用系统使用的相同本地化字符串。
答案 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
但我真的建议你在项目结束时这样做。