[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.自动生成对应的动态数据的文件

打开终端,输入cd 然后将文件拖放在终端中,自动生成对应的路径,然后输入genstrings ./LocateDemo/*.m
会发现在项目中自动生成了一个Localizable.strings的文件,然后在对应的en.lproj和zh-Hans.lproj也就是两个对应的语言的文件包里面都复制一份这个文件,
然后导入到项目中,点击相应的文件会发现自动生成了相应的字段

/* No comment provided by engineer. */

"name" ="小明";

/* No comment provided by engineer. */

"sex" ="";

将对应的中文和英文包中的文件都改成相应的语言

2.本地化应用程序名

    创建SingleView的项目之后会发现有一个LocateDemo-Info.plist文件,双击打开文件,右击->Show Row Keys/Values,拷贝CFBundleDisplayName,到InfoPlist.strings
中,也将这个文件本地化一下,生成两中语言的文件,然后

在各个语言对应的文件中修改CFBundleDisplayName = "English";还有“中文”,后面测试的话会发现如果模拟器设置的语言不一样,那么这个程序对应的应用名也不一样。

3.本地化图片

例如两种语言,我想根据英语和中文不同的环境导入不同的国旗,美国国旗和中国国旗,在界面中拖放一个ViewImage,然后就图片资源拖放近项目,也点击一下本地化,在生成一个 另外一种语言环境下的图片,然后在对应的文件中修改这个图片,但必须确保两个文件中的图片名字是一样的才行。


测试结果:

切换至英文模式:

在setting中设置,切换回中文的


对应的应用文件名也是:



项目下载
















本文转蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366404,如需转载请自行联系原作者

相关文章
|
8月前
|
存储 iOS开发
iOS 开发,如何进行应用的本地化(Localization)?
iOS 开发,如何进行应用的本地化(Localization)?
235 2
|
iOS开发 机器学习/深度学习 自然语言处理
iOS - Localizable 国际化
1、国际化 开发的移动应用更希望获取更多用户,走向世界,这就需要应用国际化,国际化其实就是多语言,系统会根据当前设备的语言环境来识别 App 中使用中文还是英文。 2、应用内容国际化 1、新建一个名为 Localizable.strings 的资源文件。
1823 0
iOS11 适配相关
刷新之后首页顶上去的问题怎么处理
45 0
|
自然语言处理 iOS开发
iOS 开发之 国际化/本地化 配置
iOS 开发之 国际化/本地化 配置
701 0
iOS 开发之 国际化/本地化 配置
|
数据可视化 iOS开发 MacOS
IOS适配
IOS适配
219 0
IOS适配
|
Web App开发 iOS开发
iOS14 适配canOpenURL问题
部分升级到iOS 14的用户,在点击链接跳转的时候,*[[UIApplication sharedApplication]canOpenURL:url]*返回false
1272 0
|
API iOS开发 安全
|
iOS开发
【Xamarin.iOS】使用iOS 11进行大型游戏
iOS 11中更明显的用户界面更改之一是系统应用程序中使用的较大的标题,从App Store和Apple Music到Notes和Mail。 健康和联络应用如下所示: 当内容被滚动时,该标题在屏幕上显示动画并缩小到正常大小的导航栏,以便有效地使用屏幕空间。
1040 0