iOS多语言适配

1. 基本设置

(1) Localizable.strings的Strings File文件

第一步: 创建一个名字为Localizable.strings的Strings File文件(名字不可以错).在各个语言文件里面编写自定义的键值对,然后使用系统函数NSLocalizedString(@"自定义的key", "描述可为nil")通过key拿到对应的value值;


第二步:在Project的info里添加所需要支持的语言,这里选择的是Chinese(Simplified)和English-Development Language,会让你勾选语言适配方式,点击Finish。

这里写图片描述

这里写图片描述

第三步:创建Localizable.strings文件(注意:文件名最好不要随意更改)作为多语言对应的词典,存储多种语言。

(1)点击Localizable.strings文件右侧Localize…
(2)继续在Localization里添加所要支持的语言,将其勾选上。
这里写图片描述
这里写图片描述

第三步:最后就可以在Localizable.strings里随意设置所需要支持的语言啦。

这里写图片描述
如下图:
这里写图片描述

这里写图片描述

这里写图片描述

第四步:应用

(1)Localizable.strings内设置格式:

    "testName" = "测试名称"

    

(2)NSLocalizedString代替String:

    NSLocalizedString(@"testName",nil)

如下图:

这里写图片描述

(2)  自定义一个.strings文件在里面适配,然后通过NSLocalizedStringFromTable(@"自定义的KEY",@"文件名" , @"描述内容可为nil")获取不同的文件内容,应用内语言切换使用的就是这一种方式。

例子:

我们先创建用于中英文适配的两个Localizable_CN.strings和Localizable_EN.strings文件(名字可自定义)。

在Localizable_CN.strings自定义内容

"tips" = "国际化";

"messages" = "你看不出来这是个内容吗!";

"cancelBtn" = "取消";

"sureBtn" = "确定";

在Localizable_EN.strings自定义内容

"tips" = "tip";

"messages" = "messages";

"cancelBtn" = "cancle";

"sureBtn" = "fixed";

然后在storyboard中拖入两个按钮并添加点击事件,通过文件名来切换不同的语言.

//

    //  ViewController.m

    //  -多语言-I18N-国际化

    //

    //  Created by apple on 16/10/5.

    //  Copyright (c) 2016 lilinjie. All rights reserved.

    //

    

#import "ViewController.h"

    

    @interface ViewController ()

    @property(nonatomic,copy) NSString *fileName;

    @end

    

    @implementation ViewController

    

    - (void)viewDidLoad {

        [super viewDidLoad];

        self.fileName = @"Localizable_CN";

    }

    - (IBAction)chineseBtnClick {

        self.fileName = @"Localizable_CN";

    }

    

    - (IBAction)englishBtnClick {

        self.fileName = @"Localizable_EN";

    }

    

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

        

        NSString *tips = NSLocalizedStringFromTable(@"tips", self.fileName, nil);

        NSString *messages = NSLocalizedStringFromTable(@"messages", self.fileName,nil);

        NSString *cancelBtn = NSLocalizedStringFromTable(@"cancelBtn",self.fileName,nil);

        NSString *sureBtn = NSLocalizedStringFromTable(@"sureBtn", self.fileName,nil);

        

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:tips message:messages delegate:nil cancelButtonTitle:cancelBtn otherButtonTitles:sureBtn, nil nil];

        [alert show];

    }

    

 @end


项目中可以通过对全局文件名的更改来切换不同的语言.

2.StoryBoard设置

storyboard同Localizable.strings类似。

第一步:选中storyboard,选择ShowtheFileInspector,在Localization选择所需要支持的语言。
这里写图片描述
第二步:在Main.strings(Chinese(Simplified))和Main.strings(English)里设置语言。
Main.strings里的格式比较特殊,如下所示:

/* Class = "UILabel"; text = "测试"; ObjectID = "C9P-Sr-3Z4"; */

    "C9P-Sr-3Z4.text" = "测试";

获得Object ID 的方法:
这里写图片描述

3. XML

我们自定义创建个名为Localize_XML.strings的文件

如果你不会XML格式的话也没事,在info.plist 右键->Open As ->Source Code中可以看见这种格式.

然后复制过来删掉中间的内容留下一对键值对来进行操作

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">

    <dict>

        

        <key>tips</key>

        <string>tip</string>

        

        <key>messages</key>

        <string>你看不出来这是一个内容嘛?</string>

        

        <key>cancelBtn</key>

        <string>取消</string>

        

        <key>sureBtn</key>  

        <string>确定</string>  

        

    </dict>  

</plist>

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    

    self.fileName = @"Localize_XML";

    

    NSString *tips = NSLocalizedStringFromTable(@"tips", self.fileName, nil);

    NSString *messages = NSLocalizedStringFromTable(@"messages", self.fileName,nil);

    NSString *cancelBtn = NSLocalizedStringFromTable(@"cancelBtn",self.fileName,nil);

    NSString *sureBtn = NSLocalizedStringFromTable(@"sureBtn", self.fileName,nil);

    

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:tips message:messages delegate:nil cancelButtonTitle:cancelBtn otherButtonTitles:sureBtn, nil nil];

    [alert show];

}

4.图片设置

图片设置也和Localizable.strings类似,图片资源存放在Images.xcassets里,使用时将不同语言的图片资源在Localizable.strings里一一对应设置;

第一步:添加图片

这里写图片描述

第二步:往Localizable.strings中添加图片名

这里写图片描述

Localizable.strings (English)

    

    "imageName" = "picEnglish";

    

Localizable.strings (Chinese(Simplified))

    

    "imageName" = "picSimple";

第三步:应用

这里写图片描述

应用名设置

第一步:添加InfoPlist.strings

文件名命名为:InfoPlist.strings (注意取名字的时候必须是InfoPlist.strings,否则的话是无效的。创建完之后点击InfoPlist.strings文件在右部选项框有个localization的本地化选项)
这里写图片描述

第二步:添加应用名

InfoPlist.strings (English)

    

    "CFBundleDisplayName" = "EnglishName";

    

InfoPlist.strings (Chinese(Simplified))

    

    "imageName" = "中文名";

这里写图片描述

6 货币值设置

货币显示在不同的国家是有区别的,例如:10000可以写作”10,000”也能写作”10.000”。针对这种情况可以使用NSNumberFormatter格式化,例如:

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];

    

[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];

    

NSString *numberString = [numberFormatter stringFromNumber:@(10000)];

    

UILabel *testLable = [[UILabel alloc] init];

    

testLable.text = [NSString stringWithFormat:NSLocalizedString(@"testNum:%@", nil), numberString];

7 启动页设置

根据内容去判断:

   

获得当前设备的语言

//取得用户默认信息

   NSUserDefaults *defaults = [ NSUserDefaults standardUserDefaults ];

// 取得iPhone 支持的所有语言设置

NSArray *languages = [defaultsobjectForKey : @"AppleLanguages" ];

NSLog (@"%@", languages);

    

// 获得当前iPhone使用的语言

NSString* currentLanguage =[languages objectAtIndex:0];

NSLog(@"当前使用的语言:%@",currentLanguage);

if ([currentLanguage isEqualToString:@"zh-Hans-CN"]) {

        //中文启动页

    }

else if ([currentLanguage isEqualToString:@"en-CN"]){

        //英文启动页

    }


  8.上架时适配多语言

项目中适配完之后就是上架的多语言了,在app信息和发布中都有一个语言选项

   

选择相应语言填写好信息即可。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值