【求助】go-translate 自定义函数 中->英 翻译被符号截断

想定义一个函数,借助go-translate来达到批量将注释由中文翻译到英文,或者将英文注释翻译为中文。 目前是想先在单行实现注释的中文转英文。

函数代码:

(defun translate-comment-and-replace ()
  "Translate the comment on the current line and replace only the comment with the translated result."
  (interactive)
  ;; 获取光标所在行的内容
  (let* ((line-content (thing-at-point 'line t))
         ;; 提取注释部分(以 `;;` 或 `//` 或其他注释符号开头的部分)
         (comment (if (string-match ".*\\(;+\\|//\\|#\\)\\(.*\\)" line-content)
                      (match-string 2 line-content)
                    nil))
         ;; 提取非注释部分
         (non-comment (if comment
                          (replace-regexp-in-string (concat "\\(;+\\|//\\|#\\)" comment) "" line-content)
                        line-content)))
    ;; 显示提取后的注释内容
    (when comment
      (message "提取的注释内容为: %s" comment)
      ;; 自定义 ChatGPT 提示,用于翻译注释内容
      (let ((gt-chatgpt-user-prompt-template
             (lambda (text _)
               (format "请将下列注释翻译成英文,并只返回翻译结果:%s" text))))
        ;; 调用 go-translate 进行翻译,并使用 :replace 渲染器
        (gt-start (gt-translator
                   :engines (gt-chatgpt-engine :cache nil)
                   ;; 使用 gt-insert-render 只插入一次翻译结果
                   :render (gt-insert-render
                            :type 'replace
                            :rfmt (lambda (translated-text)
                                    ;; 显示翻译后的结果
                                    (message "翻译后的内容为: %s" translated-text)
                                    ;; 插入翻译结果
                                    translated-text))))))))

预期效果如下:

翻译前:

测试一 ;; 你好,世界

翻译后:

测试一 ;; Hello,World

实际效果如下:

翻译后:

测试一 ;; 你好,World

去掉逗号则正常翻译,除逗号外的其他符号,包括空格都会导致截断。

利用 message 检查,提取后的注释部分还是完整的 你好,世界 ,传递给chatgpt的却只有 世界 ,导致翻译结果不全。

你把 comment 变量传到哪里去了?

1 个赞

十分感谢,把comment传递到taker后能够顺利翻译了。

写这个函数之前利用GPT写了各自风格的函数名翻译函数,对这个 comment 的传递有好奇但没细究,因为前几个函数正常生效了,想来应该是go-translate的taker的功劳 :smiling_face_with_tear: