杂谈 #Java脚本
因本人英语不好在使用Obsidian时,一些插件的设置英文多令人头痛。故有写一个的翻译插件介绍和设置脚本的想法。看到有些前人写的一下翻译方法,简直惨目忍睹。竟然要手动。这个应该写好到只需要一键就可以汉化的地步吗?
好吧。我承认这有些难度。翻译引擎就用有道的吧。我觉得它对专业名词的翻译准确度还是很高的。
提取main.js中需要的词句使用有道API来翻译并生成对应的文件使用Quicker的插件一键替换
这里不想详细写过程了,直接贴代码吧。以后有空再整合。
main.js处理代码:(用了FastJson里面的工具,需要导入)
import com.alibaba.fastjson.JSON;
import java.io.*;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author ShuangLian
* @date 2022/7/4 1:07
*/
public class test {
public static void main(String[] args) throws IOException {
// 需要翻译的插件对应的main.js文件
File file = new File("C:\Users\91324\Documents\Projects\IdeaProjects\Test-demo\src\test\java\cn\lian\main.js");
System.out.println(file.getAbsolutePath());
FileInputStream stream = new FileInputStream(file);
InputStreamReader reader = new InputStreamReader(stream);
BufferedReader bufferedReader = new BufferedReader(reader);
LinkedList list = new LinkedList();
String line;
while ((line = bufferedReader.readLine()) != null) {
// 匹配要翻译的部分
String s_setName = "setName\([^\)]+\)";
String s_addOption = "addOption\([^\)]+\)";
String s_setDesc = "setDesc\([^\)]+\)*"\)";
String s_name = "name: ".*",";
// 使用正则查找匹配
List linkedList;
if ((linkedList = find(s_setName, line)).size() != 0) {
for (String s : linkedList) {
list.add(s.substring(9, s.length() - 2));
}
}
if ((linkedList = find(s_setDesc, line)).size() != 0) {
for (String s : linkedList) {
list.add(s.substring(9, s.length() - 2));
}
}
if ((linkedList = find(s_addOption, line)).size() != 0) {
for (String ss : linkedList) {
String substring = ss.substring(10, ss.length() - 1);
String[] split = substring.split(",");
for (String s : split) {
s = s.strip();
list.add(s.substring(1, s.length() - 1));
}
}
}
if ((linkedList = find(s_name, line)).size() != 0) {
for (String s : linkedList) {
list.add(s.substring(7, s.length() - 2));
}
}
}
System.out.println(list);
bufferedReader.close();
// 输出汉英对照.txt
File file1 = new File(".\test2.txt");
FileOutputStream fileOutputStream = new FileOutputStream(file1);
// 指定输出文件编码为gbk,不知道为啥做替换插件的那个2b不使用UTF-8
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "gbk");
// OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);
BufferedWriter writer = new BufferedWriter(outputStreamWriter);
for (String s : list) {
writer.append(s).append("n");
String query = FanyiV3Demo.query(s);
String translation = JSON.parseObject(query).getJSONArray("translation").get(0).toString();
writer.append(translation).append("n");
}
writer.flush();
}
public static List find(String regex, String str) {
List strings = new LinkedList();
Pattern p = Pattern.compile(regex);
Matcher matcher = p.matcher(str);
while (matcher.find()) {
String fundStr = str.substring(matcher.start(), matcher.end());
System.out.println(fundStr);
strings.add(fundStr);
}
return strings;
}
}
有道翻译Java SDK改装
还有一个问题:
Quicker插件只是替换功能,有可能会替换到正文的单词。这里应该是需要再使用正则匹配一遍。干脆改成只用java来处理吧。
© 版权声明
本站下载的源码均来自公开网络收集转发二次开发而来,
若侵犯了您的合法权益,请来信通知我们1413333033@qq.com,
我们会及时删除,给您带来的不便,我们深表歉意。
下载用户仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,访问及下载者下载默认同意本站声明的免责申明,请合理使用切勿商用。
THE END
暂无评论内容