码迷,mamicode.com
首页 > 移动开发 > 详细

iOS应用本地化

时间:2016-04-18 23:50:32      阅读:409      评论:0      收藏:0      [点我收藏+]

标签:

一、简介
 
  * 使用本地化功能,可以轻松地将应用程序翻译成多种语言,甚至可以翻译成同一语言的多种方言
  * 如果要添加本地化功能,需要为每种支持的语言创建一个子目录,称为”本地化文件夹”,通常使用.lproj作为拓展名
  * 当本地化的应用程序需要载入某一资源时,如图像、属性列表、nib文件,应用程序会检查用户的语言和地区,并查找相匹配的本地化文件夹。如果找到了相应的文件夹,就会载入这个文件夹中的资源
    * 为了节约时间我就以李明杰老师的博客上进行修改说明(有点懒,不过程序员不喜欢偷懒怎么能写出好东西呢是吧!,再说李明杰老师讲解得很不错,我也是为了更好的说明,同时防止在梳理知识的时候有遗漏才这么做的-.-)
 
 
二、创建项目
 
工程目录结构
技术分享

运行效果图(因为没有使用本地化功能,所以不管用户选择什么语言环境,运行的效果都是一样的)

技术分享技术分享技术分享

 

现在想在中文语言环境下,换另一套实现,其中包括:
  * 更改storyboard文件中的文字(nib本地化,storyboard也是nib的一种)

  * 更改登录按钮下面的图片(图片本地化)

  * 更改对话框中的文字(Tip和Ok)(字符串本地化)

  * 更改应用名称(应用名称本地化,即本地化Info.plist文件)

 

三、本地化前的准备

其实就是先创建好中文的本地化文件夹(zh-Hans.lproj),让应用程序支持中文语言环境
 
技术分享 
 
首先注意这里的勾选,我们来看看此时的项目文件
 
技术分享
 
其中Base.lproj就是指的勾选的本地化,也就是说我们项目创建默认使用的是Base的本地化。这也是为什么每次创建项目Main.storyboard会在一个Base.lproj的文件夹中的原因。同时鼠标指的是系统默认创建的一个英文本地化配置。这里为了不影响说明我们去掉这个勾选,只用中文和英文本地化来进行说明(这里的Base表示什么语言模式是可以通过更改应用的语言环境做修改的有兴趣的同学可自己研究)。当我去掉勾时会删除Main.storyboard和LaunchScreen.stroyboard,因此我们需要先在英文换件中添加这两个文件然后再去掉Base,具体办法就是选中Main.storyboard,勾选下图的English即可
 
技术分享
 
进入正题:因为英文Localization系统已经帮我们创建好了,我们在这里只需要创建中文Localization即可
 
 技术分享
 
选择Finish后我们的项目文件结果为:
技术分享
 
 zh-Hans.lproj文件夹已经为我们创建好了,与en.lproj文件夹一样包含一个Main.storyboard表示在中文环境会启用这里面的资源。(有的同学在这步可能在zh-Hans中生成的不是Main.storyboard而是Main.strings,这时候需要自己选择:
技术分享
至于这里的.strings文件,个人猜测应该是nib的代码模式,这里也没有深究后续再补上吧。
 
同时Xcode中的Main.storyboard左边会出现一个三角,展开可以发现分别都有2个版本的文件。到此我们的项目就支持英文和中文环境了,本地化准备完毕
技术分享
 
 
 

四、nib文件的本地化

打开Main.storyboard(Simplified)文件,修改里面的文字信息(这里不修改图片)

技术分享

 

五、应用程序名称本地化(Info.plist本地化)

知识背景:Info.plist中有个叫CFBundleDisplayName的key决定了应用程序的名称

 

1.为Info.plist添加一个key-value,让应用程序支持名称本地化,Info.plist就会去InfoPlist.strings加载CFBundleDisplayName对应的字符串,(这里需要注意不能直接本地化Info.plist,因为这样做之后Info.plist文件会存在各自的本地化文件夹中(像en.lproj)中,这样系统会报Info.plist文件不存在的问题,虽然可以去指定Info.plist文件的位置,但是这样就不能实现本地化的目的了,所以需要用到InfoPlist.strings文件)。

技术分享

用这种方法分别为英文和中文本地化添加InfoPlist.strings文件并且在Info.plst中添加Application has localized display name字段,赋值为YES

技术分享

 

在对应的InfoPlist.strings文件中添加各自的应用名

InfoPlist.strings(English):

CFBundleDisplayName="Localization";

在InfoPlist.strings(Simplifid):

CFBundleDisplayName="本地化";

 

六、图片本地化

(这里演示本地化home.png,nib文件中登录按钮下面的房子图片)

 

 用上面添加InfoPlist.strings的方法添加该图片的本地化,分别为英文和中文环境添加home.png文件

技术分享

 

查看下项目文件中home.png的情况

 

技术分享 

 在代码中使用[UIImage imageNamed:@"home.png"];  即可

注意:本地化完图片文件,记得Clean一下项目,而且最好先删除应用程序,再重新安装

 

 

七、字符串的本地化

1.创建一个字符串资源文件 文件名最好是Localizable.strings,如果使用其他文件名,使用字符串时的调用会有些区别

2.依旧按照上面的方法为Localizable.strings添加多语言支持

3.Localizable.strings(English)文件加入:

Tip="Tip";

Ok="Ok";

"Please input your userName"="Please input your userName";

  

4.在Localizable.strings(Chinese)文件加入:

Tip="提示";

Ok="好的";

"Please input your userName"="请输入用户名";

  

5.在代码中使用NSLocalizedString(key, comment)来读取本地化字符串,key是Localizable.strings文件中等号左边的字符串,comment纯粹是注释

 

 

如果没有对字符串进行本地化 或者 找不到key对应的值,NSLocalizedString将直接返回key这个字符串

 

注意:如果你的字符串资源文件名不是Localizable.strings,如qy.strings,那么你就得使用NSLocalizedStringFromTable()来读取本地化字符串:

NSLocalizedStringFromTable(@"Tip", @"qy", nil);

 

 

补充:生成字符串资源文件的另一种方式(通过终端命令genstrings,可以自行补充)

1.首先添加获取字符串的代码,比如在ViewController.m。(其实这里就是方便我们不用针对每一个需要本地化字符串的地方都去上面Localizable.strings文件中一一添加,我们只需要使用NSLocalizedString取字符串然后用genstrings命令就可以帮我们完善Localizable.strings文件啦)

NSString *tip = NSLocalizedString(@"Tip", @"dialog title");  
NSString *ok = NSLocalizedString(@"Ok", @"dialog button");  

 

2.打开终端,cd到项目文件夹下(包含en.lproj和zh-Hans.lproj,否则会报错couldn‘t connect to output directory xx.lproj),这里说明一下,现在Xcode 6以后就不推荐使用genstrings,不知此使用批量的转化,而且还得一个一个的往本地文件中生成。但是单个的处理还是没问题的

genstrings ViewController.m -o en.lproj

 

如果使用NSLocalizedStringFromTable(key, tbl, comment)来获取字符串,资源文件会以tbl参数作为文件名,比如

NSString *tip = NSLocalizedStringFromTable(@"Tip", @"qy", @"dialog title");  
NSString *ok = NSLocalizedStringFromTable(@"Ok", @"qy", @"dialog button"); 

生成的资源文件为:qy.strings

 

4.将资源文件导入项目即可,然后打开资源文件,可以发现已经生成了key和comment

 

八、其他文件的本地化

跟六中图片本地化的原理是一样的,重复六中的每个步骤即可

 

九、最终效果演示

1.英文环境下

技术分享技术分享技术分享

 

2.中文环境下

技术分享技术分享技术分享

iOS应用本地化

标签:

原文地址:http://www.cnblogs.com/jijiYY/p/5406174.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!