lorniu / go-translate

Translator on Emacs. Supports multiple engines such as Google, Bing, deepL, ChatGPT, StarDict, Youdao and so on.
GNU General Public License v3.0
282 stars 37 forks source link

Insert go-translate results directly into the buffer #59

Closed volhodav closed 10 months ago

volhodav commented 1 year ago

While following the steps described in the README to insert directly into the buffer I get the following error message:

Mark set
error in process filter: slot-missing: Invalid slot name: "#<gts-task gts-task-1fe08eead1ca>", result
error in process filter: Invalid slot name: "#<gts-task gts-task-1fe08eead1ca>", result

Here is the part related to go-translate from my .emacs config file:

;; °+°+°+°+°+°+°+°+°+°+°+°+° MY go-translate SETTINGS °+°+°+°+°+°+°+°+°+°+°+°+°

(require 'go-translate)
(setq gts-translate-list '(("en" "fr") ("fr" "en")))

(setq gts-default-translator
      (gts-translator
       :picker (gts-prompt-picker)
       :engines
       (list
    (gts-deepl-engine :auth-key "" :pro nil)
    )
       :render
       (gts-buffer-render)
       :splitter
       (gts-paragraph-splitter)
       ))

;; A class
(defclass your-render (gts-render) ())

;; A method
(cl-defmethod gts-out ((_ your-render) task)
  (deactivate-mark)
  (insert (oref task result)))

(defun my-translate-command-5 ()
  (interactive)
  (gts-translate (gts-translator
                  :picker (gts-noprompt-picker)
                  :engines (gts-google-rpc-engine)
                  :render (your-render) ; yeap!
                  )))

;; °+°+°+°+°+°+°+°+°+°+°+°+° MY org-mode SETTINGS °+°+°+°+°+°+°+°+°+°+°+
lorniu commented 1 year ago

The example in README is out-of-date.

Now, the value of task parsed result is a string or list, so the gts-out should like this:

(cl-defmethod gts-out ((_ your-render) task)
  (deactivate-mark)
  (with-slots (err parsed) task
    (if err (user-error "%s" err))
    (insert (if (listp parsed) (string-join parsed "\n\n") parsed))))
volhodav commented 1 year ago

The example in README is out-of-date.

Now, the value of task parsed result is a string or list, so the gts-out should like this:

(cl-defmethod gts-out ((_ your-render) task)
  (deactivate-mark)
  (with-slots (err parsed) task
    (if err (user-error "%s" err))
    (insert (if (listp parsed) (string-join parsed "\n\n") parsed))))

Now, after I have applied your suggested changes to my config, I get what looks like a regex error? :

Mark set
error in process filter: user-error: Error occurred when request for token.

(search-failed "FdrFJe":"\([^"]*\)")
error in process filter: Error occurred when request for token.

(search-failed "FdrFJe":"\([^"]*\)")

my .emacs config for go-translate :

;; °+°+°+°+°+°+°+°+°+°+°+°+° MY go-translate SETTINGS °+°+°+°+°+°+°+°+°+°+°+°+°

(require 'go-translate)
(setq gts-translate-list '(("en" "fr") ("fr" "en")))

(setq gts-default-translator
      (gts-translator
       :picker (gts-prompt-picker)
       :engines
       (list
    (gts-deepl-engine :auth-key "" :pro nil)
    )
       :render
       (gts-buffer-render)
       :splitter
       (gts-paragraph-splitter)
       ))

;; A class
(defclass your-render (gts-render) ())

;; A method

(cl-defmethod gts-out ((_ your-render) task)
  (deactivate-mark)
  (with-slots (err parsed) task
    (if err (user-error "%s" err))
    (insert (if (listp parsed) (string-join parsed "\n\n") parsed))))

(defun my-translate-command-5 ()
  (interactive)
  (gts-translate (gts-translator
                  :picker (gts-noprompt-picker)
                  :engines (gts-google-rpc-engine)
                  :render (your-render) ; yeap!
                  )))
lorniu commented 1 year ago

It's working well with your config on my computer.

Please retry or provide more debug infomations to me.

Steps:

  1. enable debug with (setq gts-debug-p t)
  2. translate, then switch to buffer *gts-logger*
  3. copy the log text about the translation and paste here

Thanks.