#!/usr/bin/php \n"; exit(1); } $inputFile = $argv[1]; $outputFile = $argv[2]; $sourceLang = strtoupper($argv[3]); $targetLang = strtoupper($argv[4]); $apiUrl = 'http://localhost:3001/translate'; if (!file_exists($inputFile)) { echo "Fehler: Eingabedatei nicht gefunden: {$inputFile}\n"; exit(1); } $lines = file($inputFile, FILE_IGNORE_NEW_LINES); if ($lines === false) { echo "Fehler: Datei konnte nicht gelesen werden.\n"; exit(1); } if (!empty($lines)) { $lines[0] = preg_replace('/^\xEF\xBB\xBF/u', '', $lines[0]); $lines[0] = preg_replace('/^\x{FEFF}/u', '', $lines[0]); } $outputLines = []; foreach ($lines as $lineNumber => $line) { // Leere Zeilen übernehmen if ($line === '') { $outputLines[] = ''; continue; } /** * Erlaubte Formate: * [1001]Dies ist ein Test * [1001] Dies ist ein Test * [play]Spielen * [play] Spielen */ if (preg_match('/^\[([^\]]+)\](.*)$/u', $line, $matches)) { $key = $matches[1]; $fullText = $matches[2]; // inkl. evtl. führendem Leerzeichen // Führende Leerzeichen separat merken preg_match('/^(\s*)(.*)$/u', $fullText, $textParts); $leadingWhitespace = $textParts[1]; $textToTranslate = $textParts[2]; // Wenn nach den Leerzeichen wirklich kein Text da ist -> unverändert übernehmen if ($textToTranslate === '') { $translatedText = $fullText; } else { $translatedCore = translateText($textToTranslate, $sourceLang, $targetLang, $apiUrl); if ($translatedCore === null) { echo "Warnung in Zeile " . ($lineNumber + 1) . ": Übersetzung fehlgeschlagen. Originaltext wird übernommen.\n"; $translatedText = $fullText; } else { // ursprüngliche Leerzeichen zwischen ] und Text beibehalten $translatedText = $leadingWhitespace . $translatedCore; } } $outputLines[] = '[' . $key . ']' . $translatedText; } else { echo "Hinweis in Zeile " . ($lineNumber + 1) . ": Kein [key]Text-Format erkannt, Zeile bleibt unverändert.\n"; $outputLines[] = $line; } } $result = file_put_contents($outputFile, implode(PHP_EOL, $outputLines)); if ($result === false) { echo "Fehler: Ausgabedatei konnte nicht geschrieben werden.\n"; exit(1); } #echo "Fertig. Übersetzte Datei gespeichert unter: {$outputFile}\n"; function translateText(string $text, string $sourceLang, string $targetLang, string $apiUrl): ?string { $payload = [ 'q' => $text, 'source' => strtolower($sourceLang), 'target' => strtolower($targetLang), 'format' => 'text' ]; $ch = curl_init($apiUrl); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_HTTPHEADER => ['Content-Type: application/json'], CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE), CURLOPT_TIMEOUT => 60, ]); $response = curl_exec($ch); if ($response === false) { echo "cURL-Fehler: " . curl_error($ch) . "\n"; curl_close($ch); return null; } $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpCode !== 200) { echo "API-Fehler: HTTP {$httpCode}\n"; echo "Antwort: {$response}\n"; return null; } $data = json_decode($response, true); if (!isset($data['translatedText'])) { echo "Ungültige API-Antwort: {$response}\n"; return null; } return $data['translatedText']; }