iOS语言国际化(本地化)

Only in the dictionary, will success appear before work.
只有在字典里,成功才出现在工作之前。

前言

年前公司谈了一个项目,对方是台湾的,谈的很愉快。但是问题来了,App需要过国际化。老板说,既然要做繁体的,那么就把英文也一起做了吧。当时做完了就快放假了,也没有心情写,加上还没有写过有关国际化的文章,于是就有了这篇文章。

公司的项目写的时候是纯代码写的,所以这篇文章主要说的是纯代码的语言国际化,xib及storybroad略微涉及。言归正传,开撸!

一、选中蓝色工程文件夹,在PROJECTinfo里面的Localizations添加需要的国际化的语言,如图1

图.1

二、国际化我们要做的有两部分:应用名称国际化和字符串(App内的文字)国际化

2.1、应用名称国际化

应用名称本地化,是指同一个App的名称,在不同的语言环境下(手机当前显示的语言)显示不同的名称。比如,微信在简体中文环境下App名称显示为微信,在英语环境下显示为WeChat。下文就是应用名称本地化。

2.1.1、选中Info.plist文件,command + N,选择Strings File

图 2.1.1

2.1.2、文件命名的时候必须是InfoPlist,必须是哦。

图 2.1.2

创建完成之后会有一个文件,如图:

InfoPlist.strings

2.1.3、选中创建好的InfoPlist.strings文件,打开文件检查器,点击上面的Localize...,如图:

图 2.1.3

2.1.4、点击之后会有一个弹出框,点击列表你会发现,里面的有的语言都是之前(标题号为一)添加过的。

点击Localize

2.1.5、选择一种语言,点击确定(Localize)就会出现下图,上面会有你开始添加过的所有语言,剩下的只要打钩就行了。记得打钩的时候点击一个稍微停顿一下再点第二个,具体为啥,你点快点你就知道。

图 2.1.5

依次勾选之后,查看左边新建的文件InfoPlist.strings,你会发现会多出三个子文件,如图:

InfoPlist.strings子文件

2.1.6、接下来就到了关键的时候了,在对应的文件中进行应用名称国际化,在进行国际化的时候会用到CFBundleDisplayName字段,在使用该字段的时候可以加上引号也可以不加

(1)在InfoPlist.strings(English)中添加如下代码:

//在手机语言是英文时显示的名称
CFBundleDisplayName = "App Name";

英文

(2)在InfoPlist.strings(Chinese (Simplified))中添加如下代码:

//在手机语言是简体中文时显示的名称
CFBundleDisplayName = "应用名称";

简体中文

(3)在InfoPlist.strings(Chinese (Traditional))中添加如下代码:

//在手机语言是繁体中文时显示的名称
CFBundleDisplayName = "應用名稱";
繁体中文

做完上面的话,设置手机不同的语言,你会发现应用的名称就相应的改变了, 要是需要其他国语言,以此类推。

2.2、字符串国际化

字符串国际化就是App中的字符串在不同语言环境显示的不同状态。举个栗子,主页在中文是主页,在英文就是Home。字符串国际化和应用名称国际化基本一样,但也有细微差别,就是新建的文件名称不一样,还有就是,在使用的时候会用到NSLocalizedString(key, comment)这个宏,下面细说

2.2.1、和应用名称本地化一样,command + N新建文件:

新建文件

文件命名的时候一定要是Localizable.strings,一定要是哦。

Localizable.strings

2.2.2、新建好之后,点击新建的Localizable.strings文件,在右边的文件检查器Localize...添加需要的语言:

点击Localize...

2.2.3、剩下的操作和2.1.4、2.1.5、2.1.6的操作是一样的,最终是这样子的:

操作完成后

2.2.4、字符串国际化和应用名称国际化写法是一样的,左边是key,右边是value。举个button的栗子:

(1)在Localizable.strings(English)中添加如下代码:

//在手机语言是英文时显示的名称
"button" = "Button";
英文

(2)在Localizable.strings(Chinese (Simplified))中添加如下代码:

//在手机语言是简体中文时显示的名称
"button" = "按钮";
简体中文

(3)在Localizable.strings(Chinese (Traditional))中添加如下代码:

//在手机语言是繁体中文时显示的名称
"button" = "按鈕";
繁体中文

2.2.5、万事俱备,只欠东风,怎么用呢?开始笔者就提到了要用NSLocalizedString(key, comment)这个宏,它是Foundation框架自带的,根据Key获取对应的字符串,然后赋值给代码中的字符串。两个参数。使用的时候第一个参数就填写国际化等号左边的,第二参数填写nil即可。

例:给App中某个button设置title

[btn setTitle:NSLocalizedString(@"button", nil) forState:UIControlStateNormal];

上面一行代码就OK了,在设置手机不同语言的时候就会显示自己设置的value值了。

后记

到这国际化基本就完成了, 以后有时间我会把xib和storyboard的国际化加上。有啥不对的地方欢迎指正,大家共同进步。

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

推荐阅读更多精彩内容