iOS中多语言本地化流程的优化
来源:互联网 发布:centos 7服务器版安装 编辑:程序博客网 时间:2024/05/24 03:45
本文从提升效率和减少错误两方面对传统的多语言本地化方式进行了优化。
传统的方法
提升点效率
减少些错误
自动化万岁
传统的方法
在 Localizable.strings 中写入多种语言的版本,然后使用 NSLocalizedString 进行本地化:
# en.lproj/Localizable.strings
"login"
=
"Login"
;
"logout"
=
"Logout"
;
# zh-Hans.lproj/Localizable.strings
"login"
=
"登录"
;
"logout"
=
"退出"
;
# usage
loginButton.title = NSLocalizedString(
"login"
, comment:
"login"
)
logoutButton.title = NSLocalizedString(
"logout"
, comment:
"logout"
)
这有什么问题呢?
繁琐!每次都要写 NSLocalizedString(“xxx”, comment: “xxx”) ,虽然有代码补全,但依然很费时。
提升点效率
直接上代码:
extension String {
var
localized: String {
return
NSLocalizedString(self, comment: self)
}
}
于是现在的使用方式就变成了:
loginButton.title =
"login"
.localized
logoutButton.title =
"logout"
.localized
这样代码简洁多了,也保留了代码的自解释。
但,依然还有问题,如果我不小心写成了:
loginButton.title =
"login"
.localized
logoutButton.title =
"loguot"
.localized
编译不会报错,但logoutButton的title却出不来(注意 “loguot”.localized),写错一个字母,抓bug抓好长时间的经历相信很多人都遇到过吧。
这里涉及到编码中的一个小技巧:不要徒手写同一个需要多次使用的字符串,尽量定义成常量进行调用。
减少些错误
还是直接上代码:
extension String {
static
var
localized_login: String {
return
"login"
.localized }
static
var
localized_logout: String {
return
"logout"
.localized }
}
现在用起来就更爽了:
loginButton.title = .localized_login
logoutButton.title = .localized_logout
得益于Xcode代码提示补全的功能,我只需输入”.” “login” 回车,基本就就可以完成输入:
乍一看,已经将写字符串时出错的概率降到最低了,但这样又要多写一堆代码,岂不是把之前好不容易提升起来的效率又降低了,再加上万一,我们在写 localized_logout 时还是写成了 “loguot”.localized ,这不是”辛辛苦苦大半年,一朝回到解放前”的节奏?
自动化万岁
思路:使用脚本读取 Localizable.strings ,然后输出成我们需要的常量格式。
Build Phases中新建一个 Run Script,填入以下脚本:
# Localizable.strings文件路径
localizableFile=
"${SRCROOT}/${PROJECT_NAME}/Support/en.lproj/Localizable.strings"
# 生成的swift文件路径(根据个人习惯修改)
localizedFile=
"${SRCROOT}/${PROJECT_NAME}/Source/Utils/LocalizedUtils.swift"
# 将localizable.strings中的文本转为swift格式的常量,存入一个临时文件
sed
"s/^\"/ static var localized_/g"
"${localizableFile}"
| 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
"${localizedFile}.tmp"
以上脚本的作用就是将localizable.strings中的内容转换成swift的常量形式,并作为String的extension存储起来,具体步骤看注释。
其中有几点需要注意:
sed的用法中,^… 表示以…开头,…$ 表示以…结尾 [参考链接]。
> 表示覆盖输出到文件,>> 表示增量输出到文件。
echo -e 表示将\n作为换行符输出(其他转义字符同效)。
将 Run Script 放在 Compile Sources 的上面,这样可以在编译代码前执行,如果出现错误也很容易定位(例如Localizable.strings中行末忘记写分号)。
脚本效果:
本地化文件:
# en.lproj/Localizable.strings
"login"
=
"Login"
;
"logout"
=
"Logout"
;
输出文件:
# LocalizedUtils.swift
import Foundation
extension String {
var
localized: String {
return
NSLocalizedString(self, comment: self) }
static
var
localized_login: String {
return
"login"
.localized }
static
var
localized_logout: String {
return
"logout"
.localized }
}
至此,我们只要在写好Localizable.strings或有修改时 ?+B build一下,就能愉快的使用了。
- iOS中多语言本地化流程的优化
- iOS 优化内存(三)iOS应用程序多语言本地化解决方案
- ios多语言本地化
- iOS 多语言本地化
- iOS 本地化多语言支持
- iOS 本地化多语言支持
- ios app本地化流程
- 关于多语言本地化的ios app开发教程
- 多语言本地化操作的ios app开发教程
- IOS应用程序多语言本地化的一点个人总结
- iOS 项目的本地化处理(多语言开发)
- ios XCODE 7.2版本的多语言本地化国际化
- iOS 项目的本地化处理(多语言开发)
- iOS常用的四种本地化语言
- IOS 程序实现多种语言的本地化
- ios多语言本地化解决方法汇总
- IOS应用程序多语言本地化解决方案
- IOS应用程序多语言本地化解决方案
- iOS 应用逆向工程2.0 书籍的笔记
- pygorithm: 一个用于学习重要算法的Python模块
- leetcode 438.Find All Anagrams in a String
- UE4-Android-环境部署遇到的问题
- liunx 环境下 python模块numpy,scipy,matplotlib 安装
- iOS中多语言本地化流程的优化
- 文件内容的查阅
- jeecg如何在一个页面使用按钮选择弹出选择框
- 贪心算法题集总结
- 【FZU
- android在java代码中绘制矩形框
- 中缀式变后缀式
- Android Studio 如何导入aar包
- 安装latexdiff