Android-实现一个简单的自动翻译插件
生活随笔
收集整理的这篇文章主要介绍了
Android-实现一个简单的自动翻译插件
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
目录
- 实现一个简单的自动翻译插件
- 实现思路
- 几个重要的实现方法
- 1、解析xml
- 2、写文件
- 3、 翻译
- 使用
实现一个简单的自动翻译插件
最近在开发项目是要将Android相关的资源进行国际化,需要将values目录中所有相关的字符串资源(中文),生成匹配的一套英文且保存在values-en目录;当然国际化不仅仅是要英文还要提供台湾等其他语言,这里为了演示方便,只说下如何实现一个简单的翻译成英文的gradle插件;如果对自定义gradle插件不了解可以参考Android-如何自定义gradle插件这篇文章
实现思路
因为我们要读取values下所有需要翻译等字符串(中文)资源;为了方便处理我们将字符串资源统一保存到strings_xxx.xml文件中,这样便于后期模块处理。
我们看下处理前values目录结构
其中strings开头的xml文件就是我们要翻译的资源文件
我们先简单看单个文件如何操作
几个重要的实现方法
1、解析xml
private Map<String, String> parseStringXml(def file) {Map<String, String> map = new HashMap<>()def xmlString = new XmlSlurper().parse(file)xmlString.string.each {map.put("${it.@name}".toString(), "${it}".toString())}return map}2、写文件
private void writeFile(File saveFile, Map<String, String> map) {/*** 如果对应文件存在,则追加相关数据* 否则创建文件即可*/if (saveFile.exists()) {Map<String, String> existMap = parseStringXml(saveFile)def writer = new StringWriter()def xml = new MarkupBuilder(writer)xml.resources() {existMap.each { entry ->string(name: "$entry.key", "$entry.value")}writer.write("\n\n <!--ADD STRING START-->")map.each { entry ->if (!existMap.containsKey("$entry.key".toString())) {string(name: "$entry.key", "$entry.value")}}writer.write("\n <!--ADD STRING END-->\n")}FileWriter fw = new FileWriter(saveFile, false)fw.write(writer.toString())fw.close()} else {//create filedef writer = new StringWriter()def xml = new MarkupBuilder(writer)xml.resources() {map.each { entry ->string(name: "$entry.key", "$entry.value")}}FileWriter fw = new FileWriter(saveFile)fw.write(writer.toString())fw.close()}}3、 翻译
翻译操作调用有道api,现在貌似收费了,我是借鉴别人的代码(https://github.com/zyj1609wz/AndroidPluginTranslate/blob/master/src/util/HttpManager.java)实现的
private String translate(String query) {String response = com.github.kevinsawicki.http.HttpRequest.post("https://openapi.youdao.com/api",http.TranslateHttp.buildRequest(query),true).body()//Json 解析def responseBean = mJsonSlurper.parseText(response)String result = ''if (responseBean&& responseBean.web&& responseBean.web.get(0).value) {result = responseBean.web.get(0).value.get(0)}return result}使用
关于插件的具体实现以及如何使用可以查看源码自动翻译插件
注意:因为不能保证中文都能准确翻译成英文,所以生成的字符串有的为空(此处只是一个参考Demo)
总结
以上是生活随笔为你收集整理的Android-实现一个简单的自动翻译插件的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 如何快速将Android库发布到JCen
- 下一篇: 如何扩展Android富文本之Html标