iOS国际化及应用内部实现国际化

iOS国际化

 转载:1、点击打开链接

包含了App程序的国际化化例如App名字的国际化 、应用内部内容的国际化

转载:2、点击打开链接

介绍的很详细,包括了图片,xib,storyboar的国际化,还分享了swift版的demo

iOS应用内切换国际化

/* Method for retrieving localized strings. */
- (NSString *)localizedStringForKey:(NSString *)key value:(nullable NSString *)value table:(nullable NSString *)tableName NS_FORMAT_ARGUMENT(1);

应用内部实现切换多语言关键是调用NSBundl的此方法

key代表在xx.strings文件中文本对应的关键字,value可以直接设为nil,tableName代表xx.strings文件的名字比如:

  NSString *inviteMsg = [bundle localizedStringForKey:@"title" value:nil table:@"Localizable"];

就是从Lcalizable.strings中读取key为title的文本,bundel代表Localizable.strings文件的路径

1是项目中的国际化文件,2是在资源文件中的文件位置,每一个Localizable.strings不同语言的文件会放在各自对应语言的文件夹中

Localizable.strings(chinese(Simplifief)) 简体中文 就放在 zh-Hans.lproj文件中,

   
        //获取系统当前语言版本(中文zh-Hans,英文en)
        
        NSArray* languages = [def objectForKey:@"AppleLanguages"];
        
        NSString *current = [languages objectAtIndex:0];
        

可以根据上面的代码获取系通同语言;中文简体的话 current = @"zh-Hans";

 //获取文件路径
    NSString *path = [[NSBundle mainBundle] pathForResource:current ofType:@"lproj"];
    
    bundle = [NSBundle bundleWithPath:path];//生成bundle

在通过上面红色字体的NSBundel的方法获取key对应的文本,返回的是current语言对应的文本

current = @"zh-Hans" 返回的就是中文

所以可以收到设置curren,文本的国际化后的文本,再去显示。就可以做到应用内部切换国际化了例如

    NSString *path = [[NSBundle mainBundle] pathForResource:@"zh-Hans" ofType:@"lproj"];
    
    bundle = [NSBundle bundleWithPath:path];//生成bundle

NSString *inviteMsg = [bundle localizedStringForKey:@"title" value:nil table:@"Localizable"];
inviteMsg 在任何系统的语言下,都会返回中文


需要注意的是ios系统不同版本current会有所不同

iOS7之前是

zh-Hans: 简体
zh-Hant: 繁体


iOS8之前是
zh-Hans: 简体
zh-Hant: 繁体
zh-HK: 香港繁体(增加)


iOS9是
zh-Hans-CN: 简体(改变)
zh-Hant-CN: 繁体(改变)
zh-HK: 香港繁体  

zh-TW:  台湾繁体(增加)

如果考虑系统的语言设置,读取current时,不能直接去获取bundle,否则zaiios9的情况下,简体中文时current返回是zh-Hans-CN,生产bundel时会找不到文件

因为本地的文件夹名字还是zh-Hans,所以可以通过判断current的前缀,再去读取bundel。

可以通过NSString的hasPrefix:方法判断current前缀是否包含zh-Hans;



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值