iOS应用程序本地化

时间:2022-12-30 20:19:15

一、简介

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

* 如果要添加本地化功能,需要为每种支持的语言创建一个子目录,称为”本地化文件夹”,通常使用.lproj作为拓展名

* 当本地化的应用程序需要载入某一资源时,如图像、属性列表、nib文件,应用程序会检查用户的语言和地区,并查找相匹配的本地化文件夹。如果找到了相应的文件夹,就会载入这个文件夹中的资源

二、默认的效果图

工程目录结构

iOS应用程序本地化

运行效果图(因为没有使用本地化功能,所以不管用户选择什么语言环境,运行的效果都是一样的)

iOS应用程序本地化 iOS应用程序本地化 iOS应用程序本地化

现在想在中文语言环境下,换另一套实现,其中包括:

* 更改nib文件中的文字(nib本地化)

* 更改登录按钮下面的图片(图片本地化)

* 更改对话框中的文字(Tip和Ok)(字符串本地化)

* 更改应用名称(应用名称本地化,即本地化Info.plist文件)

三、本地化前的准备

其实就是先创建好中文的本地化文件夹(zh-Hans.lproj),让应用程序支持中文语言环境

iOS应用程序本地化

选择当前需要本地化的资源

iOS应用程序本地化

选择Finish后,会发现硬盘上多了一个中文的本地化文件夹zh-Hans.lproj,至于en.lproj文件夹是英文的本地化文件夹,创建项目时默认就有的

iOS应用程序本地化

项目中的MJViewController.xib、InfoPlist.strings文件左边也多了个可以展开的三角形,展开可以发现分别都有2个版本的文件

iOS应用程序本地化

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)文件,修改里面的文字信息(这里不修改图片)

iOS应用程序本地化

 

五、应用程序名称本地化(Info.plist本地化)

知识背景:Info.plist中有个叫CFBundleDisplayName的key决定了应用程序的名称

1.为Info.plist添加一个key-value,让应用程序支持名称本地化,Info.plist就会去InfoPlist.strings加载CFBundleDisplayName对应的字符串

iOS应用程序本地化

2.在InfoPlist.strings(English)文件中加入:

  1. CFBundleDisplayName="Localization";

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

  1. CFBundleDisplayName="本地化";

六、图片本地化

(这里演示本地化home.png,nib文件中登录按钮下面的房子图片)

1.单击选中home.png,然后查看右上角的视图

iOS应用程序本地化

2.选了Localize代表会将home.png加入到英语的本地化文件夹en.lproj中去

iOS应用程序本地化

3.添加图片支持中文语言

iOS应用程序本地化

4.查看下硬盘中home.png的情况

iOS应用程序本地化

5.而且项目中的home.png左边也多了个可以展开的三角形,展开可以发现有2个版本的文件

iOS应用程序本地化

home.png(English)对应en.lproj文件夹中的home.png文件

home.png(Chinese)对应zh-Hans.lproj文件夹中的home.png文件

6.用预先准备好的另外一张图片替换zh-Hans.lproj文件夹中的home.png

iOS应用程序本地化

7.替换后查看项目中home.png的情况

iOS应用程序本地化

iOS应用程序本地化

8.在代码中照常使用图片即可

  1. [UIImage imageNamed:@"home.png"];

注意:本地化完图片文件,记得Clean一下项目,而且最好先删除应用程序,再重新安装

七、字符串的本地化

1.创建一个字符串资源文件

iOS应用程序本地化

2.文件名最好是Localizable.strings,如果使用其他文件名,使用字符串时的调用会有些区别

iOS应用程序本地化

3.为Localizable.strings添加多语言支持(跟上面图片本地化类似),选中Localizable.strings文件,查看右上角的视图

iOS应用程序本地化

4.选了Localize代表会将Localizable.strings加入到英语的本地化文件夹en.lproj中去

iOS应用程序本地化

5.添加支持中文语言

iOS应用程序本地化

6.查看下硬盘中Localizable.strings的情况

iOS应用程序本地化

7.而且项目中的Localizable.strings左边也多了个可以展开的三角形,展开可以发现有2个版本的文件

iOS应用程序本地化

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命令,生成字符串资源文件

iOS应用程序本地化

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

iOS应用程序本地化

如果使用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.英文环境下

iOS应用程序本地化 iOS应用程序本地化

iOS应用程序本地化 iOS应用程序本地化

2.中文环境下

iOS应用程序本地化 iOS应用程序本地化

iOS应用程序本地化 iOS应用程序本地化

iOS应用程序本地化的更多相关文章

  1. iOS 应用程序本地化

    由于iPhone,iPad等苹果产品在全世界范围内的广泛流行,那么通过App Store下载应用程序的用户也将是来自世界范围的人们,所以开发者在开发过程中势必要考虑到不同语言环境下用户使用,好在iOS ...

  2. iOS app 程序启动原理

    iOS app 程序启动原理 Info.plist: 常见设置     建立一个工程后,会在Supporting files文件夹下看到一个"工程名-Info.plist"的文件, ...

  3. xcode4.5应用程序本地化

    我们在开发一款APP的时候,总是会涉及应用程序国际化的事情,用ios里专业术语叫做本地化,其实都是一个意思,简而言之就是不同的系统语言,显示不同的应用名称.字符串名称.图片名称.等等,除了代码,ios ...

  4. Android 和 iOS 应用程序开发对比 [持续更新]

    1.Android 用字典模式统一管理应用程序中UI上用到的所有字符串. 比如文本框的默认文本.按钮的名字等等.表现形式:XML文件 Android中 "@string/text_filed ...

  5. iOS 应用程序生命周期

    开发应用程序都要了解其生命周期. 今天我们接触一下iOS应用程序的生命周期, iOS的入口在main.m文件: int main(int argc, char * argv[]) { @autorel ...

  6. [ios基础]IOS应用程序的生命周期问题

    —程序的生命周期         a.程序的生命周期是指应用程序启动到应用程序结束整个阶段的全过程         b.每一个IOS应用程序都包含一个UIApplication对象,IOS系统通过该U ...

  7. iOS应用程序的生命周期

    iOS应用程序一般都是由自己编写的代码和系统框架(system frameworks)组成,系统框架提供一些基本infrastructure给所有app来运行,而你提供自己编写的代码来定制app的外观 ...

  8. 发布iOS应用程序到苹果APP STORE完整流程

    参考:http://blog.csdn.net/mad1989/article/details/8167529(xcode APP 打包以及提交apple审核详细流程(新版本更新提交审核)) http ...

  9. 从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.前面几篇随笔主要介绍C#和O ...

随机推荐

  1. Storm如何保证可靠的消息处理

    作者:Jack47 PS:如果喜欢我写的文章,欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文主要翻译自Storm官方文档Guaranteeing messag ...

  2. javascript 实现一个回文数字

    写一个方法,让"1234"变成回文数字“1234321”,就是顺着读和倒着读都是一样的:注:不让用reverse()方法: function palindrome(str){ va ...

  3. Opentack常用技巧

    这篇博客将收集一些openstack里的使用技巧. 1. which dhcp agent is hosting the network?   2. 各个网桥port命令规则 grep for por ...

  4. Spring初理解

    spring配置文件是一个xml格式的文件,类似如下: <beas> <bean id= 'a' class = '包名.类名'></bean> <bean ...

  5. 使用logback&period;xml配置来实现日志文件输出

    转自:http://sungang-1120.iteye.com/blog/2104296 Logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback- ...

  6. 12个有趣的C语言面试题

    摘要:12个C语言面试题,涉及指针.进程.运算.结构体.函数.内存,看看你能做出几个! 1.gets()函数 问:请找出下面代码里的问题: #include<stdio.h> int ma ...

  7. linux mount 命令详解

    命令格式: mount [-t vfstype] [-o options] device dir 其中: 1.-t vfstype 指定文件系统的类型,通常不必指定.mount 会自动选择正确的类型. ...

  8. page load时执行JavaScript

    // Multiple onload function created by: Simon Willison // http://simonwillison.net/2004/May/26/addLo ...

  9. 剑指Offer 43&period; 左旋转字符串 (字符串)

    题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=&quo ...

  10. 2&period; Apache Axis2 快速学习手册之概览

    这篇博文和大家一起学习下Apache Axis2 官方文档的快速指南篇 英文原文:http://axis.apache.org/axis2/java/core/docs/quickstartguide ...