aardio快速变量名翻译工具,再也不用频繁的复制粘贴了。

By 小强2233 at 2022-04-04 • 0人收藏 • 577人看过

很多英文能力比较差的初学者,每次给变量取名字都是需要打开翻译网站一个个的翻译单词,语多的话,需要多次ctrl+c/ctrl+v,非常的麻烦,下面分享一款个人写的小工具。

能够一键把中文翻译成英文,并且生成驼峰格式,支持的不仅仅是aardio ide,理论上支持所有软件界面上的文本编辑框。

大家可以自己扩展添加更多的功能。


1.gif



import win.ui;
import win.ui.atom;
import  win.ui.menu;
import win;
import key;
import winex;
import win.util.tray;
import win.clip.viewer;
import win.ui.tooltip;
import preg;
import inet.http;
/*DSG{{*/
mainForm = win.form(text = "aardio工程"; right = 959; bottom = 591)
mainForm.add()
    /*}}*/

var atom = mainForm.atom("D73AF3BB-1A17-4C68-8C9B-7B3428344854");
if (!atom) {
    /*为窗口设置原子值可以避免一个程序重复运行多个实例*/
    win.quitMessage();
    return;
}

hkid = mainForm.reghotkey(function (id, mod, vk) {
    win.delay(200);
    key.combine("CTRL", "C");
    //win.delay(100);
    var hwnd = win.getForeground();
    var hwnd2 = winex.getFocus();
    var pt = ::POINT();
    winex.attach(hwnd2, true);
    var ok, pt = ::User32.GetCaretPos(pt);
    var x, y = win.toScreen(hwnd2, pt.x, pt.y);
    winex.attach(hwnd2, false);
    var balloonTipCtrl = win.ui.tooltip.tracking(hwnd2)
    if (x && y) {
        balloonTipCtrl.setText("翻译中,请稍候...").trackPopup(true, x - 10, y + 20);
    } else {
        balloonTipCtrl.setText("翻译中,请稍候...").trackPopup(true);
    }
    var net = inet.http();
    var resultStr = net.get("https://translate.google.cn/m?sl=zh-CN&tl=en&hl=zh-CN&q="++inet.url.encode(string.trim(win.clip.read())));
    var regex = preg(`/<div class="result-container">(.*?)</div>/1`);
    var wordlist = string.split(regex.match(resultStr), " ");
    var tRes = "";
    for (k, v in wordlist) {
        if (k == 1) {
            tRes = string.lower(v)
            continue;
        }
        tRes += string.replace(v, v[[1]], string.upper(v[[1]]), 1);
    }

    if (#tRes >= 1) {
        win.clip.write(tRes);
        win.delay(200);
        key.combine("CTRL", "V");
    } else {
        balloonTipCtrl.setText("翻译失败,请检查网络或者接口!");
        win.delay(3000);
    }

    balloonTipCtrl.getCurrentTool().trackPopup(false);

}, 0x2 /*_MOD_CONTROL*/ | 0x1 /*_MOD_ALT*/ , 'Y'#);

mainForm.onMinimize = function (lParam) {
    mainForm.tray = win.util.tray(mainForm)
    mainForm.tray.tip = "鼠标提示" //设置鼠标提示
    mainForm.show(false); //hideWindow
    return true; //阻击默认消息传递,取消最小化过程
}


var isClose = false;

mainForm.onClose = function (lParam) {
    if (!isClose) {
        mainForm.tray = win.util.tray(mainForm)
        mainForm.tray.tip = "鼠标提示" //设置鼠标提示
        mainForm.show(false); //隐藏窗口
        return true; //阻击默认消息传递,取消关闭过程	
    }

}

mainForm.wndproc = {
    [0xACCF /*_WM_TRAYMESSAGE*/ ] = function (hwnd, message, wParam, lParam) {
        if (lParam = 0x205 /*_WM_RBUTTONUP*/ ) {
            var pt = ::POINT();::User32.GetCursorPos(pt);

            //弹出托盘菜单以前,一定要前置主窗口中,不然不点击菜单不会消失
            win.setForeground(mainForm.hwnd)
            mainForm.popmenu.popup(pt.x, pt.y, true)
        }
    }
}


mainForm.popmenu = win.ui.popmenu(mainForm); //创建弹出菜单
mainForm.popmenu.add('&open', function (id) {
    mainForm.show(true);
});
mainForm.popmenu.add(); //分隔线
mainForm.popmenu.add('&exit', function (id) {
    isClose = true;
    mainForm.close();
})

mainForm.show(true);
return win.loopMessage();



10 个回复 | 最后更新于 2022-04-11
2022-04-04   #1

挺不错,赞一个,(●—●)

2022-04-06   #2
import preg;

preg在哪下载?

image.png

2022-04-06   #3

@winnet1 代码格式化的问题,你改成一行就可以了image.png

2022-04-06   #4

回复#2 @winnet :

扩展库里有, 自己搜索安装下.

image.png

image.png


不用扩展库preg的话,直接string模式匹配也可以, 用下面的代码替换下

var resultStr = net.get("https://translate.google.cn/m?sl=zh-CN&tl=en&hl=zh-CN&q="++inet.url.encode(string.trim(win.clip.read())));
var strMatchResult = string.match( resultStr, `\<div class="result-container">(.*?)\<\/div\>` );
var wordlist = string.split(strMatchResult, " ");



2022-04-06   #5

回复#3 @小强2233 :

谢谢,搞好了

2022-04-06   #6

回复#4 @admin :

谢谢,搞好了

2022-04-06   #7

非常实用

2022-04-07   #8

改进了一下, 增加了个配置文件, 可以将以前翻译过的保存到ini文件中, 这样就算后面没网了也可以用, 有过记录的也不用每次去联网 ,当你代码翻译的多了, 基本上就不用联网了....

另外在ctrl+c之前清空下剪贴板, 这样当没框选文字和没选中文字的时候就提示没选中文字.

import win.ui;
import win.ui.atom;
import win.ui.menu;
import win;
import key;
import winex;
import win.util.tray; 
import win.clip.viewer;
import win.ui.tooltip;
import preg;
import inet.http;
import fsys.ini;
/*DSG{{*/
mainForm = win.form(text = "aardio工程"; right = 959; bottom = 591)
mainForm.add()
    /*}}*/
 
var atom = mainForm.atom("D73AF3BB-1A17-4C68-8C9B-7B3428344854");
if (!atom) {
    /*为窗口设置原子值可以避免一个程序重复运行多个实例*/
    win.quitMessage();
    return;
}

var WordINI = fsys.ini(io.appData("\WordTransLateLIst\wordList.ini")); 
 
hkid = mainForm.reghotkey(function (id, mod, vk) {
	win.clip.write("");//重写并清空
    win.delay(200);
    key.combine("CTRL", "C");
    
    //win.delay(100);
    var hwnd = win.getForeground();
    var hwnd2 = winex.getFocus();
    var pt = ::POINT();
    winex.attach(hwnd2, true);
    var ok, pt = ::User32.GetCaretPos(pt);
    var x, y = win.toScreen(hwnd2, pt.x, pt.y);
    winex.attach(hwnd2, false);
    var balloonTipCtrl = win.ui.tooltip.tracking(hwnd2)
    
    var PreTransWord = win.clip.read();
    if(PreTransWord!=null and PreTransWord!=''){//剪贴板复制到了文字
    	var tRes =  WordINI.read("wordList",PreTransWord);
    	if( tRes == null ){
    	    if (x && y) {
        		balloonTipCtrl.setText("翻译中,请稍候...").trackPopup(true, x - 10, y + 20);
    		} else {
        		balloonTipCtrl.setText("翻译中,请稍候...").trackPopup(true);
    		}
        	try{
        		var net = inet.http();
    			var resultStr = net.get("https://translate.google.cn/m?sl=zh-CN&tl=en&hl=zh-CN&q="++inet.url.encode(string.trim(PreTransWord)));
    			var regex = preg(`/<div class="result-container">(.*?)</div>/1`);
    			var wordlist = string.split(regex.match(resultStr), " ");
    			tRes = "";
    			for (k, v in wordlist) {
        			if (k == 1) {
            			tRes = string.lower(v)
            			continue;
        			}
        			tRes += string.replace(v, v[[1]], string.upper(v[[1]]), 1);
    			}
        	}
    	}
    	
    	if (#tRes >= 1) {
        	WordINI.write("wordList",PreTransWord,tRes);
        	win.clip.write(tRes);
        	win.delay(200);
        	key.combine("CTRL", "V");
    	} else {
        	balloonTipCtrl.setText("翻译失败,请检查网络或者接口!");
        	win.delay(2000);
    	}
    }else {
    	balloonTipCtrl.setText("未选中任何文字!").trackPopup(true);
    	win.delay(2000);
    }
    balloonTipCtrl.close();
}, 0x2 /*_MOD_CONTROL*/ | 0x1 /*_MOD_ALT*/ , 'Y'#);
 
mainForm.onMinimize = function (lParam) {
    mainForm.tray = win.util.tray(mainForm)
    mainForm.tray.tip = "鼠标提示" //设置鼠标提示
    mainForm.show(false); //hideWindow
    return true; //阻击默认消息传递,取消最小化过程
}
 
var isClose = false;
 
mainForm.onClose = function (lParam) {
    if (!isClose) {
        mainForm.tray = win.util.tray(mainForm)
        mainForm.tray.tip = "鼠标提示" //设置鼠标提示
        mainForm.show(false); //隐藏窗口
        return true; //阻击默认消息传递,取消关闭过程    
    }
 
}
 
mainForm.wndproc = {
    [0xACCF /*_WM_TRAYMESSAGE*/ ] = function (hwnd, message, wParam, lParam) {
        if (lParam = 0x205 /*_WM_RBUTTONUP*/ ) {
            var pt = ::POINT();::User32.GetCursorPos(pt);
 
            //弹出托盘菜单以前,一定要前置主窗口中,不然不点击菜单不会消失
            win.setForeground(mainForm.hwnd)
            mainForm.popmenu.popup(pt.x, pt.y, true)
        }
    }
}
 
 
mainForm.popmenu = win.ui.popmenu(mainForm); //创建弹出菜单
mainForm.popmenu.add('&open', function (id) {
    mainForm.show(true);
});
mainForm.popmenu.add(); //分隔线
mainForm.popmenu.add('&exit', function (id) {
    isClose = true;
    mainForm.close();
})
 
mainForm.show(true);
return win.loopMessage();


2022-04-08   #9

看见图一我就在想,三个词需要操作替换三次耗费三秒,如果是全选一次替换会不会效率高点呢

2022-04-11   #10

最近一直想翻译一下一个perl脚本里面的英文提示,你的翻译工具正好可以用上,多谢大佬的翻译软件!

登录后方可回帖

登 录
信息栏
公告:
私人站, 专注分享, 可在分享中适当提问, 但谢绝纯提问, 否则不再提醒一律删帖, 谢谢合作!



本站域名:HtmLayout.Cn
aardio可以快速开发上位机,本站主要记录了学习过程中遇到的问题和解决办法及aardio代码分享

这里主要专注于aardio学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.

Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
本 站 主 站:Stm32cube中文网
Sciter中文在线文档Sciter在线学习文档
空间赞助:才仁机械
Loading...