Only in the dictionary, will success appear before work.
只有在字典里,成功才出现在工作之前。
前言
年前公司谈了一个项目,对方是台湾的,谈的很愉快。但是问题来了,App需要过国际化。老板说,既然要做繁体的,那么就把英文也一起做了吧。当时做完了就快放假了,也没有心情写,加上还没有写过有关国际化的文章,于是就有了这篇文章。
公司的项目写的时候是纯代码写的,所以这篇文章主要说的是纯代码的语言国际化,xib及storybroad略微涉及。言归正传,开撸!
一、选中蓝色工程文件夹,在PROJECT
中info
里面的Localizations
添加需要的国际化的语言,如图1
二、国际化我们要做的有两部分:应用名称国际化和字符串(App内的文字)国际化
2.1、应用名称国际化
应用名称本地化,是指同一个App的名称,在不同的语言环境下(手机当前显示的语言)显示不同的名称。比如,微信在简体中文环境下App名称显示为微信
,在英语环境下显示为WeChat
。下文就是应用名称本地化。
2.1.1、选中Info.plist
文件,command + N
,选择Strings File
。
2.1.2、文件命名的时候必须是
InfoPlist
,必须是哦。
创建完成之后会有一个文件,如图:
2.1.3、选中创建好的
InfoPlist.strings
文件,打开文件检查器,点击上面的Localize...
,如图:
2.1.4、点击之后会有一个弹出框,点击列表你会发现,里面的有的语言都是之前(标题号为一)添加过的。
2.1.5、选择一种语言,点击确定(Localize)就会出现下图,上面会有你开始添加过的所有语言,剩下的只要打钩就行了。记得打钩的时候点击一个稍微停顿一下再点第二个,具体为啥,你点快点你就知道。
依次勾选之后,查看左边新建的文件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
,一定要是哦。
2.2.2、新建好之后,点击新建的Localizable.strings
文件,在右边的文件检查器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的国际化加上。有啥不对的地方欢迎指正,大家共同进步。