Android整理需要翻译的strings资源(二)

274 阅读1分钟

上一篇是把整个工程多个模块中需要翻译的字段找出来,这一篇是把1个模块里的没翻译的整出来。主要是因为我的Android Studio版本的Translations Editor不能直接复制,要是能复制就不用这样啦。

代码

import com.alibaba.excel.EasyExcel;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.*;

public class FindModuleNeedTrans {
    /**
     * public class ExcelDataBean {
     *     private String name;//key
     *     private String value;//默认值
     *     private String zh;//中文
     *     private String translate;//翻译
     * }
     */
    private static final List<ExcelDataBean> list = new ArrayList<>();
    private static final Map<String, ExcelDataBean> map = new HashMap<>();
    //是否只留下需要翻译的字段
    private static final boolean onlyNeedTrans = true;

    public static void main(String[] args) {
        //模块res目录
        String resPath = "D:\work\xxx\Mine\mine\src\main\res";
        //中文语言编码
        String zhLang = "-zh-rCN";
        //译文语言编码
        String resLang = "-ru";

        try {
            //读取values文件夹
            readDefault(new File(resPath + "\values\strings.xml"));
            //读取values-zh
            readZhLang(new File(resPath + "\values" + zhLang + "\strings.xml"));
            //读取values-ru
            readResLang(new File(resPath + "\values" + resLang + "\strings.xml"));
            //写文件
            write2Excel();
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }

    private static void readDefault(File file) throws DocumentException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(file);
        Element rootElement = document.getRootElement();
        Iterator<Element> iterator = rootElement.elementIterator();
        while (iterator.hasNext()) {
            Element child = iterator.next();
            String name = child.attribute(0).getValue();
            String value = child.getStringValue();
            System.out.println(name + " = " + value);
            map.put(name, new ExcelDataBean(name, value));
        }
    }

    private static void readResLang(File file) throws DocumentException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(file);
        Element rootElement = document.getRootElement();
        Iterator<Element> iterator = rootElement.elementIterator();
        while (iterator.hasNext()) {
            Element child = iterator.next();
            String name = child.attribute(0).getValue();
            String value = child.getStringValue();
            System.out.println(name + " = " + value);
            map.get(name).setTranslate(value);
        }
    }

    private static void readZhLang(File file) throws DocumentException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(file);
        Element rootElement = document.getRootElement();
        Iterator<Element> iterator = rootElement.elementIterator();
        while (iterator.hasNext()) {
            Element child = iterator.next();
            String name = child.attribute(0).getValue();
            String value = child.getStringValue();
            System.out.println(name + " = " + value);
            map.get(name).setZh(value);
        }
    }

    private static void write2Excel() {
        String dst = "D:\xxx\res.xlsx";
        if (onlyNeedTrans) {
            map.forEach((k, v) -> {
                if (v.getTranslate() == null) {
                    list.add(v);
                }
            });
        } else {
            map.forEach((k, v) -> list.add(v));
        }
        System.out.println("excel list size: " + list.size());
        EasyExcel.write(dst, ExcelDataBean.class).sheet("need translate").doWrite(list);
    }
}

输出结果

image.png