iOS应用程序本地化
一、简介
* 使用本地化功能,可以轻松地将应用程序翻译成多种语言,甚至可以翻译成同一语言的多种方言
* 如果要添加本地化功能,需要为每种支持的语言创建一个子目录,称为”本地化文件夹”,通常使用.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应用程序本地化的更多相关文章
- iOS 应用程序本地化
由于iPhone,iPad等苹果产品在全世界范围内的广泛流行,那么通过App Store下载应用程序的用户也将是来自世界范围的人们,所以开发者在开发过程中势必要考虑到不同语言环境下用户使用,好在iOS ...
- iOS app 程序启动原理
iOS app 程序启动原理 Info.plist: 常见设置 建立一个工程后,会在Supporting files文件夹下看到一个"工程名-Info.plist"的文件, ...
- xcode4.5应用程序本地化
我们在开发一款APP的时候,总是会涉及应用程序国际化的事情,用ios里专业术语叫做本地化,其实都是一个意思,简而言之就是不同的系统语言,显示不同的应用名称.字符串名称.图片名称.等等,除了代码,ios ...
- Android 和 iOS 应用程序开发对比 [持续更新]
1.Android 用字典模式统一管理应用程序中UI上用到的所有字符串. 比如文本框的默认文本.按钮的名字等等.表现形式:XML文件 Android中 "@string/text_filed ...
- iOS 应用程序生命周期
开发应用程序都要了解其生命周期. 今天我们接触一下iOS应用程序的生命周期, iOS的入口在main.m文件: int main(int argc, char * argv[]) { @autorel ...
- [ios基础]IOS应用程序的生命周期问题
—程序的生命周期 a.程序的生命周期是指应用程序启动到应用程序结束整个阶段的全过程 b.每一个IOS应用程序都包含一个UIApplication对象,IOS系统通过该U ...
- iOS应用程序的生命周期
iOS应用程序一般都是由自己编写的代码和系统框架(system frameworks)组成,系统框架提供一些基本infrastructure给所有app来运行,而你提供自己编写的代码来定制app的外观 ...
- 发布iOS应用程序到苹果APP STORE完整流程
参考:http://blog.csdn.net/mad1989/article/details/8167529(xcode APP 打包以及提交apple审核详细流程(新版本更新提交审核)) http ...
- 从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发
本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.前面几篇随笔主要介绍C#和O ...
随机推荐
- Swap Nodes & Reverse Nodes in k-Group
Swap Nodes | Given a linked list, swap every two adjacent nodes and return its head. Example Given 1 ...
- 字符编码浅识:关于Unicode与UTF-8
参考自阮一峰博客:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html Unicode只是一个符号集,它只规定了符号的 ...
- Kmin
Kmin of Array [本文链接] http://www.cnblogs.com/hellogiser/p/kmin-of-array.html [代码] C++ Code 12345678 ...
- 2013 ACM/ICPC 长春网络赛F题
题意:两个人轮流说数字,第一个人可以说区间[1~k]中的一个,之后每次每人都可以说一个比前一个人所说数字大一点的数字,相邻两次数字只差在区间[1~k].谁先>=N,谁输.问最后是第一个人赢还是第 ...
- C# 支持多种语言
通过Resource文件建立本地化. net 资源文件名(这里是Resource1.resx)由根名称(即Resource1),本地语言名称(默认情况下还没有)及扩展名组成,在读取资源时,资源管理器会 ...
- Win7下虚拟机个人使用小结:Virtual PC,VMware和VirtualBox
想来用了很多年的虚拟机了,换了Win7之后,种种原因又需要使用虚拟机,这里就简单介绍和比较一下. 点击小图看大图. Virtual PC: 如果想做Windows虚拟机的话,Virtual PC在之前 ...
- 4.前端笔记之jsdom基础
一.简介 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.DOM编程: DOM 是关于如何获取.修改.添加或删除 HTML ...
- HDU1005&&NEFU67 没有循环节
Number Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- Android之Tab类总结
本文主要包括以下Tab类实现方式 FragmentTabHost+Fragment实现 传统的ViewPager实现 FragmentManager+Fragment实现 ViewPager+Frag ...
- Android UI组件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...