Groovy學習--多語言工具

多語言工具

根據輸入的 name,value,lineNum在各個strings.xml裏指定的行號增長字段,支持Google翻譯java

前置

  • Groovy環境
  • Google翻譯Api的key

    收費!git

預覽

預覽

使用

  • addString.groovy所在文件夾複製到項目的對應位置
  • 編輯addString.groovy最後的方法調用
  • cd app/groovy
  • groovy addString.groovy

代碼 Github

import groovy.json.JsonOutput
import groovyx.net.http.HttpResponseException
import groovyx.net.http.RESTClient
import groovy.transform.Field

/** * @Grab http://ifeve.com/groovy-grape/ * 網絡訪問的庫 * https://github.com/jgritman/httpbuilder */
@Grab('org.codehaus.groovy.modules.http-builder:http-builder:0.7.1')
import static groovyx.net.http.ContentType.URLENC



@Field fileDirs = new File("../src/main/res")
@Field googleTranslationUrl = 'https://translation.googleapis.com/language/'
--請填入google翻譯api的key
@Field googleTranslationKey = 'google翻譯api的key'
/** * 使用google翻譯 的源語言 */
@Field sourceLanguage = 'en'
/** * 默認語言 */
@Field defaultLanguage = 'en'

static def getInput(def name, def value) {
    def input = " <string name=\"$name\">$value</string>"
    return input
}

static def appendWihLineNum(def list, def lineNum, def value) {
    //超過最大行數則添加到最後
     list.add(list.size > lineNum ? lineNum : list.size - 1, value)
}

/** * 添加字符串文件 * @param name name * @param value 默認值 或 array * @param lineNumber 行號,超過最大,會add進倒數第二行 * @param useGoogleTranslation 要求 value 必須是英語 */
void appendStringArrays(def name, def value, def lineNumber, def useGoogleTranslation) {
    def fileIndex = 0
    def input = getInput(name, value)

    //找匹配 values.* 的文件或文件夾
    fileDirs.eachFileMatch(~/values.*/) {
        directory ->
            //找strings.xml
            directory.eachFileMatch(/strings.xml/) {
                // 文件 轉 List<String>
                def lines = it.readLines()
                def directoryNameSplitLanguage = directory.name.split("-")
                //取當前文件夾對應的語言
                def language = directoryNameSplitLanguage.length == 1 ? defaultLanguage : directory.name.split("-")[1]

                //須要google翻譯,同語言不翻譯
                if (useGoogleTranslation && language != sourceLanguage) {

                    //填充的內容, will be url-encoded
                    def body = [q: value, target: language, format: 'text', source: sourceLanguage, key: googleTranslationKey]
                    def http = new RESTClient(googleTranslationUrl)
                    http.ignoreSSLIssues()
                    try {
                        def resp = http.post(path: 'translate/v2', body: body, requestContentType: URLENC,
                                headers: ['Content-Type': 'application/x-www-form-urlencoded'])

                        //填充翻譯以後的文本
                        def result = resp.getData().data.translations[0].translatedText appendWihLineNum(lines, lineNumber, getInput(name, result)) it.text = lines.join('\n')
                        return
                    } catch (HttpResponseException e) {
                        r = e.response println("Success: $r.success") println("Status: $r.status") println("Reason: $r.statusLine.reasonPhrase") println("Content: \n${JsonOutput.prettyPrint(JsonOutput.toJson(r.data))}") } } else if (value instanceof List) {
                    input = getInput(name, value.get(fileIndex))
                }

                appendWihLineNum(lines, lineNumber, input)
                //assert [1, 2, 3].join('-') == '1-2-3'
                //修改文件的內容
                it.text = lines.join('\n')
                fileIndex++

            }
    }
}



複製代碼
相關文章
相關標籤/搜索