iOS语言本地化以及自动化

来源:互联网 发布:淘宝电脑主机便宜 编辑:程序博客网 时间:2024/06/03 15:31

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

选中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 Foundationextension 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

原创粉丝点击