Android-实现一个简单的自动翻译插件
目錄
- 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的自動(dòng)翻譯插件
- 實(shí)現(xiàn)思路
- 幾個(gè)重要的實(shí)現(xiàn)方法
- 1、解析xml
- 2、寫文件
- 3、 翻譯
 
- 使用
 
實(shí)現(xiàn)一個(gè)簡(jiǎn)單的自動(dòng)翻譯插件
最近在開(kāi)發(fā)項(xiàng)目是要將Android相關(guān)的資源進(jìn)行國(guó)際化,需要將values目錄中所有相關(guān)的字符串資源(中文),生成匹配的一套英文且保存在values-en目錄;當(dāng)然國(guó)際化不僅僅是要英文還要提供臺(tái)灣等其他語(yǔ)言,這里為了演示方便,只說(shuō)下如何實(shí)現(xiàn)一個(gè)簡(jiǎn)單的翻譯成英文的gradle插件;如果對(duì)自定義gradle插件不了解可以參考Android-如何自定義gradle插件這篇文章
實(shí)現(xiàn)思路
因?yàn)槲覀円x取values下所有需要翻譯等字符串(中文)資源;為了方便處理我們將字符串資源統(tǒng)一保存到strings_xxx.xml文件中,這樣便于后期模塊處理。
 我們看下處理前values目錄結(jié)構(gòu)
 
 其中strings開(kāi)頭的xml文件就是我們要翻譯的資源文件
我們先簡(jiǎn)單看單個(gè)文件如何操作
幾個(gè)重要的實(shí)現(xiàn)方法
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) {/*** 如果對(duì)應(yīng)文件存在,則追加相關(guān)數(shù)據(jù)* 否則創(chuàng)建文件即可*/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、 翻譯
翻譯操作調(diào)用有道api,現(xiàn)在貌似收費(fèi)了,我是借鑒別人的代碼(https://github.com/zyj1609wz/AndroidPluginTranslate/blob/master/src/util/HttpManager.java)實(shí)現(xiàn)的
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}使用
關(guān)于插件的具體實(shí)現(xiàn)以及如何使用可以查看源碼自動(dòng)翻譯插件
注意:因?yàn)椴荒鼙WC中文都能準(zhǔn)確翻譯成英文,所以生成的字符串有的為空(此處只是一個(gè)參考Demo)
總結(jié)
以上是生活随笔為你收集整理的Android-实现一个简单的自动翻译插件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: 如何快速将Android库发布到JCen
- 下一篇: Python Excel表格操作总结
