MiawKit 是一个用于本地化 iOS 和 OS X 应用的实用工具集合。该工具包由三个不同的部分组成,它们可以很好地协同工作。第一部分是一系列用于替换 `NSLocalizedString` 的函数。第二部分是一系列 UIKit 和 AppKit 类别,如标签和按钮,使得单视图部分的本地化更容易。最后一部分是一个脚本,可以将您字符串文件中的本地化密钥转换为代码中的常量。
MiawKit 支持同时使用 CocoaPods 和 Carthage。如果您使用 CocoaPods,请在您的 `Podfile
` 中添加此行:
pod 'MiawKit', '~> 1.2'
如果您打算使用 MiawKit 的脚本部分,您将需要手动将 `miaw 脚本` 复制到您项目的根目录中。
MiawKit 的一个重要部分是它的命令行实用工具本身。这是一个生成所有本地化密钥常量的简小 Ruby 脚本。它可以避免在代码中出现“字符串类型”的键,并有助于 Xcode 自动完成您的本地化键。`miaw` 通过搜索项目目录中的所有位于 `.lproj` 目录下的 `.strings` 文件来工作。它生成包含每个找到的键的常量的 `MKLocalizableKeys.h
` 文件。每个常量都会用找到的该键的所有本地化文档化。以下是一个例子
/*!
* "Let's play Wordbase!"
* All translations:
* @b da@: "Lad os spille Wordbase!"
* @b en@: "Let's play Wordbase!"
* @b es@: "¡Vamos a jugar a Wordbase!"
* @b fi@: "Pelataan Wordbase-peliä!"
* @b nb@: "La oss spille Wordbase!"
* @b sv@: "Spela Wordbase med mig!"
*/
static NSString * const RK_FACEBOOK_INVITE_TITLE = @"RK_FACEBOOK_INVITE_TITLE";
XCode 甚至足够智能,可以通过在本地化键常量上按下 Alt-click 来显示文档,从而查看键的翻译。
请确保将 `miaw
` 文件复制到您项目的根目录,并运行以下命令:
./miaw --g
这将生成在您根目录中的 `MKLocalizaableKeys.h
` 文件。将此文件包含到您的 Xcode 项目中,您就准备就绪了。
运行 `miaw -h
` 了解如何使用 `miaw
` 的更多信息。
MiawKit 提供了一个简单的 API 用于注册本地化更改。在您的代码库中,当它们被显示或语言更改时需要更新以进行本地化的类可以使用 MKLocalization
的 registerForLocalization:
方法进行更改注册
/*!
* Register an object implementing the MKLocalizable protocol
* for localization. Calling this method will invoke the
* -shouldLocalize method of the passed object immediately. It
* will also invoke the method if the preferred language changes.
* @param localizableObject The object to register for localization
*/
+ (void)registerForLocalization:(id<MKLocalizable>)localizableObject;
您的类需要符合 MKlocalizable
协议,当需要本地化更改时,该协议会调用 shouldLocalize
。以下是一个如何在 UIViewController
中使用 API 的示例。
- (void)viewDidLoad {
[self viewDidLoad];
[MKLocalization registerForLocalization:self];
}
- (void)shouldLocalize {
[self.awesomeLabel mk_localize];
[self.awesomeOtherLabel mk_localizeWithFormat:MK_AWESOME_OTHER_LABEL, self.awesomeValue];
}
如果您想更改应用内的语言,可以使用 changeLocalizationTo:
来更改语言。所有注册对象将重新本地化。
/*!
* Change the preferred language to a given language. Changing the
* preferred language will invoke the -shouldLocalize method of all
* registered localizable objects.
* @param language The language identifier for the new language
*/
+ (void)changeLocalizationTo:(NSString *)language;
Apple 没有提供任何官方 API 来支持与应用程序系统或用户区域设置不同的应用程序。MiawKit 使用将 AppleLanguages
设置在 [[NSUserDefaults] standardDefaults]
中的当前首选语言代码的约定。请注意,依靠的其他第三方库可能不遵循此约定。
MiawKit 为 UIButton 和 UILabel 提供了有用的分类方法,以简化 UI 元素的本地化。这两个分类共享使用标题作为键进行本地化的方法
[self.awesomeLabel mk_localize];
或给出键
[self.awesomeLabel mk_localize:MK_AWESOME_BUTTON];
或使用格式化字符串
[self.awesomeLabel mk_localizeWithFormat:MK_AWESOME_BUTTON, self.awesomeValue];