iOS 国际化
2016-03-09 09:20
513 查看
Bitbucket 让 pull request变得更强大,可即刻提升团队代码质量 云计算行业圆桌论坛 前端精品课程免费看,写课评赢心动大礼!
* 使用本地化功能,可以轻松地将应用程序翻译成多种语言,甚至可以翻译成同一语言的多种方言
* 如果要添加本地化功能,需要为每种支持的语言创建一个子目录,称为”本地化文件夹”,通常使用.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 plain
copy
print?
CFBundleDisplayName="Localization";
3.在InfoPlist.strings(Chinese)文件中加入:
[java]
view plain
copy
print?
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 plain
copy
print?
[UIImage imageNamed:@"home.png"];
七、字符串的本地化
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 plain
copy
print?
Tip="Tip";
Ok="Ok";
9.在Localizable.strings(Chinese)文件加入:
[java]
view plain
copy
print?
Tip="提示";
Ok="好的";
10.在代码中使用NSLocalizedString(key, comment)来读取本地化字符串,key是Localizable.strings文件中等号左边的字符串,comment纯粹是注释
[java]
view plain
copy
print?
NSString *tip = NSLocalizedString(@"Tip", nil);
NSString *ok = NSLocalizedString(@"Ok", nil);
注意:如果你的字符串资源文件名不是Localizable.strings,如mj.strings,那么你就得使用NSLocalizedStringFromTable()来读取本地化字符串:
[java]
view plain
copy
print?
NSLocalizedStringFromTable(@"Tip", @"mj", nil);
补充:生成字符串资源文件的另一种方式(通过终端命令)
1.首先添加获取字符串的代码,比如在MJViewController.m
[java]
view plain
copy
print?
NSString *tip = NSLocalizedString(@"Tip", @"dialog title");
NSString *ok = NSLocalizedString(@"Ok", @"dialog button");
2.打开终端,定位到MJViewController.m所在的文件夹,输入genstrings命令,生成字符串资源文件
3.打开文件夹,已经生成了字符串资源文件
如果使用NSLocalizedStringFromTable(key, tbl, comment)来获取字符串,资源文件会以tbl参数作为文件名,比如
[java]
view plain
copy
print?
NSString *tip = NSLocalizedStringFromTable(@"Tip", @"mj", @"dialog title");
NSString *ok = NSLocalizedStringFromTable(@"Ok", @"mj", @"dialog button");
4.将资源文件导入项目即可,然后打开资源文件,可以发现已经生成了key和comment
[java]
view plain
copy
print?
/* dialog button */
"Ok" = "Ok";
/* dialog title */
"Tip" = "Tip";
八、其他文件的本地化
跟六中图片本地化的原理是一样的,重复六中的每个步骤即可
九、最终效果演示
1.英文环境下
2.中文环境下
相关代码下载
应用程序本地化
一、简介* 使用本地化功能,可以轻松地将应用程序翻译成多种语言,甚至可以翻译成同一语言的多种方言
* 如果要添加本地化功能,需要为每种支持的语言创建一个子目录,称为”本地化文件夹”,通常使用.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 plain
copy
print?
CFBundleDisplayName="Localization";
CFBundleDisplayName="Localization";
3.在InfoPlist.strings(Chinese)文件中加入:
[java]
view plain
copy
print?
CFBundleDisplayName="本地化";
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 plain
copy
print?
[UIImage imageNamed:@"home.png"];
[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 plain
copy
print?
Tip="Tip";
Ok="Ok";
Tip="Tip"; Ok="Ok";
9.在Localizable.strings(Chinese)文件加入:
[java]
view plain
copy
print?
Tip="提示";
Ok="好的";
Tip="提示"; Ok="好的";
10.在代码中使用NSLocalizedString(key, comment)来读取本地化字符串,key是Localizable.strings文件中等号左边的字符串,comment纯粹是注释
[java]
view plain
copy
print?
NSString *tip = NSLocalizedString(@"Tip", nil);
NSString *ok = NSLocalizedString(@"Ok", nil);
NSString *tip = NSLocalizedString(@"Tip", nil); NSString *ok = NSLocalizedString(@"Ok", nil);如果没有对字符串进行本地化 或者 找不到key对应的值,NSLocalizedString将直接返回key这个字符串
注意:如果你的字符串资源文件名不是Localizable.strings,如mj.strings,那么你就得使用NSLocalizedStringFromTable()来读取本地化字符串:
[java]
view plain
copy
print?
NSLocalizedStringFromTable(@"Tip", @"mj", nil);
NSLocalizedStringFromTable(@"Tip", @"mj", nil);
补充:生成字符串资源文件的另一种方式(通过终端命令)
1.首先添加获取字符串的代码,比如在MJViewController.m
[java]
view plain
copy
print?
NSString *tip = NSLocalizedString(@"Tip", @"dialog title");
NSString *ok = NSLocalizedString(@"Ok", @"dialog button");
NSString *tip = NSLocalizedString(@"Tip", @"dialog title"); NSString *ok = NSLocalizedString(@"Ok", @"dialog button");
2.打开终端,定位到MJViewController.m所在的文件夹,输入genstrings命令,生成字符串资源文件
3.打开文件夹,已经生成了字符串资源文件
如果使用NSLocalizedStringFromTable(key, tbl, comment)来获取字符串,资源文件会以tbl参数作为文件名,比如
[java]
view plain
copy
print?
NSString *tip = NSLocalizedStringFromTable(@"Tip", @"mj", @"dialog title");
NSString *ok = NSLocalizedStringFromTable(@"Ok", @"mj", @"dialog button");
NSString *tip = NSLocalizedStringFromTable(@"Tip", @"mj", @"dialog title"); NSString *ok = NSLocalizedStringFromTable(@"Ok", @"mj", @"dialog button");生成的资源文件为:mj.strings
4.将资源文件导入项目即可,然后打开资源文件,可以发现已经生成了key和comment
[java]
view plain
copy
print?
/* dialog button */
"Ok" = "Ok";
/* dialog title */
"Tip" = "Tip";
/* dialog button */ "Ok" = "Ok"; /* dialog title */ "Tip" = "Tip";
八、其他文件的本地化
跟六中图片本地化的原理是一样的,重复六中的每个步骤即可
九、最终效果演示
1.英文环境下
2.中文环境下
相关代码下载
相关文章推荐
- ios:关于图片平铺
- iOS转场动画详解
- iOS ---Extension编程指南
- iOS----Xcode6或者Xcode7设置LaunchImage图标
- iOS----------使用 Xcode6或Xcode7配置.pch文件
- iOS 多线程 进程、线程、并发、串行、同步、异步—— iOS 编码复习(四)(多线程2)
- ios-显示LCD效果
- kidd风的IOS日志之IOSIOS-API概述
- 用纯代码方式开发IOS应用程序
- IOS新手引导页的实现,源码。
- IOS源码之OC相册,可以循环查看图片
- ios 延迟加载执行 dispatch_after
- ios afneworking2.x 使用方法
- 【原】iOS动态性(二):运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等
- iOS开发数据持久化之-CoreData
- iOS_XCode7_Launch Image 的初使用
- ios 学习笔记,tabbarcontroller 实现底部导航
- iOS 开发者必不可少的 75 个工具
- iOS 开发小技巧(二)
- iOS 从一个syoryBoard 跳转到另一个stroyBoard 方法简介