动机
在进行移动端全球化的时候,我们需要根据语言类型准备格式相同,文本不同的好多个文件,如果一个一个翻译显然很浪费时间,如果整篇复制到Google翻译通常翻译出来的文本是没办法直接用的,所以我通过有道云API实现了一个翻译iOS全球化文件的工具类。Android可以重写文本匹配的部分。
使用方法
直接修改两个文件的路径就可以了。需要注意有道云的API据说一分钟限制请求1000次,超了的话等明天应该就可以用了。
package test;import okhttp3.*;
import org.json.JSONArray;
import org.json.JSONObject;import java.io.*;/*** 全球化快速翻译工具*/
public class test {public static void main(String[] args) {String inputFile = "/Users/topjoy/git/GoogleDemo/ZeusServer/src/main/java/test/FCLocalizable.strings";String outputFile = "/Users/topjoy/git/GoogleDemo/ZeusServer/src/main/java/test/FCLocalizable2.strings";try {// 打开输入文件BufferedReader reader = new BufferedReader(new FileReader(inputFile));// 创建输出文件BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile));// 逐行读取输入文件内容String line;while ((line = reader.readLine()) != null) {// TODO 根据IOS或Android,重写这里的匹配代码,这里为iOS示例String[] parts = line.split("=");if(!line.contains("=")){// 写入新的行到输出文件writer.write(line);writer.newLine();continue;}String b = parts[1].trim().replace("\"", "").replace(";", "");// 使用翻译方法生成新的字符串String finalLine = line;String translatedStr = translateString(b);if (finalLine.contains("%")){System.out.printf("此字符串存在特殊符号\n");}else{System.out.printf(b + " --> " + translatedStr + "\n");}// 替换原始字符串中的bString newLine = finalLine.replace(b, translatedStr.isEmpty() ? b : translatedStr);// 写入新的行到输出文件writer.write(newLine);writer.newLine();}// 关闭文件reader.close();writer.close();System.out.println("替换完成并生成备份文件。");} catch (IOException e) {e.printStackTrace();}}/*** 文本翻译方法* 示例为有道云翻译API,使用时根据自己的API进行修改* @param inputStr 待翻译文本* @return 翻译文本* @throws IOException IO异常*/public static String translateString(String inputStr) throws IOException {// 根据具体需求实现你的翻译逻辑String url = "http://fanyi.youdao.com/translate"+"?&doctype=json&type=EN2ZH-CHT&i="+inputStr;OkHttpClient client = new OkHttpClient();// 翻译服务不需要加密Request request = null;Request.Builder builder = new Request.Builder().url(url)
// .addHeader("Signature", getSignature(date, target, inputStr))
// .addHeader("Date", date)
// .addHeader("timestamp", date).get();request = builder.build();Response response = client.newCall(request).execute();String resp = "";ResponseBody responseBody = response.body();if (responseBody != null && response.isSuccessful() && !responseBody.toString().isEmpty())resp = responseBody.string();System.out.printf(resp+"\n");JSONObject jsonObject = new JSONObject(resp);JSONArray array = jsonObject.optJSONArray("translateResult");if (array == null){return "";}JSONArray array1 = array.optJSONArray(0);if (array1 == null){return "";}JSONObject jsonObject1 = array1.optJSONObject(0);if (jsonObject1 == null){return "";}String tgt = jsonObject1.optString("tgt");if (!tgt.isEmpty()){return tgt;}return "";}
}