IOS本地化

原文 http://www.cocoachina.com/ios/20141004/9827.html

iOS和OSX支持40种语言的本地化,Xcode无疑为这一过程提供了强有力的支持。苹果将这一多语言适配过程细分为Internationalization(国际化)和Localization(本地化)两个阶段。

在将你的APP适配各种语言本地化之前,你得先让你的APP富有国际范儿,也就是说国际化是一条通往本地化的必经之路。在国际化阶段,你需要让你的APP与语言和区域独立。

苹果的框架已经帮我们把不同语言的数据分离开,这更有助于我们管理这些资源,包括图片、声音、视频、文档、用户界面文字(甚至代码中编写的用户界面文字),它们会被建立在同一个bundle中。

NSLocalizedString

我们来使用NSLocalizedString来让用户界面的文字国际化,不过这些文字不是在IB上输入的,而是在代码中产生并赋值的:

#define NSLocalizedString(key, comment) \

[[NSBundle mainBundle] localizedStringForKey:(key) value:@""table:nil]

上面这个Swift语言声明的函数可以直接返回一个经过本地化处理过的字符串,这就使得你在代码中给一些控件文本赋值时更有“国际化视野”:

NSString*str=NSLocalizedString(@"save",@"保存");

因为不用的语言会有不同的专业名词,所以最后的comment参数很重要,它可以暗示翻译人员这段文字要表达的含义。而第一个参数key的内容为基础语种的内容,将它作为“键”来映射其他语言对应翻译后的“值” .

NSFormatter

NSFormatter算是老朋友了,它把数据转化成人们易读的字符串,而且还会根据不同语言和区域进行格式上的优化。它默认使用当地的语言习惯,我们不需要配置任何参数。比如显示时间日期,数字,金融,字节计数等格式上的本地化。现在iOS8和OSX Yosemite加入了健康相关的功能,NSFormatter也加入了很多新的量词,比如能量、长度高度、重量等方面。

NSBundle

你的APP构建于很多文件夹中,而不是一个单独的文件。这些文件夹被叫做bundle。它们不仅仅包含了你的APP,还有你APP的扩展(extensions),你的构架(frameworks)等。而NSBundle提供了获取这些bundle中资源的标准API。当你使用这些API的时候,它们会自动使用符合当前地区语言的最恰当的资源。建立bundle是Xcode的活儿,所以我们不需要手动去管理这些资源文件放在bundle的具体位置,而是告诉Xcode哪些资源可以被本地化,设置好资源文件对应的语言,然后就交给Xcode去管理这些资源文件在bundle中的位置吧。

所以我们在加载一些资源文件的时候依然向以前那样从bundle获取url就行啦,Xcode已经帮我们替换成了本地化的资源,前提是你已经在Xcode中设置好了当前语言版本的对应资源。

Xcode

在Xcode5中支持了使用base国际化并用自动布局优化国际化后的界面,现在其他资源文件也可以这么干了,甚至可以在Xcode中预览界面布局效果。

点选一个xib或storyboard文件后,在File Inspector中的Localization中可以设置支持的语言。Xcode会自动从界面元素中提取出文字到strings文件中,翻译人员可以根据注释来在对应语言的strings文件中进行翻译。当然也可以直观化的转换成界面形式的文件来直观化翻译工作:


在Xcode6中我们可以在Debug时预览不同语言和地区APP的界面效果,这样我们就不用在debug阶段不断的切换模拟器或真机的系统语言了!首先要在scheme中更改下运行APP的语言和地区:


注意到后面还有两项:双倍长度的模拟语言和从右到左的模拟语言,这两种是模拟极端状况下来考验我们UI效果的。比如在表达相同语义时英语的长度要比汉语长很多,而德语又比英语长一些,这很可能让APP的界面造成混乱;而还有语言是从右到作的(古汉语的写法?),这也都是一些APP需要考虑的地方。

本地化—翻译你的APP

之前国际化的工作就是将工程变得有国际范儿,建立起了支持多语种的架构,那么接下来就是苦逼的翻译工作和本地资源准备工作,说好听点儿就叫本地化。

首先要把表面上的工作做了,也就是翻译用户界面上所有的文字。当然这不是程序员该干的活儿,更不能直接交给谷歌翻译,而程序员与专业翻译人员沟通时还是需要成本的:首先把需要翻译的内容从工程里整理出来,然后交给负责翻译的妹子,等妹子翻译好后再把结果导入工程中,嗯目测工作量亚历山大。PS:为什么翻译是妹子?

就算妹子再萌,也不能因为这占用了程序猿们宝贵的工作时间!Xcode6简化了导入导出这些资源的流程,它会检查IB资源和源文件并提取“source strings”,并生成XLIFF文件。翻译好的XLIFF文件也可以通过Xcode导入到工程中来生成和更新资源。嗯,可以把省下来的时间干一些其他的事情咯。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,511评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,495评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,595评论 0 225
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,558评论 0 190
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,715评论 3 270
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,672评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,112评论 2 291
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,837评论 0 181
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,417评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,928评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,316评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,773评论 2 234
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,253评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,827评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,440评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,523评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,583评论 2 249

推荐阅读更多精彩内容

  • 1、介绍 国际化(Internationalization)是指应用程序在运行的时候,可以根据客户端请求来自的国家...
    JSOfJackChen阅读 3,739评论 0 5
  • iOS 本地化入门教程 iOS应用的本地化原理非常简单,是通过strings类型的文件,为同一种语言的不同翻译设置...
    秋刀生鱼片阅读 8,166评论 3 19
  • 1、本地化介绍 1、本地化分类 使用本地化功能,可以轻松地将应用程序翻译成多种语言,甚至可以翻译成同一语言的多种方...
    JC_Wang阅读 711评论 1 0
  • 目的 :应用国际化,提供多种语言支持 目录结构:支持特定语言文件,放在特定的目录下。目录命名"<本地代号>.lpr...
    天涯笑笑生阅读 752评论 0 2
  • 一、语言本地化功能释义 语言本地化<语言国际化>是指根据用户设备系统的语言设置,自动将应用程序的语言设置为和用户设...
    大雄記阅读 3,403评论 1 2