上一篇是把整个工程多个模块中需要翻译的字段找出来,这一篇是把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);
}
}