我们在开发一款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应用程序本地化的更多相关文章

  1. iOS 应用程序本地化

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

  2. iOS应用程序本地化

    一.简介 * 使用本地化功能,可以轻松地将应用程序翻译成多种语言,甚至可以翻译成同一语言的多种方言 * 如果要添加本地化功能,需要为每种支持的语言创建一个子目录,称为”本地化文件夹”,通常使用.lpr ...

  3. app应用程序本地化--备用

    一.简介 * 使用本地化功能,可以轻松地将应用程序翻译成多种语言,甚至可以翻译成同一语言的多种方言 * 如果要添加本地化功能,需要为每种支持的语言创建一个子目录,称为”本地化文件夹”,通常使用.lpr ...

  4. C#控制台程序本地化应用(Localization)

    本地化在百度百科上的解释如下: “软件本地化是指将某一产品的用户界面(UI)和辅助材料(文档资料和在线帮助菜单)从其原产国语言向另一种语言转化,使之适应某一外国语言和文化的过程.” 其原理主要是把相同 ...

  5. 在Xcode4中给程序提供命令行参数(转)

    网上xcode4的资料实在是不多,再加上xcode4相对3的改动还那么大,并且还只有英文版.我为了这个问题头痛了很久.后来终于找到了...方法如下 xcode菜单的Product->EditSc ...

  6. C# Winform程序本地化应用

    1. 创建一个WinForm应用程序 – “WindowsFormsLocalizationTest”. 2. 在主窗体属性栏里,把Localizable属性设置成”True”. 3. 添加两个But ...

  7. iOS本地化应用程序

    因为使用的是xcode4,应用程序本地化的问题跟以前的版本还是有些不同,在网上找了些资料对于xcode4以上的版本资料还是相对较少,有些最后要通过手动创建文件,这样操作实在是太麻烦,所以经过一个下午的 ...

  8. ASP.NET Core 中文文档 第三章 原理(6)全球化与本地化

    原文:Globalization and localization 作者:Rick Anderson.Damien Bowden.Bart Calixto.Nadeem Afana 翻译:谢炀(Kil ...

  9. iOS开发——高级技术&本地化与国际化详解

    本地化与国际化详解 效果如下:   英语:                                                                    中文: 具体实现如下: ...

随机推荐

  1. php mysql_select_db实例

    在php中,我们经常需要连接数据库和操作数据库, 在操作数据库之前,我们需要选择一个数据库,本文章通过实例向小伙伴们介绍php mysql_select_db选择数据库的使用方法. 首先介绍一下mys ...

  2. js的传值,table中tr的遍历,js中动态创建数组

    1.这里关键是对页面中的传值,其次是动态的创建一个数组,用来存值 $(val).css("background-color", "rgb(251, 248, 233)&q ...

  3. 转 UITabBarController简单介绍

    文顶顶 iOS开发UI篇—UITabBarController简单介绍 iOS开发UI篇—UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavi ...

  4. cocos2d-x 中 TTF 字体文件的位置

    cocos2d-x 中,字体文件需要保存在 fonts 文件夹中,如果字体路径中没有 fonts/ 会自动添加上这个文件夹. 如果字体名称没有 .ttf 后缀,也会自动加上这个后缀. unsigned ...

  5. Oozie JMS通知消息实现--根据作业ID来过滤消息

    一,介绍 本文使用Oozie的消息通知功能,并根据JMS规范中的消息选择器(Selector)实现 根据作业的ID来过滤消息. 首先搭建好JMS Provider(ActiveMQ) ,并进行相关配置 ...

  6. POI实现word文档转html文件

    POI word文件转html package com.feiruo.officeConvert; import java.io.BufferedWriter; import java.io.File ...

  7. oracle的sqlldr并行导入表不要加索引

    ORA-26002: Table string has index defined upon it. Cause: Parallel load was specified into a table w ...

  8. 学习练习 java 输入输出流练习2

     编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt p ...

  9. sqlserver分区表实践:对时间分区表自动进行管理

    项目问题:有一张日志表,插入和查询为主,每天记录数据为200多万,大小为2G-4G之间.一开始开发人员使用delete语句手动删除,保留7天数据,经常造成阻塞和性能瓶颈.但是如果不删除数据随着表越来越 ...

  10. Linux命令行 3大技巧归纳

    在软件开发的世界中,作为web端程序猿打交道最多的操作系统相信就是Linux系统了吧.而对于Linux系统的使用,如果能掌握一些小技巧,在程序开发.调试的过程中,相信做事的效率也会有一些提升.下面就和 ...