GHLLocalizable:iOS应用内语言设置工具

之前我写过一篇关于 iOS应用程序语言本地化及应用内语言设置,但是因为最近新开了两个新的项目,在新建工程搭建各种配置中发现为了给项目添加「应用内语言设置」这项功能,每次都要新建 Localizable 文件及 NSBundle 的 Category 文件,感觉很烦,所以写了一个工具(GHLLocalizable)出来,通过 CocoaPods 添加到工程以节省劳动力,并且整理一下这部分内容以及介绍 GHLLocalizable 使用姿势。

这篇文章主要包含两部分内容:
1、应用程序语言本地化
2、应用内语言设置

应用程序语言本地化

添加语言包

如下图,点击 PROJECT -> info -> Localizations 这里默认只有 English 点击下方的加号可以添加你想要的语言,比如这里添加的中文 Chinese(Simplifid) 。

注意: zh-Hans 是简体中文, zh-Hant 是繁体中文。

配置Project

新建 .strings 配置文件

1、Command + N 新建 Strings File 文件,命令为 Localizable(固定名称),会生成一份 Localizable.strings 文件。

2、选中Localizable.strings 文件,如下图操作,点击 Localize... 按钮,左侧弹框中选择语言。

Localize...

3、之后右侧会如下图显示,勾选上你想要的语言即可(Base 无用)

Localization

4、当勾选两门语言后,会发现Localizable.strings 文件可以展开并存在两个配置文件,一份英文,一份中文。
分别在两个文件内输入对应的语言,比如在英文文件里输入:

1
"这是一段本地化语言的文字" = "This is a text of a localised language";

中文文件里输入:

1
"这是一段本地化语言的文字" = "这是一段本地化语言的文字";

前边对应 键(key) ,后边对各个语言的 值(value)。

以上,是对工程本地化语言的配置,完成上述操作,iOS应用程序语言本地化就已经能实现了,你可以通过更改系统语言来测试一下。

应用程序名称语言本地化

参考上一步的内容,创建一份 InfoPlist.strings 文件。

分别在 InfoPlist.strings 的两个文件内输入对应的应用程序名称,比如在英文文件里输入:

1
CFBundleDisplayName = "gonghonglou";

中文文件里输入:

1
CFBundleDisplayName = "与佳期";

你可以通过更改系统语言来测试一下。

应用内语言设置

使用 GHLLocalizable 获取软件语言、设置语言、监听语言改变等操作。

使用方法:

1、初始化该工具类,比如在 AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法里:

1
[GHLLocalizableController initUserLanguage];

2、更改语言方法:

1
2
3
4
5
// 设置中文
[GHLLocalizable setUserlanguage:GHLChinese_Hans];

// 设置英文
[GHLLocalizable setUserlanguage:GHLEnglish];

3、使用 NSLocalizedString(<#key#>, <#comment#>)方法 给所有文字添加本地化语言方法:

1
label.text = NSLocalizedString(@"这是一段本地化语言的文字", nil);

4、监听语言更改通知:

1
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(languageChange:) name:GHLNotificationLanguageChanged object:nil];

记得删除通知,比如在 - (void)applicationWillTerminate:(UIApplication *)application方法里:

1
[[NSNotificationCenter defaultCenter] removeObserver:self name:GHLNotificationLanguageChanged object:nil];

5、实现通知方法:

1
2
3
4
- (void)languageChange:(NSNotification *)note {
// 在该方法里实现重新初始化 rootViewController 的行为,并且所有带有文字的页面都要重新渲染
// 比如:[UIApplication sharedApplication].keyWindow.rootViewController = ...;
}

OK,希望 GHLLocalizable 这个小工具能稍稍减轻一些你的工作量,欢迎使用。

后记