<?php
/**
 * Append String Translations UI strings to all .po files and recompile .mo files.
 * No API key needed — translations are hardcoded.
 * Usage: php append-string-translations.php
 */

$langDir = __DIR__;
$domain  = 'ai-translator-for-elementor-and-polylang';
$date    = date('Y-m-d');

$msgids = [
    'String Translations',
    "Translate interface strings that aren't covered by automatic translation — payment method titles/descriptions, the checkout privacy notice, and text from other plugins. Enter the exact source text on the left, then its translation for each language. Leave a language blank to keep the original.",
    'Source text',
    'Original text…',
    'Remove',
    '+ Add string',
];

$translations = [
    'de_DE' => [
        'Zeichenfolgen-Übersetzungen',
        'Übersetzen Sie Schnittstellentexte, die nicht durch die automatische Übersetzung abgedeckt sind – Zahlungsmethoden-Titel/-Beschreibungen, den Datenschutzhinweis an der Kasse und Texte anderer Plugins. Geben Sie links den genauen Quelltext ein, dann die Übersetzung für jede Sprache. Lassen Sie eine Sprache leer, um den Originaltext beizubehalten.',
        'Quelltext',
        'Originaltext…',
        'Entfernen',
        '+ Zeichenfolge hinzufügen',
    ],
    'es_ES' => [
        'Traducciones de cadenas',
        'Traduzca cadenas de interfaz que no están cubiertas por la traducción automática: títulos/descripciones de métodos de pago, el aviso de privacidad en el pago y textos de otros complementos. Introduzca el texto fuente exacto a la izquierda y luego su traducción para cada idioma. Deje un idioma en blanco para conservar el original.',
        'Texto fuente',
        'Texto original…',
        'Eliminar',
        '+ Añadir cadena',
    ],
    'fr_FR' => [
        'Traductions de chaînes',
        "Traduisez les chaînes d'interface non couvertes par la traduction automatique — titres/descriptions des modes de paiement, la notice de confidentialité en caisse et les textes d'autres extensions. Saisissez le texte source exact à gauche, puis sa traduction pour chaque langue. Laissez une langue vide pour conserver l'original.",
        'Texte source',
        'Texte original…',
        'Supprimer',
        '+ Ajouter une chaîne',
    ],
    'it_IT' => [
        'Traduzioni di stringhe',
        "Traduci le stringhe dell'interfaccia non coperte dalla traduzione automatica — titoli/descrizioni dei metodi di pagamento, l'informativa sulla privacy al checkout e testi di altri plugin. Inserisci il testo sorgente esatto a sinistra, poi la traduzione per ogni lingua. Lascia vuota una lingua per mantenere il testo originale.",
        'Testo sorgente',
        'Testo originale…',
        'Rimuovi',
        '+ Aggiungi stringa',
    ],
    'nl_NL' => [
        'Stringvertalingen',
        'Vertaal interface-teksten die niet door automatische vertaling worden gedekt — betaalmethode-titels/-beschrijvingen, de privacymelding bij het afrekenen en teksten van andere plugins. Voer links de exacte brontekst in, daarna de vertaling per taal. Laat een taal leeg om de originele tekst te behouden.',
        'Brontekst',
        'Originele tekst…',
        'Verwijderen',
        '+ String toevoegen',
    ],
    'pl_PL' => [
        'Tłumaczenia ciągów',
        'Przetłumacz ciągi interfejsu nieobsługiwane przez automatyczne tłumaczenie — tytuły/opisy metod płatności, informację o prywatności przy kasie oraz teksty innych wtyczek. Wpisz dokładny tekst źródłowy po lewej, a następnie tłumaczenie dla każdego języka. Pozostaw język pusty, aby zachować oryginał.',
        'Tekst źródłowy',
        'Oryginalny tekst…',
        'Usuń',
        '+ Dodaj ciąg',
    ],
    'pt_BR' => [
        'Traduções de strings',
        'Traduza strings de interface não cobertas pela tradução automática — títulos/descrições de métodos de pagamento, o aviso de privacidade no checkout e textos de outros plugins. Insira o texto fonte exato à esquerda, depois sua tradução para cada idioma. Deixe um idioma em branco para manter o original.',
        'Texto fonte',
        'Texto original…',
        'Remover',
        '+ Adicionar string',
    ],
    'ru_RU' => [
        'Переводы строк',
        'Переведите строки интерфейса, не охваченные автоматическим переводом, — названия/описания способов оплаты, уведомление о конфиденциальности на странице оформления заказа и тексты других плагинов. Введите точный исходный текст слева, затем перевод для каждого языка. Оставьте поле языка пустым, чтобы сохранить оригинал.',
        'Исходный текст',
        'Оригинальный текст…',
        'Удалить',
        '+ Добавить строку',
    ],
    'uk' => [
        'Переклади рядків',
        "Перекладіть рядки інтерфейсу, не охоплені автоматичним перекладом, — назви/описи способів оплати, повідомлення про конфіденційність на сторінці оформлення замовлення та тексти інших плагінів. Введіть точний вихідний текст ліворуч, потім переклад для кожної мови. Залиште поле мови порожнім, щоб зберегти оригінал.",
        'Вихідний текст',
        'Оригінальний текст…',
        'Видалити',
        '+ Додати рядок',
    ],
];

foreach ($translations as $locale => $transList) {
    $poFile = $langDir . "/{$domain}-{$locale}.po";
    if (!file_exists($poFile)) {
        echo "SKIP: $poFile not found\n";
        continue;
    }

    $content = file_get_contents($poFile);
    $block   = "\n\n# --- Added by append-string-translations.php ($date) ---";
    $count   = 0;

    foreach ($msgids as $i => $id) {
        $escaped = addcslashes($id, '"');
        if (strpos($content, 'msgid "' . $escaped . '"') === false) {
            $tr      = addcslashes($transList[$i], '"');
            $block  .= "\n\nmsgid \"$escaped\"\nmsgstr \"$tr\"";
            $count++;
        }
    }

    if ($count > 0) {
        file_put_contents($poFile, $content . $block);
        echo "[$locale] Appended $count strings\n";
    } else {
        echo "[$locale] Already up to date\n";
    }
}

echo "\nCompiling .mo files...\n";
require_once __DIR__ . '/generate-mo-files.php';
echo "\nDone!\n";
