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

By 小强2233 at 2022-04-04 • 1人收藏 • 1649人看过

很多英文能力比较差的初学者,每次给变量取名字都是需要打开翻译网站一个个的翻译单词,语多的话,需要多次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脚本里面的英文提示,你的翻译工具正好可以用上,多谢大佬的翻译软件!

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...