iOS语言本地化以及自动化

一、配置需要国际化的语言

选中project->Info->Localizations,然后点击”+”,添加需要国际化/本地化的语言,如下图(默认需要勾选Use Base Internationalization)

二、应用名称本地化/国际化

1、选中Info.plist,按下键盘上的command + N,选择Strings File(iOS->Resource->Strings File)
2、文件名字命名为InfoPlist,且必须是这个名字
3、选中InfoPlist.strings,在Xcode的File inspection(Xcode右侧文件检查器)中点击Localize,目的是选择我们需要本地化的语言

在InfoPlist.strings(english)中加入如下代码:
// Localizable App Name是App在英语环境环境下显示的名称
CFBundleDisplayName = "Localizable App Name";
在InfoPlist.strings(Chinese(Simplified))中加入如下代码:
// Localizable App Name是App在英语环境环境下显示的名称
CFBundleDisplayName = "国际化App名称";

三、代码中字符串的本地化

字符本地化和App名称本地化过程如出一辙,只是创建的文件名成不一样(连同后缀一起,文件名必须是Localizable.strings),其他步骤完全相同。

在Localizable.strings(english)中加入如下代码:
"login" = "Login";
在Localizable.strings(Chinese(Simplified))中加入如下代码:
"login" = "登录";
使用:loginButton.title = NSLocalizedString(“login”, comment: “login”)

这种方式不友好,稍后介绍自动化生成需要的文件

四、定制字符串本地化

创建XBSTR.strings的文件,使用如下:
NSString *title = NSLocalizedStringFromTable(@”click”, @”XBSTR”, nil);

五、使用脚本读取 Localizable.strings ,然后输出成我们需要的常量格式。

1、选中targets->Build Phases,然后点击”+”,然后 New Run Script Phases
2、将 Run Script 拖动放到在Compile Sources的上面
3、脚本如下:

# -*- coding: utf-8 -*
# Localizable.strings文件路径
localizableFile="${SRCROOT}/${PROJECT_NAME}/Source/en.lproj/Localizable.strings"
#  生成的swift文件路径
localizedFile="${SRCROOT}/${PROJECT_NAME}/Source/Utils/LocalizedUtils.swift"
# 转换格式
awk '{print $1,$2,$1";"}' "${localizableFile}" > "${localizableFile}.tmp"
# 将localizable.strings中的文本转为swift格式的常量,存入一个临时文件
sed "s/^\"/ static var localized_/g" "${localizableFile}.tmp" | sed "s/\" = \"/: String { return \"/g" | sed "s/;$/.localized }/g" > "${localizedFile}.tmp"
# 先将localized作为计算属性输出到目标文件
echo -e "import Foundation\n\nextension String {\n  var localized: String { return NSLocalizedString(self, comment: self) }" > "${localizedFile}"
# 再将临时文件中的常量增量输出到目标文件
cat "${localizedFile}.tmp" >> "${localizedFile}"
# 最后增量输出一个"}"到目标文件,完成输出
echo -e "\n}" >> "${localizedFile}"
# 删除临时文件
rm "${localizableFile}.tmp"
rm "${localizedFile}.tmp"
本地化文件:
"create" = "zhenxiaobin";
"login" = "Login";
"logout" = "Logout";
输出文件:
import Foundation

extension String {
  var localized: String { return NSLocalizedString(self, comment: self) }
 static var localized_create: String { return "create".localized }
 static var localized_login: String { return "login".localized }
 static var localized_logout: String { return "logout".localized }

}
使用:

loginButton.title = .localized_login

六、然后再说说我弄自动化脚本时候遇到的坑

1、脚本拷贝到项目也许会不生效,解决办法,用xcode里面的空格替换一下脚本里的空格。不知道Xcode9 抽的什么疯。
2、注意一下路径问题,Localizable.strings这个路径就不多说了,根据自己的路径修改一下就好了,LocalizedUtils.swift这个输出文件,路径注意一下,前面的路径一定要先创建好,不然会报错,找不到文件。第一次Build,你会发现LocalizedUtils.swift这个文件在项目里没有,客官不要着急,在上一级目录下(如:Utils)Show In Finder,是不是有,没有你打我,然后拖到项目里,就OK了。
每次更新Localizable.strings,记得Build一下。
3、脚本的问题,有时间再开一篇,记录一下。
4、应用内语言切换,稍后会补上。

奉上Demo

你可能感兴趣的:(IOS)