iOS—应用程序本地化

来源:互联网 发布:网络用语smg是什么意思 编辑:程序博客网 时间:2024/06/05 18:24

一、简介

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

  * 如果要添加本地化功能,需要为每种支持的语言创建一个子目录,称为”本地化文件夹”,通常使用.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)文件中加入:

[java] view plaincopy
  1. CFBundleDisplayName="Localization";  

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

[java] view plaincopy
  1. 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.在代码中照常使用图片即可

[java] view plaincopy
  1. [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)文件加入

[java] view plaincopy
  1. Tip="Tip";  
  2.   
  3. Ok="Ok";  

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

[java] view plaincopy
  1. Tip="提示";  
  2.   
  3. Ok="好的";  


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

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

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

[java] view plaincopy
  1. NSLocalizedStringFromTable(@"Tip", @"mj", nil);  

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

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

[java] view plaincopy
  1. NSString *tip = NSLocalizedString(@"Tip", @"dialog title");  
  2. NSString *ok = NSLocalizedString(@"Ok", @"dialog button");  

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


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

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

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


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

[java] view plaincopy
  1. /* dialog button */  
  2. "Ok" = "Ok";  
  3.   
  4. /* dialog title */  
  5. "Tip" = "Tip";  


八、其他文件的本地化

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


九、最终效果演示

1.英文环境下

 

  


2.中文环境下

 

  

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 平板版本太低6.0怎么办 ios平板版本太低怎么办 微信公众号重名怎么办 发票规格型号填错了怎么办 鲁大师检测硬盘有问题怎么办 英文成绩单翻译错了怎么办 川航订机票名字写错了怎么办 亚航电子登机牌没有保存怎么办 cfa考试准考证名字有错怎么办 火车票护照号错了怎么办 国际机票名字错一个字怎么办 国际机票名字拼音错了怎么办 订机票名字写错了怎么办 亚航机票护照号写错怎么办 打发过了的奶油怎么办? 孩子生了没人带怎么办 办理退休审核未通过怎么办 整天沉迷全民k歌怎么办 吃鸡账号被误封了怎么办 手机换号了银行卡怎么办 评副高没有病房论文怎么办 收件人姓名写错了怎么办 汇款姓名写错了怎么办 在菲律宾旅游签证过期怎么办 微博转发被限制怎么办 百香果蜂蜜沉在下面怎么办 领导要潜我老婆怎么办 被领导潜了该怎么办 实习期单位领导开除我我该怎么办 泡泡袖显手臂肥怎么办 客人想吃霸王餐怎么办 在四楼上课时发生地震怎么办 学生在上课时发生地震怎么办 学生上课时发生地震怎么办 老板承诺的工资不兑现怎么办 只有本科毕业证没有学位证怎么办 孩子跟坏孩子玩怎么办 苕帚跟簸箕掉下来了怎么办 身体发烫又觉得冷怎么办 买苹果8后悔了怎么办 手机死机了怎么办不可拆卸电池