介绍
如果 App 需要给不同语言的用户使用,需要进行国际化处理。如果 App 需要进行国际化,在开发之初就需要考虑,在开发时统一使用某一种语言(建议英文),待开发完成以后再进行国际化处理。
配置国际化语言
在进行国际化之前,必须要添加需要国际化的语言,选中国际化的项目 —> PROJECT —> Info —> Localizations,点击
添加需要的国际化语言(默认已经存在英文)。
App名国际化
- 新建一个
Strings File
,必须命名为InfoPlist.strings
。 - 在 Xcode 的右侧文件检查器中找到
Localization
,点击Localize...
,然后勾选配置的国际化语言。 -
InfoPlist.strings
左侧多了一个箭头,点击箭头可以展开,Strings File
里面都是形如Key = Value
的键值对,操作时一定要保证多个国际化文件中Key
的一致性。 - 设置 App 名字的 Key 为
"CFBundleName"
。
// 英文名
"CFBundleName" = "I18N";
代码语言:javascript复制// 中文名
"CFBundleName" = "国际化";
文本国际化
- 新建一个
Strings File
,必须命名为Localizable.strings
。 - 在 Xcode 的右侧文件检查器中找到
Localization
,点击Localize...
,然后勾选配置的国际化语言。 - 在
Localizable.strings
的各个国际化版本中写上需要国际化文本的Key = Value
对。
"title" = "Info";
"message" = "This is a Dialog";
"btnTitle" = "Cancel";
代码语言:javascript复制"title" = "温馨提示";
"message" = "这是一个对话框";
"btnTitle" = "取消";
- 在需要的地方使用
NSLocalizedString(key, comment)
读取,其中第一个参数就是上面的key
。
NSLocalizedString("title", comment: "")
NSLocalizedString("message", comment: "")
NSLocalizedString("btnTitle", comment: "")
图片国际化
图片和文本国际化的使用方式一样,首先在Localizable.strings
中进行图片名称的设置,然后通过NSLocalizedString(key, comment)
来读取图片名,再根据不同的图片名获取不同的图片。
let imageName = NSLocalizedString("img", comment: "")
let image = UIImage(named: imageName)
imageView.image = image
storyboard/xib国际化
- 二者使用方式几乎一样,以 storyboard 为例。
- 在配置国际化语言时,会弹出选择需要国际化的 storyboard 的对话框,选择以后对应的 storyboard 左侧就会多一个箭头,点击箭头可以展开,里面有
storyboard名.strings
的Strings File
。 - 选中
storyboard名.strings
,在 Xcode 的右侧文件检查器中找到Localization
,点击Localize...
。 - 在
storyboard名.strings
文件对应位置填写相应的国际化信息。
/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "bRH-7c-qiE"; */
"bRH-7c-qiE.normalTitle" = "Button";
/* Class = "UILabel"; text = "UserName"; ObjectID = "dp4-Bf-56s"; */
"dp4-Bf-56s.text" = "UserName";
/* Class = "UITextField"; placeholder = "Please input your name"; ObjectID = "fen-IE-aUn"; */
"fen-IE-aUn.placeholder" = "Please input your name";
代码语言:javascript复制/* Class = "UIButton"; normalTitle = "Button"; ObjectID = "bRH-7c-qiE"; */
"bRH-7c-qiE.normalTitle" = "登录";
/* Class = "UILabel"; text = "UserName"; ObjectID = "dp4-Bf-56s"; */
"dp4-Bf-56s.text" = "用户名";
/* Class = "UITextField"; placeholder = "Please input your name"; ObjectID = "fen-IE-aUn"; */
"fen-IE-aUn.placeholder" = "请输入用户名";
注意:如果在弹出的对话框中没有勾选 storyboard,也可以选中 storyboard 文件,再在 Xcode 的右侧文件检查器中找到
Localization
,点击Localize...
,选择 Base,点击Localize
,然后在Localization
中勾选需要的国际化语言,会生成各个国际化语言的Strings File
,最后进行国际化信息的填充。