动机
在进行移动端全球化的时候,我们需要根据语言类型准备格式相同,文本不同的好多个文件,如果一个一个翻译显然很浪费时间,如果整篇复制到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");
}
// 替换原始字符串中的b
String 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 "";
}
}