app应用程序本地化--备用
一、简介
* 使用本地化功能,可以轻松地将应用程序翻译成多种语言,甚至可以翻译成同一语言的多种方言
* 如果要添加本地化功能,需要为每种支持的语言创建一个子目录,称为”本地化文件夹”,通常使用.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.中文环境下


app应用程序本地化--备用的更多相关文章
- iOS 应用程序本地化
由于iPhone,iPad等苹果产品在全世界范围内的广泛流行,那么通过App Store下载应用程序的用户也将是来自世界范围的人们,所以开发者在开发过程中势必要考虑到不同语言环境下用户使用,好在iOS ...
- Thinkphp源码分析系列(三)– App应用程序类
// +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO ...
- iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建
iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建 一.实现效果 说明:该示例在storyboard中使用动态单元格来完成. 二.实现 1.项目文件结构 ...
- iOS设置app应用程序文件共享
1.iOSapp应用程序文件共享 当我们用itnues连接到设备时,在应用程序栏目下面,文件共享下,点击 对应的程序,即可以在程序右边栏目里面看到应用程序共享的数据, 此时,我们可以通过右下角的 添加 ...
- 触摸屏网站开发系列(一)-ios web App应用程序(ios meta)
触摸屏网站的开发其实现在来讲比前几年移动端网站开发好多了,触摸屏设备IOS.Android.BBOS6等系统自带浏览器均为WEBKIT核心,这就说明PC上面尚未立行的HTML5 CSS3能够运用在这里 ...
- 互联网App应用程序测试流程及测试总结
互联网App应用程序测试流程及测试总结 1. APP测试基本流程 1.1流程图 仍然为测试环境 Pass 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日 ...
- HTML5-IOS WEB APP应用程序(IOS META)
触摸屏网站的开发其实现在来讲比前几年移动端网站开发好多了,触摸屏设备IOS.Android.BBOS6等系统自带浏览器均为WEBKIT核心,这就说明PC上面尚未立行的HTML5 CSS3能够运用在这里 ...
- iOS-获取Model(设备型号)、Version(设备版本)、app(程序版本)等
IOS-获取Model(设备型号).Version(设备版本).app(程序版本)等 NSLog(@"uniqueIdentifier: %@", [[UIDevice curre ...
- Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解
Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解 说明:Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解,加密算法,是现在每个软件项目里必须用到的内容. 广泛应用在包括 ...
随机推荐
- RHCA学习笔记:RH442-Unit9内核定时与进程延时
Unit 9 Kernel Timing and Process Latency 内核定时与进程延时 学习目标: A.了解CPU 是怎样追踪时间的 B.调整CPU的访问次数 C.调整调度延时 D. ...
- patchdiff2 函数比较插件
https://code.google.com/archive/p/patchdiff2/downloads
- android zxing自定义界面,点击按钮开关闪光灯
折腾了一天,今天基本把自定义扫描二维码界面实现了,主要碰到的问题是文本过长,要居中并换行,绘制图片,点击切换不同图片,打开或关闭闪关灯,结果发现在一些机型上出现空指针异常,又牵扯到硬件加速问题...参 ...
- 组合模式(Composite Pattern)
组合模式定义:组合模式允许你将对象组合成树形结构来表现"整体/局部"层次结构,组合能让客户以一致的方式处理个别对象以及对象组合. 当涉及到如:菜单,子菜单之类的问题时,会自然而然的 ...
- euqals和hashcode
hashcode这个方法是用来鉴定2个对象是否相等的. 那你会说,不是还有equals这个方法吗? 不错,这2个方法都是用来判断2个对象是否相等的.但是他们是有区别的. 一般来讲,equals这个方法 ...
- mysql中 的 ENGINE = innodb; 是什么意思?
存储引擎是innodb.nnoDB 是 MySQL 上第一个提供外键约束的数据存储引擎,除了提供事务处理外,InnoDB 还支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户 ...
- java内存分块
运行时数据区域 Java虚拟机在执行Java的过程中会把管理的内存划分为若干个不同的数据区域.这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,而有的区域则依赖线程的启 ...
- 20151215jquery学习笔记--jqueryUI --dialog(对话框)
对话框(dialog),是 jQuery UI 非常重要的一个功能.它彻底的代替了 JavaScript 的 alert().prompt()等方法,也避免了新窗口或页面的繁杂冗余 一.开启多个 di ...
- ASP.NET页面生命周期总结(2)
HttpAplicationFactory获取一个HttpApplication对象: 内部:1.如果是第一次请求过来,那么就把global文件编译成一个类型.(后续请求来的,就可以直接获取这个类型) ...
- oracle job interval·相关事例
描述 Interval参数值 每天运行一次 'SYSDATE + 1' 每小时运行一次 'SYSDATE + 1/24' 每10分钟运行一次 'SYSDATE + 10/(60*24)' 每30秒运行 ...