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