国际化
Global IM UIKit 内置了简体中文、英文语言包和阿拉伯语言包,并支持国际化。
切换 SDK 支持的语言
Global IM UIKit 默认支持中文、英文、阿拉伯语三种语言,且跟随系统语言切换,需要应用内切换语言,可以使用下面接口切换 Global IM UIKit 的语言:
[RCIMKitConfig shared].languageCode = @"zh_CN";
注意 语言缩写内容格式为 (ISO-639 Language Code)_(ISO-3166 Country Codes),如:zh_CN。目前支持的内置语言为 zh_CN、en、ar
新增语言
如果内置的简体中文、英文、阿拉伯语不满足应用程序业务需求,您也可以新增语言资源。
- 
在工程的 PROJECT -> info 创建 Localizations,选择语言,下面以阿拉伯语示例

 - 
创建一个 Strings 文件,命名必须和 Global IM UIKit 的国际化文件一致,GlobalIMUIKit,点击 Create

 - 
选中新建的 Strings 文件,点击 Localize,在 Xcode 右侧菜单栏选择阿拉伯语

 - 
将 Global IM UIKit 的国际化文件中内容复制到新建的Strings 文件中,修改对应的 value 值为阿拉伯语
 - 
切换语言为阿拉伯语(切换方式可参考下方
切换 SDK 内新增的语言),查看显示 
切换新增的语言
- 
在工程的 PROJECT -> info 创建 Localizations,选择语言,下面以阿拉伯语示例

 - 
创建一个 Strings 文件,命名必须和 Global IM UIKit 的国际化文件一致,GlobalIMUIKit,点击 Create

 - 
选中新建的 Strings 文件,点击 Localize,在 Xcode 右侧菜单栏选择阿拉伯语

 - 
将 Global IM UIKit 的国际化文件中内容复制到新建的Strings 文件中,修改对应的 value 值为阿拉伯语
 - 
切换语言为阿拉伯语,查看显示
 
下面提供一种应用内切换语言的方式供参考:
国际化都会走到 NSBundle 的- (NSString *)localizedStringForKey:(NSString *)key value:(nullable NSString *)value table:(nullable NSString *)tableName 方法,使用自定义 Bundle 替换 NSBundle,来实现 APP 内部切换语言。
增加应用内语言管理类
@interface LocalizedManager : NSObject
+ (instancetype)sharedInstance;
//当前语言
- (NSString *)currentLanguage;
//设置要转换的语言
- (void)setLanguage:(NSString *)language;
//设置为系统语言
- (void)systemLanguage;
@end
@implementation LocalizedManager
+ (instancetype)sharedInstance {
    static LocalizedManager *instance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[LocalizedManager alloc] init];
    });
    return instance;
}
- (NSString *)currentLanguage {
    NSString *language=[[NSUserDefaults standardUserDefaults]objectForKey:AppLanguage];
    return language;
}
- (void)setLanguage:(NSString *)language {
    [[NSUserDefaults standardUserDefaults] setObject:language forKey:AppLanguage];
}
- (void)systemLanguage {
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:AppLanguage];
 }
@end
自定义 CustomBundle 继承 NSBundle
重写mainBundle方法,通过语言管理类获取当前应该加载哪一种语言。
#import "CustomBundle.h"
#import "LocalizedManager.h"
#import <Foundation/Foundation.h>
@interface CustomBundle : NSBundle
@end
@implementation CustomBundle
- (NSString *)localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName {
    if ([CustomBundle custom_mainBundle]) {
        return [[CustomBundle custom_mainBundle] localizedStringForKey:key value:value table:tableName];
    } else {
        return [super localizedStringForKey:key value:value table:tableName];
    }
}
+ (NSBundle *)custom_mainBundle {
    if ([LocalizedManager sharedInstance].currentLanguage.length) {
        NSString *path = [[NSBundle mainBundle] pathForResource:[LocalizedManager sharedInstance].currentLanguage ofType:@"lproj"];
        if (path.length) {
            return [NSBundle bundleWithPath:path];
        }
    }
    return nil;
}
@end
拦截国际化方法
通过分类和runtime来实现拦截,将 NSBundle 替换为自定义 CustomBundle。
#import "NSBundle+RC.h"
#import "RCDLanguageManager.h"
#import <objc/runtime.h>
#import "CustomBundle.h"
#import "LocalizedManager.h"
@interface NSBundle (Custom)
@end
@implementation NSBundle (Custom)
+ (NSString *)currentLanguage {
    return [LocalizedManager sharedInstance].currentLanguage ?: [NSLocale preferredLanguages].firstObject;
}
+ (void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        object_setClass([NSBundle mainBundle], [CustomBundle class]);
    });
}
@end
调用示例
切换为英文
[[LocalizedManager sharedInstance] setLanguage:@"en"];
跟随系统语言
[[LocalizedManager sharedInstance] systemLanguage];