はっくはっくキッチン
Hack Hack Kitchen

gptel-translate.el: Unterstützung für die Übersetzung mit gptel

 2026/02/01

gptel-translate.el ist ein Paket, das die Übersetzung mit gptel unterstützt. Es übergibt den zu übersetzenden Text und die Eingangs- sowie Ausgabesprache an ein LLM und erhält das Übersetzungsergebnis.

  • Sie können beliebige LLMs verwenden, die von gptel unterstützt werden (OpenAI, Gemini, Ollama usw.).

  • Die Prompts werden automatisch an das jeweilige Modell angepasst.

  • Die Quellsprache und die Zielsprache lassen sich jederzeit über die Mini-Buffer-Vervollständigung ändern.

Hinweis

Dieses Paket ist in der alpha-Version und kann sich erheblich ändern.

Installation und Konfiguration

  1. Abrufen des Pakets

    git clone https://github.com/TPKato/gptel-translate.git ~/.emacs.d/site-lisp/gptel-translate
  2. Laden und Konfigurieren des Pakets

    Hier wird ein Beispiel für die Verwendung von use-package.

    (use-package gptel-translate
      :load-path "site-lisp/gptel-translate"
    
      :config
      ;; Falls erforderlich, Konfiguration für gptel einrichten (z. B.
      ;; Modell hinzufügen)
      ;; Hier kann diese Konfiguration ebenfalls erfolgen, aber es wird
      ;; empfohlen, dies über (use-package gptel ...) zu tun
      (gptel-make-openai "ollama"
        :host "localhost:11434"
        :protocol "http"
        :endpoint "/v1/chat/completions"
        :stream t
        :models '(translategemma:4b mitmul/plamo-2-translate:latest))
    
      :custom
      ;; Standardsprache (wird als Default verwendet, falls im Buffer keine gesetzt ist)
      (gptel-translate-default-lang-from "Japanese")
      (gptel-translate-default-lang-to   "English")
    
      :bind            ; optional
      (("C-c t" . gptel-translate-mode)))

Verwendung (Beispiel)

  1. Auswählen eines Modells in gptel

    Starten Sie zuerst gptel und wählen Sie das gewünschte LLM-Modell aus.

    M-x gptel-menu RET -m  ;; Modell auswählen
    M-x gptel              ;; gptel-Interaktionsmodus starten
  2. Aktivieren des gptel-translate-mode

    M-x gptel-translate-mode

    Oder drücken Sie die in use-package definierte Taste (z. B. C-c t).

  3. Senden des Textes

    1. Geben Sie den zu übersetzenden Text im Eingabebereich von gptel ein.

    2. Senden Sie es mit M-x gptel-send (C-c C-m). Wenn keine Eingangs- oder Ausgabesprache festgelegt ist, wird diese über den Mini-Buffer abgefragt.

    3. Mit C-u M-x gptel-send (C-u C-c C-m) können Sie die Sprachpaare interaktiv neu festlegen. Durch Eingabe von rev als Eingabessprache werden die aktuellen Eingabe-/Ausgabesprachen vertauscht.

Kommandos

gptel-translate-mode

Aktiviert/Deaktiviert den Übersetzungsmodus.

gptel-translate-change-languages

Legt die Sprachpaare interaktiv fest. Bei der Eingabe von rev wird die Eingabe-/Ausgabesprache vertauscht.

gptel-translate-swap-languages

Vertauscht die aktuell eingerichteten Eingabe-/Ausgabesprachen.

Funktionsweise von gptel-send

Wenn der gptel-translate-mode aktiv ist, funktioniert gptel-send wie folgt:

M-x gptel-send

Sendet den Prompt an das LLM.

C-u M-x gptel-send

Fragt den Benutzer nach der Übersetzungssprache, bevor der Prompt gesendet wird.

C-u C-u M-x gptel-send

Ruft die ursprüngliche C-u M-x gptel-send auf, d. h. gptel-menu.

Konfiguration von Modellgruppen für die Übersetzung

In gptel-translate.el werden Übersetzungsmodellgruppen definiert und verwaltet. Eine Übersetzungsmodellgruppe besteht aus:

  • Ein eindeutiger Identifier

  • LLM-Modells

  • Übersetzungssprache

  • Prompt-Transformationsfunktion

Standards Übersetzungsmodellgruppen

Standardmäßig sind die folgenden Übersetzungsmodellgruppen registriert (Sprachen ausgelassen). Details entnehmen Sie dem Quellcode.

"translategemma"
 :models    '(translategemma:4b translategemma:12b)
 :languages '( ... )
 :transform #'gptel-translate--transform-translategemma
"plamo-translate"
 :models    '(plamo-2-translate mmnga/plamo-2-translate-gguf mitmul/plamo-2-translate)
 :languages '( ... )
 :transform #'gptel-translate--transform-plamo

Außerdem gibt es als Fallback die folgende Gruppierung: Wenn das aktuelle Modell nicht in einer definierten Übersetzungsmodellgruppe enthalten ist, wird diese verwendet.

gptel-translate-generic-group-name
 :languages '( ... )
 :transform #'gptel-translate--transform-generic

Hinzufügen einer eigenen Übersetzungsmodellgruppe

Sie können Ihre eigene Gruppe wie folgt definieren. Falls bereits ein gleichnamiger Gruppe existiert, wird sie überschrieben.

(defun gptel-translate--transform-mymodel (srclang dstlang)
  ;; Hier die benötigte Verarbeitung (Promptänderung) einfügen
  ;;
  ;; https://gptel.org/manual.html#orgbd9b14b ansehen
  ;; (9. Configuration > 9.1. The anatomy of gptel-send)
  )

(gptel-translate-make-model-group
 "my-model-group"               ; Einzigartiger Gruppenname
 :models    '(model-1 model-2)
 :languages '("Japanese" "German" "English" "French")
 :transform #'gptel-translate--transform-mymodel)
Identifikator (String)

Geben Sie den Gruppenname als erstes Argument ein. Beliebig, solange eindeutig.

:models (Symbol-Liste)

Liste der zu nutzenden LLM-Modelle.

:languages (String-Liste)

Auto‑Vervollständigungsoptionen für Eingabe‑/Ausgabesprachen. Sie müssen nicht alle unterstützten Sprachen aufführen.

:transform (String-Liste)

Funktion, die den Prompt umwandelt.

Teilweise Aktualisierung von Modellgruppen

Wenn Sie einen Teil einer definierten Modellgruppe ändern möchten, verwenden Sie gptel-translate-update-model-group.

(gptel-translate-update-model-group
 "my-group"
 :languages '("Japanese" "English")
 :models '(model-1 model-2))

Hier werden die :languages und :models des Modellgruppen my-group aktualisiert, ohne den :transform zu ändern.

Wenn Sie die Sprache der Modellgruppe für den Fallback ändern möchten, können Sie dies wie folgt tun:

(gptel-translate-update-model-group
 gptel-translate-generic-group-name
 :languages '("English" "German"))

Technische Hintergründe (Internes Design)

Wenn gptel-translate.el geladen wird, geschieht Folgendes:

  • Es wird ein Advice gptel-translate--advice-gptel-send zu gptel-send hinzugefügt, um das Verhalten des Präfixes (C-u) anzupassen.

  • Die Hook-Funktion gptel-prompt-transform-functions bekommt gptel-translate--prompt-transform hinzugefügt.

Wenn gptel-translate-mode non-nil ist und gptel-send ausgeführt wird, wird gptel-translate--prompt-transform via den Hook gptel-prompt-transform-functions ausgeführt.

Diese Funktion holt die für das aktuelle Modell passende Transformationsfunktion aus der definierten Übersetzungsmodellgruppe und wendet sie an, um den Prompt vor dem Senden entsprechend anzupassen.

Wenn gptel-translate-mode nil ist, beeinflussen weder gptel-translate--advice-gptel-send noch gptel-translate--prompt-transform die Funktion des gptel-send.

Testumgebung

  • GNU Emacs 30.2 + gptel 0.9.9.3 auf Arch Linux

  • LM Studio 0.3.37 auf Windows 11

    • mmnga/plamo-2-translate-gguf

  • Ollama 0.14.0 auf Windows 11

    • mitmul/plamo-2-translate:latest

    • translategemma:4b

Lizenz

  • GPL-3.0