美文网首页
GHLLocalizable:iOS应用内语言设置工具

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

作者: 与佳期 | 来源:发表于2018-03-15 12:32 被阅读37次

    原文 : 与佳期的个人博客(gonghonglou.com)

    之前我写过一篇关于 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 文件可以展开并存在两个配置文件,一份英文,一份中文。
    分别在两个文件内输入对应的语言,比如在英文文件里输入:

    "这是一段本地化语言的文字" = "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 这个小工具能稍稍减轻一些你的工作量,欢迎使用。

    后记

    相关文章

      网友评论

          本文标题:GHLLocalizable:iOS应用内语言设置工具

          本文链接:https://www.haomeiwen.com/subject/ccfhqftx.html