我发现GoldenDict-ng两个bug

第一个bug:
正常使用GoldenDict-ng的时候,我们直接敲键盘就可以向搜索栏输入内容,不用提前使用鼠标点一下搜索栏。这样非常方便。不过很多英文首字母是大写的所以通常会按住Shift不松手然后按首字母。bug就出现了,当按住Shift时敲键盘任意按键都无法向GoldenDict-ng的搜索栏输入内容,必须提前聚焦到搜索栏才可以配合Shift键输入内容。

第二个bug:
在Windows系统中有非常好的TTS,我在使用原版GoldenDict时是使用编辑菜单下的“词典”>>“词典来源”>>“语音合成”在这里添加操作系统自带的语音引擎。
GoldenDict-ng中没有“语音合成”这个功能模块。于是我使用GoldenDict-ng编辑菜单下的“词典”>>“词典来源”>>“程序” 添加了这么一条命令
PowerShell -Command “Add-Type -AssemblyName System.Speech; $synth = New-Object System.Speech.Synthesis.SpeechSynthesizer; $synth.SelectVoice(‘Microsoft Hazel Desktop’); $synth.Rate = -1; $synth.Volume = 80; $synth.Speak(‘%GDWORD%’);”
其实就是通过PowerShell调用Windows系统自带的TTS,使用这条命令绝大多数情况都是正常的。但是当搜索栏中的内容有“"”(英文单引号)就无法发音了。主要这个符号在英语中又很多,比如:I’m、You’re等。

注:这两个bug在GoldenDict-1.5.1_.QT_5123.64bit中都是没有的(GoldenDict所有版本我好像都没有发现这两个bug),也就是这两个bug是GoldenDict-ng独享的

去,第二点这个还有这种骚操作啊,怕不是还好多人都不知道可以这么用哦,学习了啊。感觉是最后的 $synth.Speak(‘%GDWORD%’) 括号内的单引号引起的吧,词典替换后 内容里有单引号的话不就后最开始那个配对了然后就语法错误啥的了 $synth.Speak("%GDWORD%") 改成这双引号的试试呢。

第一个感觉问题不大吧,查询都是大小写不敏感的

第一个影响最大,我查句子、地名、人名什么的我都有首字母大写的习惯。第二个问题,应该还是开发的时候考虑的不够周全,毕竟原版也使用这个命令也没有这个问题。

对了我写的命令没有问题,你提出的单引号改双引号实属瞎搞了。我的命令外边已经使用双引号了所以内部才使用的单引号。。。 这两个bug因该都是开发者考虑不太周全造成的。毕竟原版的GoldenDict没有这两个问题。 当然这两个bug也就我这样使用时才能一下子发现

好吧,只是猜一下,不好见怪,不会powershell啊。

所有编程语言都不可以单引号嵌套单引号吧 反正就连语法规则特别款式的JavaScript也不能这样,太容易出问题了



原版的两种调用系统TTS都是没有任何问题的

是啊,我就是觉得不能嵌套所以才认为是单引号的问题啊,$synth.Speak(‘%GDWORD%’) 这里的引号是成对的没问题,但%GDWORD%被替换成带'引号词后不就有问题了,感觉就是GoldenDict-ng先把%GDWORD%替换后再执行的你的这条完整命令,所以就语法错误了呗。原版没问题可能做了些转义处理啥的不知道,看你下面截图看下来ng版是去掉了些东西,可能转义处理啥的也去掉了,猜的话。不过感觉可以把这个命令行写到一个脚本文件里,$synth.Speak(‘%GDWORD%’); 这里就改成 $synth.Speak($args); 用变量的形式,看能不能绕过这个问题。

不是,命令正确。原版一切正常。另外我自己也会写程序,但是技术路线不支持我搞定GoldenDict-ng :joy: 我不会QT,C写的正儿八经的大的项目我都看不懂(加注释都难的那种)

其实我也不懂QT、C之类的,只是会弄点js啥的web方面的脚本。不纠结了,还是等其它大佬或者软件作者来解惑吧。

第一个,不会改。包含中文上屏,第一个汉语拼音也有问题。
第二个,暂时不改。windows自带是tts,质量比较差,不想支持,可以试下espeak, edge-tts之类合成的。

感觉第一个bug是逻辑错误啊朋友。。。
原版的逻辑是正确的啊。。。
没有人用电子词典不用搜索功能啊
基础功能不做好你花那么多精力干什么呢??? 另外你说汉语拼音。。。 有汉语拼音词典么? 倒是切换成搜狗书法(普通简中用户用的应该最多的输入法吧)直接打字输入准备搜索,也不是在搜索栏输入汉字而是把第一个按下的字母输入到搜索栏了接着才是汉字输入法继续工作
所以我完全不懂你的逻辑是什么,毕竟你说了会保留现状,如果我知道你的初衷我应该也能更好的使用GoldenDict-ng。不过我现在没有搞懂你的意图,所以我还是使用的GoldenDict,原版。
第二个那属于爱弄弄不弄算求反正会这么用的人几乎就没有。至于本地TTS目前我知道的还是微软的最好,不论发音质量延迟费用都无出其右,我们给一些涉密单位用的讯飞感觉还远不如微软而且巨贵,espeak我在Linux环境中自己就是用的这个,方方面面都不如微软,不过Linux环境微软没有做支持所以退而求其次。如果配合大模型或者通过在线平台TTS质量确实可以做到非常好,不过延迟远不如本地TTS而且有的时候没有网络或者网络不稳定

第一个字母也会没法进入输入法,单纯是字母被输入。

只有第一个字母被输进去后,输入框获取焦点,从第二个字母才开始进入输入法。

这一点对查词主要语言非英文的用户不太方便。

目前间接的解决方法用快捷键:ctrl+l

如果能在设置留有选择就好了。

英文输入也不方便啊!!! 比如China、How are you?这些在GoldenDict上没有任何问题。感觉GoldenDict-ng在这些最基础的地方都没有做好。我试了下想用GoldenDict-ng替代GoldenDict最后还是放弃了。我还是受不了如此低级的错误。另外作者说了会保存这个样子不做修改,所以这个GoldenDict-ng应该和我不会有什么交集了

原版的GoldenDict中文输入不会在搜索栏键入任何内容,我认为逻辑没有任何问题,毕竟开发者不是中国人也不认识中文,英文逻辑ok就行。GoldenDict-ng属于抄出bug了。当然作者有自的想法,不过我搞不懂是什么逻辑。

第一个大写字母的处理了(https://github.com/xiaoyifang/goldendict-ng/pull/2766) 等后续版本。
不过中文输入法还是没搞定。

第二个可以试下edge-tts.这质量比较好。

AI给了1个,试了可以用。

PowerShell -Command "$text = [Console]::In.ReadToEnd(); Add-Type -AssemblyName System.Speech; $synth = New-Object System.Speech.Synthesis.SpeechSynthesizer; $synth.SelectVoice('Microsoft Hazel Desktop'); $synth.Rate = -1; $synth.Volume = 80; $synth.Speak($text);"
2 个赞

第一个问题处理了是正确的(太基础了)。第二个反正是调用第三方程序的一个接口,有精力就优化一下没有精力砍了也可以。不过现在你都几乎做完了就差修正一些小问题了,直接在UI界面给个说明什么的让用户知道现在还有些坑可能比较好。毕竟你也是用爱发电,不容易的。

1 个赞

最终还是靠大家,后续精力可能跟不上,有兴趣的欢迎提交代码。

1 个赞

技术路线不一样,搞不懂。只能发现bug了,出来瞎BB :joy:

1 个赞

当搜索栏中的内容有’时调用外部程序容易出问题的的bug,我用一个脚本文件的代价绕开了,虽然不是那么的优雅和完美我还是把我的破烂方法反馈给您吧