Android、iOS快速全球化工具

动机

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

完成

posted @ 2023-07-04 16:36  两小无猜  阅读(70)  评论(0编辑  收藏  举报