使用影子输入法较长的时间,主要是它透明度高,可编辑。前两天看到一个XX输入法,输入时候可以显示对应的英文单词,于是想通过影子输入法来实现它。
代码是AI写的,实现如下功能:
- 输入中文显示对应英文
- 输入字符播报
- 剪贴板文字翻译(中英均可)
- 翻译直接替换输入
以下相关文档也是AI写的。
影子输入法扩展功能说明
本项目在原版影子输入法(Yzime)基础上新增了一组扩展功能,核心实现位于 Yzime\Lib\YzExtend.ahk,相关设置集中在设置界面的 “扩展” 标签页。
运行环境要求:AutoHotkey v1(推荐 v1.1,32/64 位均可)。部分功能需要联网。
一、候选显示英文
开关:设置 → 扩展 → 勾选“候选显示英文”(即时生效)
- 输入编码后,候选窗中每个字/词后面会附带对应的英文单词,方便快速查看。
- 英文释义首次联网获取后会存入本地词库表(
extend.e2c),同一词下次即时显示,无需再联网。 - 选择英文:在候选状态下按
Shift + 数字键(如Shift+1选择第一个候选词的英文,Shift+0对应第 10 个),选中的英文文本将直接上屏。- 注意:开启本功能后,候选状态下的
Shift+数字被占用为“选择英文”,此时不再上屏!@#等符号;符号请在非候选状态下输入。 - 若该候选词的英文释义尚未获取到(首次出现、还在联网查询中),按
Shift+数字无效果。
- 注意:开启本功能后,候选状态下的
二、选词发音
开关:设置 → 扩展 → 勾选“选词发音”
- 选择字/词上屏后,自动朗读该词。
- 采用“先上屏、后发音”的异步设计:发音不阻塞输入,连续快速选词时只朗读最后一次。
- 相关设置项:
- 发音语言:
中文/英文——朗读候选附带的英文,还是朗读中文词本身。选“英文”时,若该词的英文释义尚未缓存(首次遇到),本次不发音。 - 发音语速:
-2 ~ 10,对应 SAPI 语音合成速率。 - 发音保存到本地:勾选后,合成的语音会缓存为 WAV 文件(存于
Yzime\Data\TTS\),同一词再次发音时直接播放缓存,速度更快;取消勾选则不再读写本地缓存(旧文件需手动删除该目录清理)。
- 发音语言:
- 首次运行会在后台预热语音引擎(约 3 秒),之后发音即时响应。
三、提示条停留
设置:设置 → 扩展 → “提示条停留”(秒)
- 选词上屏后,候选提示条不再立即消失,而是继续停留所设秒数(0~10),便于继续查看候选内容。
四、剪贴板翻译(中英互译)
开关:设置 → 扩展 → 勾选“剪贴板翻译”(需要联网,使用有道翻译接口)
- 复制文本后稍候,会在鼠标位置弹出翻译提示框,样式与候选窗一致:
- 第一行:
原: <被翻译的原文>(过长自动截断) - 第二行:
译: <译文>
- 第一行:
- 自动识别语言方向:
- 中文 → 英文:整句翻译。
- 英文 → 中文:单个单词走词典接口;含空格的整句走句子翻译接口。
- 支持长度上限约 500 字符;多行文本会自动归一化空白后再翻译。
- 提示停留时间:设置 → 扩展 → “译提示停留”(1~30 秒)。
Ctrl+C+C 替换选中文本为译文
- 在可编辑的文本中选中一段文字并复制(第一次 Ctrl+C),等待译文提示出现;
- 保持选区不变,再次按 Ctrl+C(内容未变即视为第二次复制);
- 译文会自动粘贴,直接替换编辑器中选中的原文,提示框显示“译: …(已替换)”。
原理:将译文写入剪贴板后模拟一次 Ctrl+V,粘贴到当前选区。若目标应用不支持粘贴(如非编辑窗口),则仅剪贴板内容被替换为译文。替换动作有防回环保护,不会触发“译文再被翻译”的循环。
五、设置界面“扩展”标签页
设置窗口新增独立的 “扩展” 标签页,集中管理以上功能:
| 控件 | 说明 |
|---|---|
| 候选显示英文 | 开关,见第一节 |
| 选词发音 | 开关,见第二节 |
| 发音语言 | 中文 / 英文 |
| 提示条停留 | 选词后提示条停留秒数 |
| 发音语速 | SAPI 语速 -2~10 |
| 剪贴板翻译 | 开关,见第四节 |
| 发音保存到本地 | WAV 缓存开关 |
| 译提示停留 | 翻译提示框停留秒数 |
- 勾选/修改即时生效,无需重启;关闭窗口时统一写入
Data\Yzime.ini,重开界面会回显已保存的值。
常见问题
- 修改代码后不生效? 需要退出并重新运行
Yzime64.ahk(设置项本身即时生效,代码改动需重启)。 - 没有发音? 确认系统装有对应语言的 SAPI 语音(Windows 一般自带“Microsoft Huihui / Microsoft Zira”等);查看
Yzime\Data\yzdbg.log中SPEAKINIT、VOICES行确认引擎初始化情况。 - 翻译无提示框? 确认已勾选“剪贴板翻译”且网络可达有道接口;可在
yzdbg.log中查看PROC / RUN / CLIPDONE行定位问题。 - Shift+数字打出符号而不是选英文? “候选显示英文”开启且处于候选状态时才会拦截 Shift+数字;非候选状态仍输入符号,属预期行为。
打赏