网上很多这类的介绍,不过一般的都是说到一半就突然没有了潦草结尾,或者是无配图的全文字介绍。 所以写这篇文章,希望看了这篇文章的人可以省了到处扒资料的时间。
1.适配storyboard
项目->PROJECT->info->Localizations 点击加号 选择需要适配的语言
添加完之后时候我们可以看见storyboard文件下会多出来一个.strings(Chinese(Simplified))文件,他会自动的把你storyboard上的控件文字显示出来然后自行更改。比如我在storyboard添加一个UILabel取名为文字显示为中文,然后新添加一个日语,此时我们会看见又多了一个文件,自行适配里面的文本。
切换系统语言可以看见UILabel文本的会随适配的所变化。
建议:最好把界面搭建后再去做适配,这样会自动生成,比较方便。如果你是中途更改了或者是多人开发时,可以先把适配好的文本复制出来保存好,然后重新生成新的文件,这样做的话前面的标示符(如上图d90-Cd-92N.text)还是一样的,再找到已经保存过的文本删除掉,把保存好的复制进去,适配新的文字。
2.适配应用名称
在xcode6之前我们创建项目时系统默认会帮我们创建InfoPlist.strings文件,该文件用于设置应用的一些名字,所以我们用这个文件去适配,现在需要我们手动创建。
注意取名字的时候必须是InfoPlist.strings,否则的话是无效的。创建完之后点击InfoPlist.strings文件在右部选项框有个localization的本地化选项
点击Localize后会出现弹框,选择Base后Localize,现在Localization属性会变成这样
这里会对应的出现我们开始在项目->PROJECT->info->Localizations里添加的语言文本,我们只要把需要适配的语言勾上,在InfoPlist.strings文件下就会自动生成对应的适配文件。
这时我们需要在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];
}
例子:
我们先创建用于中英文适配的两个Localizable_CN.strings和Localizable_EN.strings文件(名字可自定义)。
在Localizable_CN.strings自定义内容
"tips" = "国际化";
"messages" = "你看不出来这是个内容吗!";
"cancelBtn" = "取消";
"sureBtn" = "确定";
"tips" = "tip";
"messages" = "messages";
"cancelBtn" = "cancle";
"sureBtn" = "fixed";
//
// 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信息和发布中都有一个语言选项
选择相应语言填写好信息即可。