Skip to main content

deepl

Übersetzt Texte, Dokumente und XLIFF-Dateien via DeepL API. Verwende für Übersetzungen mit /deepl translate, /deepl file oder /deepl xliff.

Informations de source

Dépôt
SpaceZephyr/myskill
Dernière activité de la source
20 mars 2026 à 10:38
Langue détectée de SKILL.md
allemand
Étoiles
341
Forks
84

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
deepl
description
Übersetzt Texte, Dokumente und XLIFF-Dateien via DeepL API. Verwende für Übersetzungen mit /deepl translate, /deepl file oder /deepl xliff.
# DeepL Translation Skill Übersetzt Texte, Dokumente und XLIFF-Dateien via DeepL API. ## Konfiguration **Erforderlich:** - `DEEPL_API_KEY` - DeepL API-Schlüssel **Optional:** - `DEEPL_TARGET_LANG` - Standard-Zielsprache (Default: `DE`) ## Verfügbare Befehle | Befehl | Beschreibung | |--------|--------------| | `/deepl translate "<text>"` | Text übersetzen | | `/deepl file <path>` | Dokument übersetzen | | `/deepl xliff <path>` | XLIFF-Datei übersetzen | ## Gemeinsame Optionen - `--to <LANG>` - Zielsprache (z.B. EN, DE, FR) - `--from <LANG>` - Quellsprache (sonst Auto-Detect) ## API-Konfiguration ### API-Key Prüfung Vor jedem API-Call prüfen: ```bash if [ -z "$DEEPL_API_KEY" ]; then echo "❌ DEEPL_API_KEY nicht gesetzt" echo "" echo "Setup:" echo " export DEEPL_API_KEY='your-api-key'" echo "" echo "API-Key erhältlich unter: https://www.deepl.com/pro-api" exit 1 fi ``` ### API-Endpunkt bestimmen DeepL Free Keys enden auf `:fx`: ```bash if [[ "$DEEPL_API_KEY" == *":fx" ]]; then DEEPL_API_URL="https://api-free.deepl.com/v2" else DEEPL_API_URL="https://api.deepl.com/v2" fi ``` ### Zielsprache bestimmen ```bash TARGET_LANG="${DEEPL_TARGET_LANG:-DE}" # Kann mit --to überschrieben werden ``` --- ## /deepl translate Übersetzt freien Text. ### Syntax ``` /deepl translate "<text>" [--to LANG] [--from LANG] ``` ### Beispiele ``` /deepl translate "Hello, how are you?" /deepl translate "Guten Morgen" --to EN /deepl translate "Bonjour" --from FR --to DE ``` ### Anweisungen 1. **Parameter parsen:** - Text aus Anführungszeichen extrahieren - `--to` und `--from` Flags verarbeiten 2. **API-Call ausführen:** ```bash # Variablen setzen TEXT="{{user_text}}" TARGET="${TARGET_LANG}" # aus --to oder Environment SOURCE_PARAM="" if [ -n "$SOURCE_LANG" ]; then SOURCE_PARAM="--data-urlencode \"source_lang=$SOURCE_LANG\"" fi # API-Call RESPONSE=$(curl -s -X POST "$DEEPL_API_URL/translate" \ -H "Authorization: DeepL-Auth-Key $DEEPL_API_KEY" \ -H "Content-Type: application/x-www-form-urlencoded" \ --data-urlencode "text=$TEXT" \ --data-urlencode "target_lang=$TARGET" \ $SOURCE_PARAM) # Ergebnis extrahieren TRANSLATED=$(echo "$RESPONSE" | jq -r '.translations[0].text // empty') DETECTED_LANG=$(echo "$RESPONSE" | jq -r '.translations[0].detected_source_language // empty') if [ -z "$TRANSLATED" ]; then ERROR=$(echo "$RESPONSE" | jq -r '.message // "Unbekannter Fehler"') echo "❌ Übersetzung fehlgeschlagen: $ERROR" exit 1 fi echo "📝 Original ($DETECTED_LANG): $TEXT" echo "✅ Übersetzung ($TARGET): $TRANSLATED" ``` ### Error Handling | HTTP Code | Bedeutung | Aktion | |-----------|-----------|--------| | 403 | Ungültiger API-Key | Key prüfen | | 429 | Rate Limit | 1s warten, retry | | 456 | Quota überschritten | DeepL-Konto prüfen | --- ## /deepl file Übersetzt Dokumente (DeepL-native Formate). ### Unterstützte Formate | Format | Extension | |--------|-----------| | Microsoft Word | .docx | | Microsoft PowerPoint | .pptx | | PDF | .pdf (nur Pro) | | HTML | .html, .htm | | Plain Text | .txt | ### Syntax ``` /deepl file <path> [--to LANG] [--from LANG] [--output <path>] ``` ### Beispiele ``` /deepl file README.txt --to EN /deepl file document.docx --to FR --output document_fr.docx ``` ### Anweisungen 1. **Datei prüfen:** ```bash FILE_PATH="{{user_path}}" if [ ! -f "$FILE_PATH" ]; then echo "❌ Datei nicht gefunden: $FILE_PATH" exit 1 fi # Extension prüfen EXT="${FILE_PATH##*.}" case "$EXT" in docx|pptx|pdf|html|htm|txt) ;; md) # Markdown als txt behandeln EXT="txt" ;; *) echo "❌ Format nicht unterstützt: .$EXT" echo "Unterstützt: docx, pptx, pdf, html, txt" exit 1 ;; esac ``` 2. **Dokument hochladen:** ```bash UPLOAD_RESPONSE=$(curl -s -X POST "$DEEPL_API_URL/document" \ -H "Authorization: DeepL-Auth-Key $DEEPL_API_KEY" \ -F "file=@$FILE_PATH" \ -F "target_lang=$TARGET_LANG") DOC_ID=$(echo "$UPLOAD_RESPONSE" | jq -r '.document_id // empty') DOC_KEY=$(echo "$UPLOAD_RESPONSE" | jq -r '.document_key // empty') if [ -z "$DOC_ID" ]; then ERROR=$(echo "$UPLOAD_RESPONSE" | jq -r '.message // "Upload fehlgeschlagen"') echo "❌ $ERROR" exit 1 fi echo "📤 Dokument hochgeladen (ID: $DOC_ID)" ``` 3. **Status prüfen (polling):** ```bash echo "⏳ Übersetze..." while true; do STATUS_RESPONSE=$(curl -s -X POST "$DEEPL_API_URL/document/$DOC_ID" \ -H "Authorization: DeepL-Auth-Key $DEEPL_API_KEY" \ -d "document_key=$DOC_KEY") STATUS=$(echo "$STATUS_RESPONSE" | jq -r '.status') case "$STATUS" in "done") echo "✅ Übersetzung fertig" break ;; "error") ERROR=$(echo "$STATUS_RESPONSE" | jq -r '.message') echo "❌ Fehler: $ERROR" exit 1 ;; "translating"|"queued") sleep 2 ;; esac done ``` 4. **Dokument herunterladen:** ```bash # Output-Pfad bestimmen if [ -z "$OUTPUT_PATH" ]; then BASENAME="${FILE_PATH%.*}" OUTPUT_PATH="${BASENAME}_${TARGET_LANG}.${EXT}" fi curl -s -X POST "$DEEPL_API_URL/document/$DOC_ID/result" \ -H "Authorization: DeepL-Auth-Key $DEEPL_API_KEY" \ -d "document_key=$DOC_KEY" \ -o "$OUTPUT_PATH" echo "📥 Gespeichert: $OUTPUT_PATH" ``` --- ## /deepl xliff Übersetzt XLIFF-Dateien (TYPO3, Symfony, etc.). ### Syntax ``` /deepl xliff <path> [--to LANG] [--force] [--dry-run] [--output <path>] ``` ### Optionen | Option | Beschreibung | |--------|--------------| | `--force` | Alle Übersetzungen neu erstellen | | `--dry-run` | Nur zeigen was übersetzt würde | | `--output <path>` | In neue Datei schreiben | ### Beispiele ``` /deepl xliff locallang.xlf --to DE /deepl xliff locallang.xlf --force --to FR /deepl xliff locallang.xlf --dry-run ``` ### Anweisungen 1. **XLIFF-Datei einlesen und validieren:** ```bash XLIFF_PATH="{{user_path}}" if [ ! -f "$XLIFF_PATH" ]; then echo "❌ Datei nicht gefunden: $XLIFF_PATH" exit 1 fi # XML validieren if ! xmllint --noout "$XLIFF_PATH" 2>/dev/null; then echo "❌ Ungültiges XML in: $XLIFF_PATH" exit 1 fi ``` 2. **Trans-units extrahieren die Übersetzung brauchen:** ```bash # XLIFF 1.2: <trans-unit> mit leerem/fehlendem <target> # XLIFF 2.0: <unit>/<segment> mit leerem/fehlendem <target> # Für XLIFF 1.2: UNITS_TO_TRANSLATE=$(xmllint --xpath "//trans-unit[not(target) or target='']" "$XLIFF_PATH" 2>/dev/null) # Bei --force: alle Units if [ "$FORCE" = "true" ]; then UNITS_TO_TRANSLATE=$(xmllint --xpath "//trans-unit" "$XLIFF_PATH" 2>/dev/null) fi ``` 3. **Source-Texte sammeln:** ```bash # Alle source-Texte extrahieren SOURCES=$(xmllint --xpath "//trans-unit/source/text()" "$XLIFF_PATH" 2>/dev/null) # Als Array für Batch-Übersetzung readarray -t SOURCE_ARRAY <<< "$SOURCES" ``` 4. **Batch-Übersetzung via API:** ```bash # DeepL unterstützt mehrere Texte in einem Request # Baue JSON-Array für text Parameter TRANSLATIONS=() for SOURCE in "${SOURCE_ARRAY[@]}"; do RESPONSE=$(curl -s -X POST "$DEEPL_API_URL/translate" \ -H "Authorization: DeepL-Auth-Key $DEEPL_API_KEY" \ --data-urlencode "text=$SOURCE" \ --data-urlencode "target_lang=$TARGET_LANG") TRANSLATED=$(echo "$RESPONSE" | jq -r '.translations[0].text') TRANSLATIONS+=("$TRANSLATED") done ``` 5. **Bei --dry-run: Nur anzeigen:** ```bash if [ "$DRY_RUN" = "true" ]; then echo "📋 Würde übersetzen:" echo "" for i in "${!SOURCE_ARRAY[@]}"; do echo " Source: ${SOURCE_ARRAY[$i]}" echo " Target: ${TRANSLATIONS[$i]}" echo "" done echo "Gesamt: ${#SOURCE_ARRAY[@]} Einheiten" exit 0 fi ``` 6. **XLIFF-Datei aktualisieren:** Da XML-Manipulation in Bash komplex ist, verwende Python wenn verfügbar: ```python import xml.etree.ElementTree as ET tree = ET.parse(xliff_path) root = tree.getroot() # Namespace handling für XLIFF ns = {'xliff': 'urn:oasis:names:tc:xliff:document:1.2'} for i, unit in enumerate(root.findall('.//xliff:trans-unit', ns)):
Voir sur GitHub
Ce SKILL.md est tres volumineux, SkillsMP affiche donc ici seulement la premiere section. Voir sur GitHub