首页 > 白话Cocoa > 本地化你的应用程序

本地化你的应用程序

之前的项目考虑要做一个扩展预留,也就是既支持中文,以后可能支持英文。所以需要对本地化有一定了解,于是我做了一个demo,该demo同时支持中文跟英文。

在中文系统下界面是这样:

a173a19a817dda2f6e6d3e038c994b00

在英文系统下界面是这样:

163966a0cd9231dcc38f9e9407e3e855

 

如果你的程序不仅应用于中国,同时也应用于美国。那么你便需要让你的程序既支持中文,又支持英文。也就是在中文系统里面显示中文,英文系统里面显示英文。这需要对程序做本地化的处理,包括对中文进行本地化,对英文进行本地化。
为了兼容不同的语言,apple对本地化做了很好的支持,通过本地化的技术,我们可以很方便地开发出同时兼容多种语言的程序出来。

下面根据这个程序,简单介绍下既支持英文,又支持中文的本地化做法,主要有五个步骤。

一、对xcode进行设置,添加新的语言支持。
新建的工程,默认是英文,我们在project info里面的Localizations里面添加Chinese(zh-Hans),也即中文简体47f539b0a458cd77cbee40cb2e6f603c

之后,在弹出的框里面选择所有要本地化成中文的文件,并点击确定,在完成此项任务后,Xcode 会更新该项目导航器,以显示新的本地化语言。

aacaebc9508fcd77988e6562039fe849

同时你的项目目录里面多了一个zh-Hans目录。en.lproj存放的是英文的资源文件,zh-Hans.lproj存放的是中文的资源文件

 

759ee2102254dfb31404db890ffa6ec2

 

二、本地化程序的名字,让它的名字在Dock,Finder,任务管理器里面的显示的名字兼容中英文。

2.1、在Info.plist里面添加key为Application has localized display name,value为YES的键值对343c9694cfb8b87a76b6ce183d7dfa9b

 

2.2、在英文的InfoPlist.strings文件里面,添加下面的内容

87d28489e9792e3089c4b1412a819559

2.3,在中文的InfoPlist.strings文件里面,添加下面的内容

478155281839d6def8c66bb52a0f0a47

 

 

三、本地化xib跟图片
本地化xib的做法跟本地化图片的做法一样,现在以图片来说明如何本地化。
添加一张google的logo图片,用于本地化英文。点击“文件属性面板”里面的”Loczlize按钮”;在弹出的对话框里面选择English并点击Localize。这时候这张图片被移到图片所在目录里面的en.lproj目录里面。

dc8bdb2f5cd7807b55fd555f007a84a3

接着再点击Chinese,把图片进行中文的本地化。这时候xcode会把en.lproj里面的logo.png,copy一份到zh-Hans.lproj目录里面

ce7e3e4ba65b61d73cdebfe5c40842da

然后我们到项目的zh-Hans.lproj目录里面,把这张logo替换成中文的百度logo

14ce42f1f05efaa77b25ca5ed5102eca

然后我们在英文的MainMenu.xib文件里面拉上一张图片,图片名称为logo
在中文的MainMenu.xib文件里面拉上一张图片,图片名称为也logo

78653b38c8c82bbf8828ee24130fd783

这时,图片的本地化也就完成了。在中文系统里面将显示baidu的logo,在英文系统里面将显示baidu的logo

四、本地化语言描述

4.1 我们新建一个Strings File,名字为 Localizable,并像第三步本地化图片一样,把它本地化成中文跟英文670d5384ff8b0fd7a0b2809f5372d675

3c5e185b5338ddf41982cf80ea89f32e

4.2 将“Hello”字符串本地化
在项目导航器中,选择 Localizable.strings (English)。
在编辑器中,键入以下文本:

/* The string displayed */
"HELLO" = "Hello, Google";

为了帮助将左边的字符串 (“HELLO”) 识别为键,“Hello”为大写。
在项目导航器中选择 Localizable.strings (Chinese)。
在编辑器中,键入以下文本:

/* The string displayed */
"HELLO" = "您好,百度";

4.3 调用 NSLocalizedString 宏
NSLocalizedString 宏从 Localizable.strings 文件获取当前本地化语言的本地化字符串。
NSLocalizedString(@”HELLO”, @”comment”)。 @”comment”是一个对HELLO变量的注释,可以为空,用nil代替
如果你新建的strings文件不是Localizable.string,比如是Text.strings,那么要使用
NSLocalizedStringFromTable(@”HELLO”, @”Text”, @”comment”);指定文件名来获取。

五、测试你的程序。
打开“系统偏好设置”->”语言与文本”
将简体中文移动到列表的最上面,测试中文本地化

80af38a540d47b2af7425f9e90eb8009

将English移动到列表的最上面,可以测试英文本地化。

题外话:
1、本地化的技术其实非常简单,每一种语言的资源都归类放到该语言对应的目录里面就行。我们称这些目录为lproj目录吧,比如英文对应的目录是en.lproj,中文简体对应的目录是zh-Hans.lproj。然后程序运行的时候,会根据你当前系统的语言来找到对应的语言包,进行本地化地展示。于是我们也可以自己建立相应的lproj目录,放上相应的资源来支持本地化,不需要像本文章前几步那样通过xcode来实现。

2、有时候为了对大项目的目录进行更合理的归类,在里面会建立一个image目录,存放图片。一个xib目录,存放xib。对image目录的图片进行本地化,会在image目录下面生成lproj后缀的目录,对xib目录的xib文件进行本地化,同时也在xib目录里面生成lproj目录。这样同一种语言会在多个目录里面产生lproj目录,但没关系,我们通过xcode build项目生成app的时候,xcode会帮我们把同一语言的所有分散的lproj目录合并成该语言对应的一个lproj目录,放到app目录下面的该语言的lproj目录里。最后合并后你的app目录结构像苹果官网里面展示的如下:
e811823babad023b586833737afd8c0a

33、我们也可以只使用一个xib文件,支持多种语言,而不用每一种语言都分别用一个xib文件来展示。对于复杂一点的界面,由于中英文描述不一样,展示的长度也不一样,我们如果只用一个xib来支持国际化,需要界面里面的控件可以根据实际的情况做自适应,这时候我们需要用到自动布局技术进行国际化。

注:这篇文章是去年写的,一直没放到博客。当时xcode5还没出来,我使用的是xcode4。不过没关系,因为原理性的东西没变。

程序源代码:

https://github.com/helloitworks/Localization

参考资料:
Introduction to Internationalization Programming Topics
https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPInternational/BPInternational.html

 

 

(转载本站文章请注明出处 www.helloitworks.com ,请勿用于任何商业用途)

分类: 白话Cocoa 标签: ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.