1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > android多国语言翻译工具 一键生成28国家翻译6666翻车了

android多国语言翻译工具 一键生成28国家翻译6666翻车了

时间:2022-08-22 13:45:59

相关推荐

android多国语言翻译工具 一键生成28国家翻译6666翻车了

最近把软件发到google play苦于多国语言,手动翻译数量太多太蛋疼,于是用百度翻译api进行多国语言翻译。

不多说直接上代码;

"<string\\s*name=\\\"[\\s\\S]*\\\">";

匹配的是

<string name="app_name">Free 3D starter</string>中的<string name="app_name">

"(?<=\\\">)([\\S\\s]*?)(?=</)";

匹配的是<string name="app_name">Free 3D starter</string>中的<string name="app_name">

中的Free 3D starter

具体正则,大家自己去去理解哈,就不多说了。

import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;import com.baidu.translate.demo.TransApi;import com.baidu.translate.demo.TranslateBean;import com.baidu.translate.demo.TranslateUtils;import com.baidu.translate.demo.TsBean;import com.google.gson.Gson;import com.google.gson.JsonElement;import com.google.gson.JsonObject;import com.google.gson.JsonParser;/*** 多国语言翻译* * @author x002* */public class Main {// 在平台申请的APP_ID 详见// http://api./api/trans/product/desktop?req=developerprivate static final String APP_ID = "0320000138156";private static final String SECURITY_KEY = "xyvN5BPetHKe5bbNLSrj";static final String FILE_ROOT_ZH = "C:\\Users\\x002\\Desktop\\langetranslation\\java\\src\\lang\\values-zh-rCN\\";static final String FILE_ROOT = "C:\\Users\\x002\\Desktop\\langetranslation\\java\\src\\lang\\";public static void main(String[] args) {TransApi api = new TransApi(APP_ID, SECURITY_KEY);List<String> sourceStrings=getLines(FILE_ROOT_ZH+"strings.xml");List<String> sourceArrarys=getLines(FILE_ROOT_ZH+"arrays.xml");List<TranslateBean> translatebeans = TranslateUtils.getList();for (TranslateBean translateBean : translatebeans) {List<String> sourceStringRelults=new ArrayList<>();//解析string类型for(String str:sourceStrings){if(isCanTs(str)){if(str.contains("<string")){String peiStart="<string\\s*name=\\\"[\\s\\S]*\\\">";peiStart=findString(peiStart,str);String peiMid="(?<=\\\">)([\\S\\s]*?)(?=</)";peiMid=findString(peiMid,str);if(peiMid==null||peiMid.length()<=0){sourceStringRelults.add(str);continue;}String relult = api.getTransResult(peiMid, "zh", translateBean.auto);String end="</string>";TsBean tsBean=getJsonTs(relult);sourceStringRelults.add(peiStart+tsBean.trans_result.get(0).dst+end);}else if(str.contains("<item")){String peiStart="<item>";String peiMid="(?<=>)([\\S\\s]*?)(?=</)";peiMid=findString(peiMid,str);if(peiMid==null||peiMid.length()<=0){sourceStringRelults.add(str);continue;}String relult = api.getTransResult(peiMid, "zh", translateBean.auto);String end="</item>";TsBean tsBean=getJsonTs(relult);sourceStringRelults.add(peiStart+tsBean.trans_result.get(0).dst+end);}}else{sourceStringRelults.add(str);}System.out.print("ts stringing\n");}System.out.print("save stringing\n");saveStringsToFile(FILE_ROOT+translateBean.resourceName+"\\strings.xml",sourceStringRelults);System.out.print("end save stringing\n");sourceStringRelults.clear();//解析array类型for(String str:sourceArrarys){if(isCanTs(str)){if(str.contains("<string")){String peiStart="<string\\s*name=\\\"[\\s\\S]*\\\">";peiStart=findString(peiStart,str);String peiMid="(?<=\\\">)([\\S\\s]*?)(?=</)";peiMid=findString(peiMid,str);if(peiMid==null||peiMid.length()<=0){sourceStringRelults.add(str);continue;}String relult = api.getTransResult(peiMid, "zh", translateBean.auto);String end="</string>";TsBean tsBean=getJsonTs(relult);sourceStringRelults.add(peiStart+tsBean.trans_result.get(0).dst+end);}else if(str.contains("<item")){String peiStart="<item>";String peiMid="(?<=>)([\\S\\s]*?)(?=</)";peiMid=findString(peiMid,str);if(peiMid==null||peiMid.length()<=0){sourceStringRelults.add(str);continue;}String relult = api.getTransResult(peiMid, "zh", translateBean.auto);String end="</item>";TsBean tsBean=getJsonTs(relult);sourceStringRelults.add(peiStart+tsBean.trans_result.get(0).dst+end);}}else{sourceStringRelults.add(str);}System.out.print("ts stringing\n");}System.out.print("save stringing\n");saveStringsToFile(FILE_ROOT+translateBean.resourceName+"\\arrays.xml",sourceStringRelults);System.out.print("end save stringing\n");sourceStringRelults.clear();}}public static TsBean getJsonTs(String str){return jsonStrToObject(str,TsBean.class);}public static <T> T jsonStrToObject(String jsonStr, Class<T> clazz){try{JsonElement je = new JsonParser().parse(jsonStr);T t = new Gson().fromJson(je, clazz);return t;}catch(Exception e){e.printStackTrace();return null;}}public static void saveStringsToFile(final String strFilename,List<String> sourceStringRelults){String strBuffer="";for(String str:sourceStringRelults){strBuffer+=str+"\n";}TextToFile(strFilename,strBuffer);}/** * 传入文件名以及字符串, 将字符串信息保存到文件中 * * @param strFilename * @param strBuffer */ public static void TextToFile(final String strFilename, final String strBuffer) { try {// 创建文件对象 File fileText = new File(strFilename); //C:\Users\x002\Desktop\langetranslation\java\src\lang\values-en\strings.xmlif(!fileText.getParentFile().exists()){ fileText.getParentFile().mkdirs();}if(fileText.exists())fileText.delete();if(!fileText.exists()){ fileText.createNewFile(); } // 向文件写入对象写入信息 FileWriter fileWriter = new FileWriter(fileText); // 写文件 fileWriter.write(strBuffer); // 关闭 fileWriter.close(); } catch (IOException e) { // e.printStackTrace(); } } public static String findString(String ppp,String body){Pattern p = pile(ppp);Matcher m = p.matcher(body);while (m.find()) {String json = m.group();if (json!=null&&json.length()>0) {return json;}}return null;}public static List<String> getLines(String path) {FileInputStream fis = null;InputStreamReader isr = null;BufferedReader br = null; // 用于包装InputStreamReader,提高处理性能。因为BufferedReader有缓冲的,而InputStreamReader没有。List<String> lines=new ArrayList<String>();try {String str = "";fis = new FileInputStream(path);// FileInputStream// 从文件系统中的某个文件中获取字节isr = new InputStreamReader(fis);// InputStreamReader 是字节流通向字符流的桥梁,br = new BufferedReader(isr);// 从字符输入流中读取文件中的内容,封装了一个newwhile ((str = br.readLine()) != null) {lines.add(str);}} catch (FileNotFoundException e) {System.out.println("找不到指定文件");} catch (IOException e) {System.out.println("读取文件失败");} finally {try {br.close();isr.close();fis.close();} catch (IOException e) {e.printStackTrace();}}return lines;}public static boolean isCanTs(String str){if(str.contains("resources>")||str.contains("<?xml")||str.contains("string-array")){return false;}return true;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。