原文 : 与佳期的个人博客(gonghonglou.com)
之前我写过一篇关于 iOS应用程序语言本地化及应用内语言设置,但是因为最近新开了两个新的项目,在新建工程搭建各种配置中发现为了给项目添加「应用内语言设置」这项功能,每次都要新建 Localizable 文件及 NSBundle 的 Category 文件,感觉很烦,所以写了一个工具(GHLLocalizable)出来,通过 CocoaPods 添加到工程以节省劳动力,并且整理一下这部分内容以及介绍 GHLLocalizable 使用姿势。
这篇文章主要包含两部分内容:
1、应用程序语言本地化
2、应用内语言设置
应用程序语言本地化
添加语言包
如下图,点击 PROJECT
-> info
-> Localizations
这里默认只有 English
点击下方的加号可以添加你想要的语言,比如这里添加的中文 Chinese(Simplifid) 。
配置Project注意:
zh-Hans
是简体中文,zh-Hant
是繁体中文。
新建 .strings 配置文件
1、Command + N
新建 Strings File
文件,命令为 Localizable
(固定名称),会生成一份 Localizable.strings
文件。
2、选中Localizable.strings
文件,如下图操作,点击 Localize...
按钮,左侧弹框中选择语言。
3、之后右侧会如下图显示,勾选上你想要的语言即可(Base
无用)
4、当勾选两门语言后,会发现Localizable.strings
文件可以展开并存在两个配置文件,一份英文,一份中文。
分别在两个文件内输入对应的语言,比如在英文文件里输入:
"这是一段本地化语言的文字" = "This is a text of a localised language";
中文文件里输入:
"这是一段本地化语言的文字" = "这是一段本地化语言的文字";
前边对应 键(key) ,后边对各个语言的 值(value)。
以上,是对工程本地化语言的配置,完成上述操作,iOS应用程序语言本地化就已经能实现了,你可以通过更改系统语言来测试一下。
应用程序名称语言本地化
参考上一步的内容,创建一份 InfoPlist.strings
文件。
分别在 InfoPlist.strings
的两个文件内输入对应的应用程序名称,比如在英文文件里输入:
CFBundleDisplayName = "gonghonglou";
中文文件里输入:
CFBundleDisplayName = "与佳期";
你可以通过更改系统语言来测试一下。
应用内语言设置
使用 GHLLocalizable 获取软件语言、设置语言、监听语言改变等操作。
使用方法:
1、初始化该工具类,比如在 AppDelegate
的 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
方法里:
[GHLLocalizableController initUserLanguage];
2、更改语言方法:
// 设置中文
[GHLLocalizable setUserlanguage:GHLChinese_Hans];
// 设置英文
[GHLLocalizable setUserlanguage:GHLEnglish];
3、使用 NSLocalizedString(<#key#>, <#comment#>)
方法 给所有文字添加本地化语言方法:
label.text = NSLocalizedString(@"这是一段本地化语言的文字", nil);
4、监听语言更改通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(languageChange:) name:GHLNotificationLanguageChanged object:nil];
记得删除通知,比如在 - (void)applicationWillTerminate:(UIApplication *)application
方法里:
[[NSNotificationCenter defaultCenter] removeObserver:self name:GHLNotificationLanguageChanged object:nil];
5、实现通知方法:
- (void)languageChange:(NSNotification *)note {
// 在该方法里实现重新初始化 rootViewController 的行为,并且所有带有文字的页面都要重新渲染
// 比如:[UIApplication sharedApplication].keyWindow.rootViewController = ...;
}
OK,希望 GHLLocalizable 这个小工具能稍稍减轻一些你的工作量,欢迎使用。
后记
-
小白出手,请多指教。如言有误,还望斧正!
网友评论