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.

소스 정보

저장소
SpaceZephyr/myskill
최근 소스 활동
2026년 3월 20일 10:38
감지된 SKILL.md 언어
독일어
스타
341
포크
84

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
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)):
GitHub에서 보기
이 SKILL.md는 매우 커서 SkillsMP가 여기에는 첫 섹션만 미리 보여줍니다. GitHub에서 보기