赞
踩
选中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,目的是选择我们需要本地化的语言
// Localizable App Name是App在英语环境环境下显示的名称
CFBundleDisplayName = "Localizable App Name";
// Localizable App Name是App在英语环境环境下显示的名称
CFBundleDisplayName = "国际化App名称";
字符本地化和App名称本地化过程如出一辙,只是创建的文件名成不一样(连同后缀一起,文件名必须是Localizable.strings),其他步骤完全相同。
"login" = "Login";
"login" = "登录";
这种方式不友好,稍后介绍自动化生成需要的文件
创建XBSTR.strings的文件,使用如下:
NSString *title = NSLocalizedStringFromTable(@”click”, @”XBSTR”, nil);
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。