diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..835ffd2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.vscode +.log diff --git a/README.md b/README.md index 362d1a6..53609b2 100644 --- a/README.md +++ b/README.md @@ -6,63 +6,117 @@ YoudaoTranslate | 有道翻译 ## 一、 特性 -### 1. 中英文互翻 +### 1. 中英文互翻自动判断 -### 2. 按住`cmd` +`回车` 即可发音,这样不会关闭窗口。在音标上直接回车也可以播放发音并会关闭窗口。 +### 2. Hotkey 常用 + +- 快捷键双击 `⌥` (可以在 Hotkey 中修改)可以翻译选中内容 + +- 按 `⌃` + `space` 可以直接唤出翻译输入框,方便直接手动输入 + +### 3. 按住 `⌘`+`↩︎` 即可发音 (使用系统自带的 say),这样不会关闭窗口。在音标上直接回车也可以播放发音并会关闭窗口。 + +按住 `⌥`+`↩︎` 也能发音,调用有道语音 api,速度会慢一点;两者口音不一样。 ![screenshot_3](screenshot/screenshot_3.png) -### 3. 输入 `yd *` 可以查询最近的查询记录 +### 4. 在选项上`↩︎`回车可以复制翻译结果 + +### 5. 输入 `yd *` 可以查询最近的查询记录 ![transalte_history](screenshot/translate_history.gif) -### 4. 在选项上回车可以复制翻译结果 -### 5. 翻译结果上按 `Shift` 可以直接预览有道网页 +### 6. 翻译结果上按 `⇧(Shift)` 可以直接预览有道网页 ![screenshot_4](screenshot/screenshot_4.gif) -### 6. 双击 `option` 键可以翻译选中内容 + ## 二、下载使用 -1. [Github 直接下载](https://github.com/wensonsmith/YoudaoTranslate/raw/master/YoudaoTranslate.alfredworkflow) -1. [百度网盘下载-YoudaoTransalte.alfredworkflow](https://pan.baidu.com/s/1gfu6mkj) +1. [GitHub Releases 直接下载](https://github.com/wensonsmith/YoudaoTranslate/releases) + + 下载解压后双击 `Youdao Translate.alfredworkflow` 导入即可使用。 + +1. 把 GitHub 项目中 src 目录内容下载到 `~/Library/Application Support/Alfred 3/Alfred.alfredpreferences/workflows` 目录 + 可用的一键脚本: + + ```bash + workflows="${HOME}/Library/Application Support/Alfred 3/Alfred.alfredpreferences/workflows/" + mkdir -p "${workflows}/YoudaoTranslate" + curl https://codeload.github.com/wensonsmith/YoudaoTranslate/tar.gz/master | \ + tar -xz \ + -C "${workflows}/YoudaoTranslate" \ + --strip=2 YoudaoTranslate-master/src + + ``` + + -下载后双击导入即可使用。 ## 三、推荐设置 -![](screenshot/suggestion_1.png) +Hotkey 设置为 `Double ⌥` -![](https://user-images.githubusercontent.com/2544185/32979442-4b17a476-cc90-11e7-934a-64b6d84b46df.png) -![](screenshot/suggestion.png) -## 四、 配置KEYS +## 四、 配置有道翻译 API KEYS > 2017年9月3日更新 > 由于有道翻译 api 迁移到了有道智云,所以大家需要去[有道智云](http://ai.youdao.com/)进行注册然后创建应用了。步骤如下: -1. 注册有道智云帐号 -2. 创建一个自然语言翻译服务 -3. 创建一个应用并绑定第二步创建的服务 +1. 注册[有道智云](https://ai.youdao.com/)帐号 + +2. 创建一个[自然语言翻译服务](https://ai.youdao.com/fanyi-services.s) + +3. 创建一个[有道云应用](https://ai.youdao.com/appmgr.s)并绑定第二步创建的服务 + 4. 这样就可以获得应用(appKey)和密钥(secret)了 -![screenshot_5](screenshot/screenshot_5.png) + [应用](https://ai.youdao.com/appmgr.s) - 应用详情 - 应用ID appKey, 应用密钥 secret + +5. 把变量填入 workflow 右上角的 [X] 点开后的配置框中 + + +![var-config-step-1](screenshot/var-config-step-1.png) + +![var-config-step-2](screenshot/var-config-step-2.png) -![screenshot_6](screenshot/screenshot_6.png) ## 五、更新日志 +- 2019年11月12日 + + - 修复有道 Api 更新造成的没有单词字典详细释义的问题 + - 更新 Readme (修复文案按键、增加下载命令) + +- 2019年8月27日 + + - 增加发音快捷键 (`⌥`)、优化单词复制过滤正则 (如 ~【数】【动】等) + +- 2019年8月23日 + + - 使用 [alfred 自带 variables](https://www.alfredapp.com/help/workflows/advanced/variables/) 功能配置有道 API Keys + +- 2019年8月22日 + + - 修复中译英时,每项选中 Enter 时直接复制内容为对应不同项翻译,而非固定第一项翻译 + +- 英译中时,固定第一项 选中内容 为英语原文,cmd + Enter 可以直接发音 + - 2017年11月19日 - - 优化发音,现在可以按住 `cmd` + `回车` 进行发音 (#17) - - 增加最近查询记录功能, 输入 `yd *` 可以列出最近查询的 9 个单词 (#10, #16) - + + - 优化发音,现在可以按住 `⌘`+`↩︎` 进行发音 (#17) + +- 增加最近查询记录功能, 输入 `yd *` 可以列出最近查询的 9 个单词 (#10, #16) + - 2017年9月3日 + - 更新 api 为有道智云(thanks @newle)#12 - 优化发音,添加了线上发音 - 添加了双击翻译选中文字的热键 + - 2017年1月13日 - 更新到Alfred3 @@ -76,4 +130,5 @@ YoudaoTranslate | 有道翻译 ### 六、 使用库和参考资料 - https://github.com/joetannenbaum/alfred-workflow -- https://www.alfredapp.com/help/workflows/inputs/ \ No newline at end of file +- https://www.alfredapp.com/help/workflows/inputs/ +- https://www.alfredapp.com/help/workflows/advanced/variables/ \ No newline at end of file diff --git a/YoudaoTranslate.alfredworkflow b/YoudaoTranslate.alfredworkflow deleted file mode 100644 index 65d78c0..0000000 Binary files a/YoudaoTranslate.alfredworkflow and /dev/null differ diff --git a/screenshot/screenshot_1.png b/screenshot/screenshot_1.png index e368f95..8a32215 100644 Binary files a/screenshot/screenshot_1.png and b/screenshot/screenshot_1.png differ diff --git a/screenshot/screenshot_3.png b/screenshot/screenshot_3.png index 3a8d46a..dc1c5d5 100644 Binary files a/screenshot/screenshot_3.png and b/screenshot/screenshot_3.png differ diff --git a/screenshot/screenshot_5.png b/screenshot/screenshot_5.png deleted file mode 100644 index 133f8c3..0000000 Binary files a/screenshot/screenshot_5.png and /dev/null differ diff --git a/screenshot/screenshot_6.png b/screenshot/screenshot_6.png deleted file mode 100644 index cdb51a4..0000000 Binary files a/screenshot/screenshot_6.png and /dev/null differ diff --git a/screenshot/screenshot_7.png b/screenshot/screenshot_7.png deleted file mode 100644 index 931ffd5..0000000 Binary files a/screenshot/screenshot_7.png and /dev/null differ diff --git a/screenshot/suggestion.png b/screenshot/suggestion.png deleted file mode 100644 index 60b68fd..0000000 Binary files a/screenshot/suggestion.png and /dev/null differ diff --git a/screenshot/suggestion_1.png b/screenshot/suggestion_1.png deleted file mode 100644 index dd456cf..0000000 Binary files a/screenshot/suggestion_1.png and /dev/null differ diff --git a/screenshot/var-config-step-1.png b/screenshot/var-config-step-1.png new file mode 100644 index 0000000..673f733 Binary files /dev/null and b/screenshot/var-config-step-1.png differ diff --git a/screenshot/var-config-step-2.png b/screenshot/var-config-step-2.png new file mode 100644 index 0000000..b63f011 Binary files /dev/null and b/screenshot/var-config-step-2.png differ diff --git a/src/YoudaoTranslate.php b/src/YoudaoTranslate.php index 3c4b109..596550b 100644 --- a/src/YoudaoTranslate.php +++ b/src/YoudaoTranslate.php @@ -19,7 +19,6 @@ class YoudaoTranslate { - private $workflow; private $keys; private $result; @@ -124,6 +123,7 @@ private function parseWeb($web) *function:检测字符串是否由纯英文,纯中文,中英文混合组成 *param string *return 1:纯英文;2:纯中文;3:中英文混合 + *return true: 有中文; false: 无中文 */ private function isChinese($str){ $m=mb_strlen($str,'utf-8'); @@ -291,16 +291,29 @@ private function startsWith($haystack, $needle) /** * 组装网易智云请求地址 * @return String + * + * https://ai.youdao.com/DOCSIRMA/html/自然语言翻译/API文档/文本翻译服务/文本翻译服务-API文档.html */ private function getOpenQueryUrl($query) { - $api = 'https://openapi.youdao.com/api?from=auto&to=auto&'; + + $api = 'https://openapi.youdao.com/api?'; $key = $this->keys[array_rand($this->keys)]; $key['q'] = $query; $key['salt'] = strval(rand(1,100000)); $key['sign'] = md5($key['appKey'] . $key['q'] . $key['salt'] . $key['secret']); + // 有道新版 api 只有当 from 和 to 的值都在{zh-CHS, en}范围内时, + // 才有单词字典翻译信息,当两个都是 auto 时则没有 + if($this->isChinese($query)){ + $key['from'] = 'auto'; + $key['to'] = 'en'; + } else { + $key['from'] = 'auto'; + $key['to'] = 'zh-CHS'; + } + return $api.http_build_query($key); } } diff --git a/src/info.plist b/src/info.plist index 41be10b..e9e1315 100644 --- a/src/info.plist +++ b/src/info.plist @@ -34,6 +34,19 @@ + 6A149B78-1825-48B9-AC94-D83D8ADD9993 + + + destinationuid + 284F6AAD-8FE7-44A6-AAE4-62A0F8BEE779 + modifiers + 0 + modifiersubtext + + vitoclose + + + 8FE8475E-6310-49A4-967E-D6CCE73A86AC @@ -46,6 +59,16 @@ vitoclose + + destinationuid + 487D7A3C-11A7-416D-8F0F-21097B979E4C + modifiers + 0 + modifiersubtext + + vitoclose + + destinationuid 6B0F6A32-751F-4071-A1E8-76A2E9486962 @@ -58,7 +81,20 @@ destinationuid - 487D7A3C-11A7-416D-8F0F-21097B979E4C + 6A149B78-1825-48B9-AC94-D83D8ADD9993 + modifiers + 524288 + modifiersubtext + 🔊 {query} + vitoclose + + + + 971BFFF5-E28E-41F4-B45A-A8216C2D230B + + + destinationuid + 8FE8475E-6310-49A4-967E-D6CCE73A86AC modifiers 0 modifiersubtext @@ -68,6 +104,19 @@ A78568B3-C360-4A35-A46A-0D91172F86EF + + + destinationuid + B77D07EE-D8A8-4AF9-BC2F-5D8AC99DB4EF + modifiers + 0 + modifiersubtext + + vitoclose + + + + B77D07EE-D8A8-4AF9-BC2F-5D8AC99DB4EF destinationuid @@ -80,6 +129,19 @@ + CAF59F43-6C28-47BF-B3DA-1A65C2198F2F + + + destinationuid + 34050778-5F09-4E68-A7AB-A3A4F7C58529 + modifiers + 0 + modifiersubtext + + vitoclose + + + D7047D97-8226-43FB-8656-4CF365DB3FE3 @@ -121,6 +183,23 @@ version 2 + + config + + matchmode + 1 + matchstring + ^\[.*?\] * + replacestring + + + type + alfred.workflow.utility.replace + uid + B77D07EE-D8A8-4AF9-BC2F-5D8AC99DB4EF + version + 1 + config @@ -141,31 +220,12 @@ 1 - config - - concurrently - - escaping - 102 - script - query="{query}" - -echo $query - -echo -n $query | say $1 -v Samantha - scriptargtype - 0 - scriptfile - - type - 0 - type - alfred.workflow.action.script + alfred.workflow.utility.hidealfred uid - 6B0F6A32-751F-4071-A1E8-76A2E9486962 + 34050778-5F09-4E68-A7AB-A3A4F7C58529 version - 2 + 1 config @@ -173,11 +233,17 @@ echo -n $query | say $1 -v Samantha action 0 argument - 1 + 0 focusedappvariable focusedappvariablename + hotkey + 49 + hotmod + 262144 + hotstring + Space leftcursor modsmode @@ -192,11 +258,78 @@ echo -n $query | say $1 -v Samantha version 2 + + config + + inputstring + {query} + matchcasesensitive + + matchmode + 2 + matchstring + ^~ + + type + alfred.workflow.utility.filter + uid + 487D7A3C-11A7-416D-8F0F-21097B979E4C + version + 1 + + + config + + matchmode + 1 + matchstring + ^~ + replacestring + + + type + alfred.workflow.utility.replace + uid + 1631393E-5B53-4C8B-AF64-A04B687438DF + version + 1 + + + config + + concurrently + + escaping + 102 + script + query="$1" + +echo "$query" + +echo -n "$query" | say $1 -v Samantha + scriptargtype + 1 + scriptfile + + type + 0 + + type + alfred.workflow.action.script + uid + 6B0F6A32-751F-4071-A1E8-76A2E9486962 + version + 2 + config alfredfiltersresults + alfredfiltersresultsmatchmode + 0 + argumenttrimmode + 0 argumenttype 0 escaping @@ -219,8 +352,7 @@ echo -n $query | say $1 -v Samantha require('YoudaoTranslate.php'); $keys = [ - ['appKey' => '043006a9363d8f0c', 'secret' => 'xKbfHSuE65fJE71jDmAzLtY1WwWbGysd'], - ['appKey' => '2280cdb033304a40', 'secret' => '9WmJZbNe9JaYJl8dzzaZbmcYdsf6VJ7c'] + ['appKey' => getenv('youdao_appkey'), 'secret' => getenv('youdao_secret')] ]; $translator = new YoudaoTranslate($keys); @@ -250,38 +382,33 @@ echo $translator->translate($argv[1]); config - inputstring - {query} - matchcasesensitive - - matchmode - 2 - matchstring - ^~ - - type - alfred.workflow.utility.filter - uid - 487D7A3C-11A7-416D-8F0F-21097B979E4C - version - 1 - - - config - - matchmode + action 0 - matchstring - ~ - replacestring + argument + 1 + focusedappvariable + + focusedappvariablename + hotkey + -1 + hotmod + 524288 + hotstring + double tap + leftcursor + + modsmode + 0 + relatedAppsMode + 0 type - alfred.workflow.utility.replace + alfred.workflow.trigger.hotkey uid - 1631393E-5B53-4C8B-AF64-A04B687438DF + 971BFFF5-E28E-41F4-B45A-A8216C2D230B version - 1 + 2 config @@ -292,11 +419,18 @@ echo $translator->translate($argv[1]); 102 script cd $TMPDIR -curl -o {query} "https://dict.youdao.com/dictvoice?audio={query}&type=1" -afplay {query} -rm {query} +query="$1" +voice="youdao-${query}.mp3" + +echo say: "$voice" >&2 + +if [[ ! -e ${voice} ]]; then + curl -SL#o "$voice" -# -d "audio=${query}" -d "type=1" "https://dict.youdao.com/dictvoice" +fi + +afplay "$voice" scriptargtype - 0 + 1 scriptfile type @@ -309,17 +443,54 @@ rm {query} version 2 + + config + + matchmode + 0 + matchstring + ~ + replacestring + + + type + alfred.workflow.utility.replace + uid + 6A149B78-1825-48B9-AC94-D83D8ADD9993 + version + 1 + readme - + # 配置有道 KEYS + +> 2017年9月3日更新 由于有道翻译 api 迁移到了有道智云,所以大家需要去有道智云进行注册然后创建应用了。步骤如下 + +1.注册有道智云帐号 + + https://ai.youdao.com/ + +2. 创建一个自然语言翻译服务 + + https://ai.youdao.com/fanyi-services.s + +3. 创建一个应用并绑定第二步创建的服务 + + https://ai.youdao.com/appmgr.s + +4. 这样就可以获得应用(appKey)和密钥(secret)了 + + 应用详情 - 应用ID appKey, 应用密钥 secret + +5. 把变量填入 workflow 右上角的 [X] 点开后的配置框中 uidata 1631393E-5B53-4C8B-AF64-A04B687438DF xpos - 640 + 780 ypos - 270 + 120 284F6AAD-8FE7-44A6-AAE4-62A0F8BEE779 @@ -328,16 +499,30 @@ rm {query} note 在线发音 xpos - 740 + 900 + ypos + 340 + + 34050778-5F09-4E68-A7AB-A3A4F7C58529 + + xpos + 1050 ypos - 350 + 40 487D7A3C-11A7-416D-8F0F-21097B979E4C xpos - 530 + 660 + ypos + 120 + + 6A149B78-1825-48B9-AC94-D83D8ADD9993 + + xpos + 660 ypos - 270 + 370 6B0F6A32-751F-4071-A1E8-76A2E9486962 @@ -346,7 +531,7 @@ rm {query} note 本地发音 xpos - 740 + 900 ypos 170 @@ -357,28 +542,56 @@ rm {query} ypos 170 + 971BFFF5-E28E-41F4-B45A-A8216C2D230B + + xpos + 130 + ypos + 250 + A78568B3-C360-4A35-A46A-0D91172F86EF xpos - 540 + 660 ypos - 70 + 40 - CAF59F43-6C28-47BF-B3DA-1A65C2198F2F + B77D07EE-D8A8-4AF9-BC2F-5D8AC99DB4EF xpos - 740 + 780 ypos 40 + CAF59F43-6C28-47BF-B3DA-1A65C2198F2F + + xpos + 900 + ypos + 10 + D7047D97-8226-43FB-8656-4CF365DB3FE3 xpos 130 ypos - 170 + 90 + variables + + youdao_appkey + + youdao_secret + + + variablesdontexport + + youdao_appkey + youdao_secret + + version + webaddress https://seekbetter.me