iOS国际化-多语言适配

网上很多这类的介绍,不过一般的都是说到一半就突然没有了潦草结尾,或者是无配图的全文字介绍。 所以写这篇文章,希望看了这篇文章的人可以省了到处扒资料的时间。

1.适配storyboard

项目->PROJECT->info->Localizations 点击加号 选择需要适配的语言

            iOS国际化-多语言适配_第1张图片


添加完之后时候我们可以看见storyboard文件下会多出来一个.strings(Chinese(Simplified))文件,他会自动的把你storyboard上的控件文字显示出来然后自行更改。比如我在storyboard添加一个UILabel取名为文字显示为中文,然后新添加一个日语,此时我们会看见又多了一个文件,自行适配里面的文本。

          iOS国际化-多语言适配_第2张图片

          

切换系统语言可以看见UILabel文本的会随适配的所变化。

建议:最好把界面搭建后再去做适配,这样会自动生成,比较方便。如果你是中途更改了或者是多人开发时,可以先把适配好的文本复制出来保存好,然后重新生成新的文件,这样做的话前面的标示符(如上图d90-Cd-92N.text)还是一样的,再找到已经保存过的文本删除掉,把保存好的复制进去,适配新的文字。

2.适配应用名称

在xcode6之前我们创建项目时系统默认会帮我们创建InfoPlist.strings文件,该文件用于设置应用的一些名字,所以我们用这个文件去适配,现在需要我们手动创建。

iOS国际化-多语言适配_第3张图片

注意取名字的时候必须是InfoPlist.strings,否则的话是无效的。创建完之后点击InfoPlist.strings文件在右部选项框有个localization的本地化选项

    iOS国际化-多语言适配_第4张图片

点击Localize后会出现弹框,选择Base后Localize,现在Localization属性会变成这样

    iOS国际化-多语言适配_第5张图片

这里会对应的出现我们开始在项目->PROJECT->info->Localizations里添加的语言文本,我们只要把需要适配的语言勾上,在InfoPlist.strings文件下就会自动生成对应的适配文件。

     iOS国际化-多语言适配_第6张图片

这时我们需要在info.plist文件中拿到Bundle display name 的真正的key值 方法:右键->Property List Type ->None

我们可以看见它的key值是CFBundleDisplayName.然后在不同的文件输入对应语言的名称:

“key” = "值";   "CFBundleDisplayName" = "我也不知道叫什么名";  

 切换系统语言即可看见对应的名称。(没有做多语言适配的话默认就用Base里面的数据,默认就是英文); 
  

3.适配项目中所使用的文字

项目中适配文字有三种方式:

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

例子:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    /*
     写在Localizable.strings(Simplified)文件里
     "tips" = "国际化";
     "messages" = "你看不出来这是个内容吗!";
     "cancelBtn" = "取消";
     "sureBtn" = "确定";
     */
    /*
     写在Localizable.strings(English)文件里
     "tips" = "tip";
     "messages" = "messages";
     "cancelBtn" = "cancle";
     "sureBtn" = "fixed";
     */
    
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"tips", nil) message:NSLocalizedString(@"messages", nil) delegate:nil cancelButtonTitle:NSLocalizedString(@"cancelBtn", nil) otherButtonTitles:NSLocalizedString(@"sureBtn", nil), nil];
    [alert show];
}


(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];
    [alert show];
}

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


(3)XML

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

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

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






tips
tip

messages
你看不出来这是一个内容嘛?

cancelBtn
取消

sureBtn
确定



- (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];
    [alert show];
}
方法的选择看个人的喜好。


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

   iOS国际化-多语言适配_第7张图片

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



你可能感兴趣的:(Objective-C)