xcode4.5应用程序本地化
我们在开发一款APP的时候,总是会涉及应用程序国际化的事情,用ios里专业术语叫做本地化,其实都是一个意思,简而言之就是不同的系统语言,显示不同的应用名称、字符串名称、图片名称、等等,除了代码,ios几乎可以本地化所有类型的文件。
那么接下来我就记录下来ios如何快速本地化项目,【记住千万不要把说明文字直接以字符形式写到各个.m文件中,或是统一都编写成静态字符串,这些都是不利于本地化的,等以后需要维护时,项目需求不同语言版本时,会很费事】。
一、本地化应用程序名称
首先我创建了一个simple Application,应用程序默认语言是:english;APP名称默认为创建项目的名称。我们打开应用程序-info.plist清单文件:空白处右键,选择Show Raw Keys/Values,就会看到应用程序名实际为CFBundleDisplayName,如下图所示,【注意:CFbundleName并不是APP名称的属性,而是CFbundleDisplayName】
接下来,开始给APP添加一个chinese语言支持,选中项目-Project-Localization-Add,如下图:
弹出的界面让我们选择需要本地化的文件,infoPlist.strings是必不可少的,使用这个才能设置不同的APP名称,ViewController我们暂且先够选上,一会本地化xib的时候需要用到,如下图:
然后展开infoPlist.strings文件(Engilsh),里添加:CFBundleDisplayName="Localized",英文环境下会显示这个名称,chinese里添加:CFBundleDisplayName="本地化",这是中文环境下显示的名称,如下图:
保存一下,再次运行APP,然后切换一下系统语言,会发现APP显示我们设置的名称(如果发现没有改变,是因为缓存的缘故,尝试-Project-clean一下,然后设备中删除我们的demo,再来build)
二、本地化xib文件
选中要本地化的xib文件,在右边的属性检查器视图中会发现多了一个localization选项,勾选我们要本地化的语言,会发现这个xib变成了和infoPlist.strings一样的列表:xib(English)、xib(chinese),我们可以在各自的xib中创建不同语言所显示的界面,等到APP需要显示此xib时,系统会首先寻找当前语言下的xib文件,如下图所示:
三、本地化字符串
本地化字符串需要一个Localize.settings文件,在代码中需要输入字符串的地方使用NSLocalizeString宏来定义字符串。
原理:在代码中将加入的字符串加入NSLocalizeString宏中,启动程序时,系统将根据语言加载相应的文件得到其对应的字符串文件,这个字符串可以通过系统将NSLocalizedString中的宏生成名为“Localizable.strings”的文件,当然你可以自己去创建这个文件,然后手动是添加对应的字符串。
我们先手动创建这个文件:选中项目-new file - Resource-Stringfile
命名一定要是:Localizable
然后选中创建的Localizable.strings文件,在属性检查器的localization项点击-Localizae,我们先添加English的本地化,再添加chinese的本地化。
现在发现这个文件也变成了English和Chinese两个,那么我们在各自文件中写入:
继续在代码的viewdidload中,需要设置字符串的地方:
NSlocalizeString第一个参数是内容,第二个参数是在系统生成Localize.strings文件时,生成的注释,不需要的话可以设置为nil
看一下效果:
四、图片资源的本地化
我们可以向本地话字符串一样,把中英文图片的名字分别存到中英文对应的strings文件,然后通过NSLocalizedStringFromTable来获取图片名称。
选中要本地化的图片,在右边的Inspector中 Localization下,点击localize...
继续上一次一样的操作,添加English和chinese,我们发现这个图片资源也分成了english和chinese的版本,如下图:
继续要做的是给chinese的文件设置(替换成)其语言下的图片资源,如下:
保存-clean后运行看一下:
同样的avator.png图片资源,在不同的语言环境下,显示不一样的图片资源,很不错吧?
转载自:http://www.2cto.com/kf/201306/216891.html
xcode4.5应用程序本地化的更多相关文章
- iOS 应用程序本地化
由于iPhone,iPad等苹果产品在全世界范围内的广泛流行,那么通过App Store下载应用程序的用户也将是来自世界范围的人们,所以开发者在开发过程中势必要考虑到不同语言环境下用户使用,好在iOS ...
- iOS应用程序本地化
一.简介 * 使用本地化功能,可以轻松地将应用程序翻译成多种语言,甚至可以翻译成同一语言的多种方言 * 如果要添加本地化功能,需要为每种支持的语言创建一个子目录,称为”本地化文件夹”,通常使用.lpr ...
- app应用程序本地化--备用
一.简介 * 使用本地化功能,可以轻松地将应用程序翻译成多种语言,甚至可以翻译成同一语言的多种方言 * 如果要添加本地化功能,需要为每种支持的语言创建一个子目录,称为”本地化文件夹”,通常使用.lpr ...
- C#控制台程序本地化应用(Localization)
本地化在百度百科上的解释如下: “软件本地化是指将某一产品的用户界面(UI)和辅助材料(文档资料和在线帮助菜单)从其原产国语言向另一种语言转化,使之适应某一外国语言和文化的过程.” 其原理主要是把相同 ...
- 在Xcode4中给程序提供命令行参数(转)
网上xcode4的资料实在是不多,再加上xcode4相对3的改动还那么大,并且还只有英文版.我为了这个问题头痛了很久.后来终于找到了...方法如下 xcode菜单的Product->EditSc ...
- C# Winform程序本地化应用
1. 创建一个WinForm应用程序 – “WindowsFormsLocalizationTest”. 2. 在主窗体属性栏里,把Localizable属性设置成”True”. 3. 添加两个But ...
- iOS本地化应用程序
因为使用的是xcode4,应用程序本地化的问题跟以前的版本还是有些不同,在网上找了些资料对于xcode4以上的版本资料还是相对较少,有些最后要通过手动创建文件,这样操作实在是太麻烦,所以经过一个下午的 ...
- ASP.NET Core 中文文档 第三章 原理(6)全球化与本地化
原文:Globalization and localization 作者:Rick Anderson.Damien Bowden.Bart Calixto.Nadeem Afana 翻译:谢炀(Kil ...
- iOS开发——高级技术&本地化与国际化详解
本地化与国际化详解 效果如下: 英语: 中文: 具体实现如下: ...
随机推荐
- 增量升级(省流量更新)的Android客户端实现
转载与 zhouhuiah的专栏 http://blog.csdn.net/zhouhuiah/article/details/16939937 本文在以上两篇博客的基础上再增加了异常处理,并将生成的 ...
- 联系博主(推介联系QQ)
李莫,OI 蒟蒻一只 QQ:740929894 邮箱:12958954@163.com limo740929894@gmail.com (目测国外网站的邮件发不进网易邮箱,所以注册了个Gmail,但是 ...
- 让EntityFramework6支持SQLite
最近给朋友的小孩做了一个毕业设计.用的是asp.net MVC5 + EntityFramework6 + SQL Server 2008. 结果做好后,朋友说能不能不要数据库,直接运行?顿时让我很纠 ...
- svn老鸟转用git必须理解的概念
不都是SCM代码管理嘛,有很大区别么?很多svn老鸟都是抱着这样的心态去学习git,然后无一幸免地陷入“查阅过很多资料,依然掌握不好”的困境,至少我们团队是这样的. 网上的资料确实已经很多了,却没有把 ...
- Oracle数据库(1)
Oracle基本数据类型:Oracle的基本呢数据类型按类型分为:字符串类型,数据类型,日期类型,LOB类型等.1.字符串类型:①char:定长字符串,最多存储2k字节,在不指定char长度的情况下, ...
- 视频运动motion vector获取。
http://victor.csie.org/blog/archives/362------------------------------------------------------------ ...
- Boost C++: 数据结构---tuple
#include <boost/tuple/tuple.hpp> #include <boost/tuple/tuple_io.hpp> #include <boost/ ...
- hadoop-集群管理(2)——内存设置
http://www.cnblogs.com/yuechaotian/archive/2013/03/08/2949607.html 1. 内存 hadoop为各个守护进程(namenode,seco ...
- hbase很有价值的读写性能提升
NoSQL现在风生水起,hbase的使用也越来越广,但目前几乎所有的NoSQL产品在运维上都没法和DB相提并论,在这篇blog中来总结下我们在运维hbase时的一些问题以及解决的方法,也希望得到更多h ...
- leetcode 1
题目: 最开始采用暴力解法,两个for循环遍历所有组合形式,时间复杂度为O(n2),代码省略. 进一步学习,采用hash表存储,空间换时间,时间复杂度为O(n),空间复杂度为O(n); 将数组放入ha ...