开发Android studio 插件:项目国际化与Excel文件双向导入,并支持在线翻译。

开发一个将Android项目的国际化资源与Excel表格互导的插件


功能说明

当一个项目从非国际化(只有单言语类型)转向国际化(多语言支持)亦或项目过于庞大Module数量众多每期迭代都需要从各个Module抽取和填补翻译时就会有了个很烦恼的事情,这么多的语言资源靠手动整理那得到猴年马月,等整理完也练就了一双麒麟臂了。(以上纯属抱怨可忽略)😄

言归正传,如同以上机械式工作作为一名程序猿当然是交给程序去处理喽,所以需要写一个能够遍历读取识别并提取项目中的语言资源文件,并将资源导出成Excel文件以方便交给其他工具人(手动狗头)进行翻译的脚本,翻译完成后还需要将Excel文件转换成项目中的资源格式并原路存储进去。为了更加方便的在各个项目中使用当然还是把上面写的脚本套上Intellij plugin的皮囊一起食用更佳。

支持功能:

  • 将项目的res->values-xx-> strings.xml资源导出至excel文件(请勿修改表格的格式)
  • 将excel文件文件中的资源导回至项目中(资源会原路径写入)
  • 支持导出资源时自动在线翻译缺失的语言类型资源,并写入Excel中。(在线翻译使用的百度API,大量翻译可能会限制IP)
  • 支持将Excel导回项目中时自动补全缺失的语言资源,以Excel中已存在的资源为准。
  • 支持Excel导回项目时对资源中的 占位符进行修正,eg:(% S,s%,% D d%)修正 (%s,%d)。一般这种异常占位符由机器翻译引起。
  • 支持自定义选择导入\导出Module
  • 支持自定义选择导入\导出语言类型
  • 支持导入时自动创建缺失的语言类型对应的资源文件以及文件夹
  • 支持数组类型资源
  • 支持导出的资源使用颜色高亮状态新增覆盖异常
Tip:当前插件v1.0.1版本未经过大量测试,所以使用前务必先提交项目代码,以防不必要的损失。

安装使用方式

  1. 安装插件
  • 在线安装

在线搜索 "LangResExport"


image.png
  • 离线安装

插件jar包下载地址:https://github.com/LucasDevelop/LangTransExcel/blob/master/LangTransExcel-V1.0.1.zip
使用本地安装,随后重启IDE。

image.png

  1. 启动插件

打开Android stuido 菜单栏Tools->Android Lang Transform Exce

选择模式


image.png

点击OK后开始扫描项目中的资源。


image.png

导出:导出项目中国际化翻译资源到Excel表格
等待扫描结束后开始配置参数,参数会根据扫描项目的结果自动列出一存在的module和语言类型。可自行选择需要导出的module和语言类型。


image.png

配置完成点击OK,等待导出结果。


image.png

导入:将Excel表格中的资源导入到项目中
等待扫描结束后开始配置参数

image.png

<font color='red'>Tip:默认语言语种指的是values/strings.xml中语言类型</font>

点击OK等待导入完成即可。

  1. 查看导出的Excel文件

如果配置时选择的是文件夹那么生成Excel 文件为【国际化翻译.xls】固定名称。剩下的就是翻译的事情了。

插件开发流程

  1. 安装Intellij idea

下载地址:https://www.jetbrains.com/idea/ 安装最新的版本即可

  1. 新建一个Plugin项目

选择Gradle项目以方便依赖三方lib,并且勾选java/Intellij Platfrom Plugin, kotlin是否勾选看个人开发语言习惯。然后下一步。

image.png

填写项目名称以及地址

image.png
  1. 配置插件信息
image.png
  1. 创建java文件夹
image.png
  1. 配置Gradle

如果插件要可安装在最近android studio版本请务必配置红框内容,否则会导致无法安装在Android studio上。
intellij {
version = '2020.1' // 因为Android Studio 4.1是基于IDEA 2020.1 Community版本开发的,所以这里调试也指定为此版本
plugins = ['android']
}
patchPluginXml {
changeNotes = """
V1.0.0:实现基本双向导入功能.

<em></em>"""
sinceBuild = '191' // 插件适用的IDEA版本范围,此范围基本涵盖了Android Studio最近两三年的版本
untilBuild = '212.*'
}

image.png
  1. 创建插件入口,也就是为啥插件会在Tools->Android Lang Transform Excel上
image.png
image.png
  1. 创建弹窗。
image.png

创建完弹窗后可看到以下界面,最右侧可选择控件并拖动到中间的布局中。

image.png
  1. 运行插件,查看效果
image.png

等待编译结束后会自动新开一个Idea程序窗口,在新开的窗口创建一个新项目或者选择一个项目进入。在新开的Idea窗口中找到我们的插件并打开。

image.png

最后效果如下:

image.png
  1. 打包插件并安装在android studio上

打开右侧Gradle任务栏,运行buildPlugin

image.png

等待编译结束后在build中找到我们的插件包

image.png

在Android studio中选择本地安装我们的插件,然后重启Android studio即可。
当然,我们也可以把插件发布到官网仓库然后供其他人安装使用,具体方式大家各自查找吧,这里不讲解了。

image.png

国际化资源与Excel互导脚本开发

主要是基于poi和dom4j的API进行文件操作,API 对应的Gradle依赖如下
implementation group: 'org.apache.poi', name: 'poi', version: '3.9'
// https://mvnrepository.com/artifact/org.dom4j/dom4j
implementation group: 'org.dom4j', name: 'dom4j', version: '2.1.1'
implementation group: 'jaxen', name: 'jaxen', version: '1.2.0'

image.png

具体文件查找Excel读取/写入实现代码已上传至gayhub,在下就不在这里指指点点了。相信各位大佬对于这种级别的API还是能把握住的。

插件和脚本源码地址:https://github.com/LucasDevelop/LangTransExcel

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容