应用程序本地化

原创 2013年02月02日 11:36:56

一、简介

  * 使用本地化功能,可以轻松地将应用程序翻译成多种语言,甚至可以翻译成同一语言的多种方言

  * 如果要添加本地化功能,需要为每种支持的语言创建一个子目录,称为”本地化文件夹”,通常使用.lproj作为拓展名

  * 当本地化的应用程序需要载入某一资源时,如图像、属性列表、nib文件,应用程序会检查用户的语言和地区,并查找相匹配的本地化文件夹。如果找到了相应的文件夹,就会载入这个文件夹中的资源


二、默认的效果图

工程目录结构


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

  


现在想在中文语言环境下,换另一套实现,其中包括:

  * 更改nib文件中的文字(nib本地化)

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

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

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


三、本地化前的准备

其实就是先创建好中文的本地化文件夹(zh-Hans.lproj),让应用程序支持中文语言环境


选择当前需要本地化的资源


选择Finish后,会发现硬盘上多了一个中文的本地化文件夹zh-Hans.lproj,至于en.lproj文件夹是英文的本地化文件夹,创建项目时默认就有的


项目中的MJViewController.xib、InfoPlist.strings文件左边也多了个可以展开的三角形,展开可以发现分别都有2个版本的文件

MJViewController.xib(English)对应en.lproj文件夹中的MJViewController.xib文件

InfoPlist.strings(English)对应en.lproj文件夹中的InfoPlist.strings文件

MJViewController.xib(Chinese)对应zh-Hans.lproj文件夹中的MJViewController.xib文件

InfoPlist.strings(Chinese)对应zh-Hans.lproj文件夹中的InfoPlist.strings


准备工作做完后,就可以开始展开本地化工作了


四、nib文件的本地化

打开MJViewController.xib(Chinese)文件,修改里面的文字信息(这里不修改图片)



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

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

1.为Info.plist添加一个key-value,让应用程序支持名称本地化,Info.plist就会去InfoPlist.strings加载CFBundleDisplayName对应的字符串


2.在InfoPlist.strings(English)文件中加入:

CFBundleDisplayName="Localization";

3.在InfoPlist.strings(Chinese)文件中加入:

CFBundleDisplayName="本地化";

六、图片本地化

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

1.单击选中home.png,然后查看右上角的视图


2.选了Localize代表会将home.png加入到英语的本地化文件夹en.lproj中去


3.添加图片支持中文语言


4.查看下硬盘中home.png的情况


5.而且项目中的home.png左边也多了个可以展开的三角形,展开可以发现有2个版本的文件

home.png(English)对应en.lproj文件夹中的home.png文件

home.png(Chinese)对应zh-Hans.lproj文件夹中的home.png文件


6.用预先准备好的另外一张图片替换zh-Hans.lproj文件夹中的home.png


7.替换后查看项目中home.png的情况


8.在代码中照常使用图片即可

[UIImage imageNamed:@"home.png"];
注意本地化完图片文件,记得Clean一下项目,而且最好先删除应用程序,再重新安装


七、字符串的本地化

1.创建一个字符串资源文件


2.文件名最好是Localizable.strings,如果使用其他文件名,使用字符串时的调用会有些区别


3.为Localizable.strings添加多语言支持(跟上面图片本地化类似),选中Localizable.strings文件,查看右上角的视图


4.选了Localize代表会将Localizable.strings加入到英语的本地化文件夹en.lproj中去

 


5.添加支持中文语言

 


6.查看下硬盘中Localizable.strings的情况


7.而且项目中的Localizable.strings左边也多了个可以展开的三角形,展开可以发现有2个版本的文件


Localizable.strings(English)对应en.lproj文件夹中的Localizable.strings文件

Localizable.strings(Chinese)对应zh-Hans.lproj文件夹中的Localizable.strings文件


8.在Localizable.strings(English)文件加入

Tip="Tip";

Ok="Ok";

9.Localizable.strings(Chinese)文件加入:

Tip="提示";

Ok="好的";


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

NSString *tip = NSLocalizedString(@"Tip", nil);
NSString *ok = NSLocalizedString(@"Ok", nil);
如果没有对字符串进行本地化 或者 找不到key对应的值,NSLocalizedString将直接返回key这个字符串

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

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

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

1.首先添加获取字符串的代码,比如在MJViewController.m

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

2.打开终端,定位到MJViewController.m所在的文件夹,输入genstrings命令,生成字符串资源文件


3.打开文件夹,已经生成了字符串资源文件

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

NSString *tip = NSLocalizedStringFromTable(@"Tip", @"mj", @"dialog title");
NSString *ok = NSLocalizedStringFromTable(@"Ok", @"mj", @"dialog button");
生成的资源文件为:mj.strings


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

/* dialog button */
"Ok" = "Ok";

/* dialog title */
"Tip" = "Tip";


八、其他文件的本地化

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


九、最终效果演示

1.英文环境下

 

  


2.中文环境下

 

  


相关代码下载

IOS应用程序多语言本地化解决方案

最近要对一款游戏进行多语言本地化,在网上找了一些方案,加上自己的一点点想法整理出一套方案和大家分享! 多语言在应用程序中一般有两种做法: 一、程序中提供给用户自己选择的机会; 二、根据当前用户当...
  • wangqiuyun
  • wangqiuyun
  • 2012年08月17日 00:34
  • 48045

IOS开发 应用程序本地化 总结

官方文档地址为:https://developer.apple.com/library/ios/#documentation/MacOSX/Conceptual/BPInternational/BPI...
  • omegayy
  • omegayy
  • 2012年02月22日 16:27
  • 5995

CFBundleDisplayName 在IOS9中未设置会造成的问题

CFBundleDisplayName 在IOS9中未设置会造成的问题今天遇到一个问题,在ios9.1的设备上面开发一个相册相关的app,但是在调用[PHPhotoLibrary requestAu...
  • zhuzhihai1988
  • zhuzhihai1988
  • 2015年10月30日 15:55
  • 765

IOS 里面你没有注意到的一些小知识

1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现clear Color无法使用) 其实在代码里还是可以设置的,那就是删除背景view...
  • hua_lu_zhao
  • hua_lu_zhao
  • 2015年07月03日 10:56
  • 3460

软件的本地化流程

作者:Kevin 链接:https://www.zhihu.com/question/21254532/answer/17678901 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 ...
  • wang15061955806
  • wang15061955806
  • 2016年11月23日 11:38
  • 437

离线应用和本地存储

一、离线缓存网络状态: 浏览器的网络状态是否畅通与网线是否连接没有关系,只要设备的网卡在活动,那么网络就是畅通的。1.通过navigator.onLine的值判断 true:网络畅通 false...
  • qq_33566350
  • qq_33566350
  • 2017年08月07日 18:57
  • 118

用HTML5打造本地桌面应用

HTML5让Web开发人员用纯HTML技术开发富客户端互联网应用或者甚至本地桌面应用成为了可能。HTML5可以将任何普通网站转变成Web应用。HTML5 web 应用不仅具有在桌面浏览器应用中的优...
  • qq_32609883
  • qq_32609883
  • 2015年12月11日 16:06
  • 1890

如何把Pod本地化(Localize)

公司 app 进行本地化,发现 pod 本地化与直接在 project 本地化还是有差异的,这里以英文和简体中文本地化作为例子。文章最后提供了 pod 本地化的工具类。一、添加多语言文字1、创建多语言...
  • taishanduba
  • taishanduba
  • 2016年08月03日 14:58
  • 1001

iOS开发-多语言本地化和手动切换

App要国际推广,需要支持多语言。可以通过本地化语言和切换来实现。本工程可以不切换系统语言,不重启应用直接切换自定义语言。现在只写中英文,其他语言也是同样处理方法。如果支持语言多,切换时间也不会花长时...
  • JackJia2015
  • JackJia2015
  • 2016年06月01日 10:58
  • 7593

网页Web上调用本地应用程序(.exe)

网页Web上调用本地应用程序(.exe)
  • byxdaz
  • byxdaz
  • 2017年02月15日 23:28
  • 6638
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:应用程序本地化
举报原因:
原因补充:

(最多只允许输入30个字)