一、简介

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

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

  1. CFBundleDisplayName="Localization";

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

  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.在代码中照常使用图片即可

  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)文件加入:

  1. Tip="Tip";
  2. Ok="Ok";

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

  1. Tip="提示";
  2. Ok="好的";

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

  1. NSString *tip = NSLocalizedString(@"Tip", nil);
  2. NSString *ok = NSLocalizedString(@"Ok", nil);

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

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

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

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

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

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

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

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

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

  1. NSString *tip = NSLocalizedStringFromTable(@"Tip", @"mj", @"dialog title");
  2. NSString *ok = NSLocalizedStringFromTable(@"Ok", @"mj", @"dialog button");

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

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

  1. /* dialog button */
  2. "Ok" = "Ok";
  3. /* dialog title */
  4. "Tip" = "Tip";

八、其他文件的本地化

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

九、最终效果演示

1.英文环境下

 

 

2.中文环境下

 

 

iOS开发之本地化的更多相关文章

  1. IOS开发基础知识--碎片19

    1:键盘事件顺序 UIKeyboardWillShowNotification // 键盘显示之前 UIKeyboardDidShowNotification // 键盘显示完成后 UIKeyboar ...

  2. iOS开发路线简述

    1 iOS开发环境1.1 开发环境标准的配置是MacOSX+Xcode.MacOSX的话首选用苹果电脑,Macmini最便宜只要4000多就好了然后自己配一个显示器,MacBookPro 也可以,不推 ...

  3. iOS开发(OC)中的命名规范

    开小差:最近发现自己有一个经验主义的毛病,不太容易接受新的知识,这对从事技术研发的人来说不太合理,需要改之. 正文:通过读写大量代码我有自己的一套编程思路和习惯,自认为自己的编码习惯还是不错的,代码结 ...

  4. iOS开发UI篇—常见的项目文件介绍

    iOS开发UI篇—常见的项目文件介绍 一.项目文件结构示意图 二.文件介绍 1.products文件夹:主要用于mac电脑开发的可执行文件,ios开发用不到这个文件 2.frameworks文件夹主要 ...

  5. iOS开发--应用设置及用户默认设置——转载

    [链接]iOS开发--应用设置及用户默认设置[1.bundlehttp://www.jianshu.com/p/6f2913f6b218 在iphone里面,应用都会在“设置”里面有个专属的应用设置, ...

  6. iOS:iOS开发非常全的三方库、插件等等

    iOS开发非常全的三方库.插件等等 github排名:https://github.com/trending, github搜索:https://github.com/search. 此文章转自git ...

  7. iOS开发--iOS及Mac开源项目和学习资料

    文/零距离仰望星空(简书作者)原文链接:http://www.jianshu.com/p/f6cdbc8192ba著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 原文出处:codecl ...

  8. 《iOS开发指南》正式出版-源码-样章-目录,欢迎大家提出宝贵意见

    智捷iOS课堂-关东升老师最新作品:<iOS开发指南-从0基础到AppStore上线>正式出版了 iOS架构设计.iOS性能优化.iOS测试驱动.iOS调试.iOS团队协作版本控制.... ...

  9. Mac和iOS开发资源汇总

    小引 本文主要汇集一些苹果开发的资源,会经常更新,建议大家把这篇文章单独收藏(在浏览器中按command+D). 今天(2013年7月19日)收录了许多中文网站和博客.大家一定要去感受一下哦. 如果大 ...

随机推荐

  1. 通过NSURLProtocol拦截HTTP转HTTPS来整合SPDY的记录

    众所周知,iOS 9.0之后苹果引入ATS限制,苹果也推荐尽量不要使用HTTP通讯了,毕竟是很不安全的.而国内各个有(wu)节操的运营商也会经常篡改请求HTTP请求.所以如果可能,在不影响性能的情况下 ...

  2. Android(java)学习笔记156:Java虚拟机和Dalvik虚拟机的区别

    Google于2007年底正式发布了Android SDK, 作为 Android系统的重要特性,Dalvik虚拟机也第一次进入了人们的视野.它对内存的高效使用,和在低速CPU上表现出的高性能,确实令 ...

  3. Android_Intent_passObject

    方法4. 把基本的数据类型封装到一个对象中,然后通过intent传递该对象需要考虑对Person对象进行序列化 MainActivity: package com.example.day06_acti ...

  4. Linux common resources

    Useful Linux Web reources list Linux die manual Linux Man Pages Archive Linux RPM find Linux RPM Sea ...

  5. Nginx高性能服务器安装、配置、运维 (1) —— Nginx简介

    一.Nginx 简介 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器. Nginx特点 ...

  6. 20160421javaweb之上传下载小案例---网盘

    一.建立数据库: CREATE TABLE IF NOT EXISTS `netdisk` ( `id` ) NOT NULL AUTO_INCREMENT, `uuidname` ) NOT NUL ...

  7. MVC小系列(二十一)【带扩展名的路由可能失效】

    mvc3之后:如果路由带上扩展名,比如这样: public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRout ...

  8. c语言全局变量与局部变量(当变量重名时)的使用情况

    在c语言中,变量有全局变量和局部变量之分,这一点和很多高级语言类似,如c#,java等.不过与c#,java中的局部变量如在全局变量作用域内则不允许与全局变量名相同,而c语言是允许这样做的.这样的做法 ...

  9. [Java][20160707]Java语言介绍

    Java最早的名称叫"oak"后来改名叫"Java". Java最早是属于"Sun"公司的, 后来被"Oracle"公司 ...

  10. OpenCV学习(1)-安装(Windows)

    下载安装 在这里下载.我下载了2.4.9的Windows版本.双击安装即可. 配置环境变量 配置环境变量的目的是为了让系统找到OpenCV的动态链接库.因此需要把动态链接库添加到系统环境变量PATH中 ...