2

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

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

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

4

2 回答 2

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)。字符串文件是 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 应用程序中完全是另一回事......

于 2013-02-23T16:38:41.837 回答
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

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

于 2013-02-21T23:52:12.963 回答