iOS支持多语言

多语言的使用

有些时候,我们的App可能不只是针对国内的用户,这时候就需要支持多种语言,好让不同国家的用户都可以使用,这时候就要支持多语言了。

  1. 找到info→Localizations→+选择需要添加的语言
    这里写图片描述

  2. 新建strings文件,名字为Localizable
    这里写图片描述

3.为Localizable.strings添加不同的支持语言
这里写图片描述
这里写图片描述

4.在string文件中设置不同的key值对应在不同语言下应该显示的字符
这里写图片描述
这里写图片描述

5.使用示范

UILabel * lb =[[UILabel alloc]initWithFrame:CGRectMake(40, 100, 200, 40)];
    NSString *  t =NSLocalizedString(@"testName", nil);
    lb.text =t;
    [self.view addSubview:lb];

当你的手机默认语言为中文时就会调用chinese里面的设置,为英文时会调用english里面的

6.注意
如果创建的时候,string文件的名字不是用的Localizable,则使用字符串时,应该使用NSLocalizedStringFromTable方法,如下

NSString * t = NSLocalizedStringFromTable(@"testName", @"File",nil);

7.创建InfoPlist.strings文件可以控制app的名字。

CFBundleDisplayName="中国";
CFBundleDisplayName="China";

无匹配时使用固定语言

比如app适配了中文和英文,当用户手机的系统语言为法语时,系统默认是按照手机设置里语言的顺序来选取默认语言文件,此时如果想要让app使用英语。有两种方法。

方法一

NSMutableArray *langArray = [[NSMutableArray alloc]initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"]];
    NSLog(@"%@",langArray);
    NSUInteger def_lang_index = [langArray indexOfObject:@"en"];
    if (def_lang_index != 1 && def_lang_index != 0) {
        NSMutableArray *tempArray = [NSMutableArray arrayWithObjects:langArray[0], @"en",nil];
        [langArray removeObject:@"en"];
        [langArray removeObject:langArray[0]];

        [tempArray addObjectsFromArray:langArray];

        [[NSUserDefaults standardUserDefaults] setObject:tempArray forKey:@"AppleLanguages"];
        [[NSUserDefaults standardUserDefaults]synchronize];
    } 

这段代码的意思是:先获取到当前手机已经本地化的语言列表,因为第一个肯定是当前手机的语言,所以如果我们想要使用的默认的英文不是第二个的时候,我们用排序把他放到第二。

需要注意的是,这份代码必须放在main.m文件里面UIApplicationMain()之前,否则,应用本次是不起作用的,只能在下次起作用。

方法二:根据语言选取语言包地址

static NSBundle *bundle = nil;  

- (NSString*)getCurrentLanguage  
{  
    NSArray *langArray = [[NSUserDefaults standardUserDefaults] arrayForKey:@"AppleLanguages"];  
    return langArray[0];  
}  

- (void)setLanguage:(NSString *)l {  
    NSLog(@"preferredLang: %@", l);  
    NSString *path = [[ NSBundle mainBundle ] pathForResource:l ofType:@"lproj" ];  
    if (!path) {  
        path = [[ NSBundle mainBundle ] pathForResource:@"en" ofType:@"lproj" ];  
        //[self resetLocalization];  
    }  
    bundle = [NSBundle bundleWithPath:path];  

}  

- (NSString *)get:(NSString *)key alter:(NSString *)alternate {  
    return [bundle localizedStringForKey:key value:alternate table:nil];  
}  

这几个方法分别是获得当前语言,设置语言——如果没有资源文件就是用默认语言,最后的get:alter:方法就是实际调用的方法

参考文章:http://blog.csdn.net/shaobo8910/article/details/48295327

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值