日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android-实现一个简单的自动翻译插件

發布時間:2024/9/30 Android 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android-实现一个简单的自动翻译插件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 實現一個簡單的自動翻譯插件
    • 實現思路
    • 幾個重要的實現方法
      • 1、解析xml
      • 2、寫文件
      • 3、 翻譯
    • 使用

實現一個簡單的自動翻譯插件

最近在開發項目是要將Android相關的資源進行國際化,需要將values目錄中所有相關的字符串資源(中文),生成匹配的一套英文且保存在values-en目錄;當然國際化不僅僅是要英文還要提供臺灣等其他語言,這里為了演示方便,只說下如何實現一個簡單的翻譯成英文的gradle插件;如果對自定義gradle插件不了解可以參考Android-如何自定義gradle插件這篇文章

實現思路

因為我們要讀取values下所有需要翻譯等字符串(中文)資源;為了方便處理我們將字符串資源統一保存到strings_xxx.xml文件中,這樣便于后期模塊處理。
我們看下處理前values目錄結構

其中strings開頭的xml文件就是我們要翻譯的資源文件

我們先簡單看單個文件如何操作

  • 讀取xml文件內容
  • 將讀取的內容存到一個Map中
  • 調用第三方翻譯API獲取英文
  • 將英文存入一個新Map中
  • 如果英文目錄沒有對應到資源文件直接創建,并將新Map寫入即可
  • 如果英文目錄有對應的資源文件,則將英文資源沒有的字符串資源追加其中即可
  • 幾個重要的實現方法

    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-实现一个简单的自动翻译插件的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。