[IOS]本地化
我们在IOS开发应用中,会碰到做好的一个应用,如何趋向国际化,也就是说支持多种语言?下面我就来简单演示一下,用一个Demo来实现中文和英文的实现。
实现步骤:
1.本地化项目中xib的view
1.在view中添加几个label,把对应的属性绑定好。
2.ViewController.h:
#import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (retain, nonatomic) IBOutlet UILabel *languageee; @property (retain, nonatomic) IBOutlet UILabel *label1; @property (retain, nonatomic) IBOutlet UILabel *label2; @end
3.ViewController.m:
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; NSLocale * locale = [NSLocale currentLocale]; NSString * str = [locale displayNameForKey:NSLocaleIdentifier value:[locale localeIdentifier]]; self.languageee.text = str; self.label1.text = NSLocalizedString(@"name",nil); self.label2.text = NSLocalizedString(@"sex", nil); } - (void)dealloc { [_languageee release]; [_label1 release]; [_label2 release]; [super dealloc]; } @end
4.创建xib的其他语言的版本,具体操作:
1.点击项目(蓝色的图标),然后点击打开PROJECT的项目图标,打开Localizations,勾选上Use Base Internationalizatino,会自动创建一个Basexib文件,然后点击+,添加其他的语言版本,本来默认的是english的,那么我们在创建一个Chinese,第一个选项卡。
2.然后点击xib,鼠标移动到最右边选择属性那一栏最左边的选项卡,打开Localization,勾选上相应的选项,支持的多语言文件。
3.点击修改相应的ViewController.strings(Chinese)中的数据:
/* Class = "IBUILabel"; text = "Label"; ObjectID = "8"; */
"8.text" = "Label";
/* Class = "IBUILabel"; text = "Label"; ObjectID = "11"; */
"11.text" = "Label";
/* Class = "IBUILabel"; text = "Label"; ObjectID = "14"; */
"14.text" = "Label";
/* Class = "IBUILabel"; text = "name"; ObjectID = "20"; */
"20.text" = "姓名";
/* Class = "IBUILabel"; text = "sex"; ObjectID = "24"; */
"24.text" = "性别";
/* Class = "IBUIButton"; highlightedTitle = "HaHa"; ObjectID = "28"; */
"28.highlightedTitle" ="HaHa";
/* Class = "IBUIButton"; normalTitle = "Button"; ObjectID = "28"; */
"28.normalTitle" ="Button";
/* Class = "IBUISegmentedControl"; 32.segmentTitles[0] = "First"; ObjectID = "32"; */
"32.segmentTitles[0]" ="First";
/* Class = "IBUISegmentedControl"; 32.segmentTitles[1] = "Second"; ObjectID = "32"; */
"32.segmentTitles[1]" ="Second";
对应的English的文件也修改成英文版的
以上是本地化的view中静态的label控件中的数据,如果是动态的,就是如果在.h文件相关联的数据控件,那么就要现在.m文件中先写上例如:
self.label1.text = NSLocalizedString(@"name",nil); self.label2.text = NSLocalizedString(@"sex", nil);
这样才方便在后面自动创建的配置文件中自动生成相应的注册的对象。
4.自动生成对应的动态数据的文件
/* No comment provided by engineer. */
"name" ="小明";
/* No comment provided by engineer. */
"sex" ="男";
将对应的中文和英文包中的文件都改成相应的语言
2.本地化应用程序名
在各个语言对应的文件中修改CFBundleDisplayName = "English";还有“中文”,后面测试的话会发现如果模拟器设置的语言不一样,那么这个程序对应的应用名也不一样。
3.本地化图片
测试结果:
对应的应用文件名也是: