Android、iOS快速全球化工具

news/2024/10/23 7:28:31/

动机

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

完成


http://www.ppmy.cn/news/752194.html

相关文章

商业海外社交媒体营销10步指南 [2023]

如今,社交媒体是任何成功商业战略的重要组成部分。这不是奢侈品,而是必需品。全球有超过 36 亿人使用社交媒体,它是企业展示其产品和服务、建立品牌知名度以及与客户联系的数字游乐场。 但这不仅仅是娱乐和游戏。要在社交媒体上取得成功&…

【C++ OJ练习】1.求和

1.题目链接 求123...n_牛客题霸_牛客网 2.解题思路 利用C构造函数的特性 既然不能使用循环 那么我们可以定义n个对象 就会调用n次构造函数 去代替循环 每次调用的时候进行加法的计算 3.代码 class Sum { public:Sum(){_sum _i;_i;}static void Init(){_i 1;_sum 0;}st…

MongoDB【Springboot访问MongoDB、MongoDB安全认证、MongoDB内置角色 】(五)-全面详解(学习总结---从入门到深化)

目录 Springboot访问MongoDB MongoDB安全认证 MongoDB内置角色 Springboot访问MongoDB MongoTemplate方式 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>…

详解 inner join with another 'dataframe' df1.join(df2, $df1Key === $df2Key)

ex&#xff1a;df.join(ds,df("name")ds("name") and df("age")ds("age"),"outer").show();其中&#xff1a;(1)“ds”是关联的dataframe;(2)"df("name")ds("name") and df("age")ds(&q…

按一定条件筛选df1,返回结果中df1的索引取df2的数据

每日一题&#xff1a; df1,df2已知&#xff0c;按一定条件筛选df1&#xff0c;返回结果中df1的索引取df2的数据&#xff1f; df1 pd.DataFrame(np.random.random(50).reshape(25,2)) df2 pd.DataFrame(np.random.randint(100,size50).reshape(25,2)) 解决&#xff1a; df2…

2个dataframe,df1的每一列分别乘以df2的某一列

Notes:df1的每一列分别乘以df2的某一列&#xff0c;得一列一列如&#xff1a;df1.loc[:,0]*df2.loc[:,1 ] # df1 *df2.loc[:,1 ]&#xff0c;会导致df1每一列的全部值&#xff0c;乘以df2某一列里按顺序的单一数字for temp_port in col_list_port: # 股票成本df_port_stock_cos…

创建df的副本df2,其中df2为除了df最后一列之外的所有列;

可以使用 df.iloc[:, :-1] 来获取除了df的最后一列之外的所有列,然后将其赋值给新的变量df2即可创建df的副本df2。 例如: import pandas as pd# 创建一个示例数据 df = pd.DataFrame({col1: [1, 2, 3], col2: [4, 5, 6], col3: [7, 8, 9]})# 创建df的副本df2 df2 = df.iloc[:…

python在循环中创建dataframe(如df1、df2……)

需要循环读取文件夹中的csv&#xff0c;创建dataframe 使用exec函数 rootPath"" excelNames os.listdir(rootPath) for i in range(len(excelNames)):csvpathrootPath"\\"excelNames[i] exec(df{0} pd.read_csv(csvpath).format(i))