false, 'error' => 'Error fatal en el servidor: ' . $error['message'] . ' en ' . $error['file'] . ' línea ' . $error['line']]); } }); // Solo para administradores if (!isset($_SESSION['role']) || $_SESSION['role'] !== 'admin') { echo json_encode(['success' => false, 'error' => 'Acceso denegado.']); exit; } try { // 1. Verificar que la URL de LibreTranslate esté configurada if (empty($_ENV['LIBRETRANSLATE_URL'])) { throw new Exception("La variable de entorno LIBRETRANSLATE_URL no está configurada en tu archivo .env"); } $translator = new Translate(); $libreLanguages = $translator->getSupportedLanguages(); if ($libreLanguages === null) { throw new Exception("No se pudo obtener la lista de idiomas de LibreTranslate. Revisa que la URL ('" . htmlspecialchars($_ENV['LIBRETRANSLATE_URL']) . "') sea correcta y que el servicio esté funcionando."); } if (empty($libreLanguages)) { throw new Exception("LibreTranslate devolvió una lista de idiomas vacía."); } $newLanguagesCount = 0; $sql = "INSERT IGNORE INTO supported_languages (language_code, language_name, is_active) VALUES (?, ?, 0)"; $stmt = $pdo->prepare($sql); foreach ($libreLanguages as $lang) { if (isset($lang['code']) && isset($lang['name'])) { $stmt->execute([$lang['code'], $lang['name']]); if ($stmt->rowCount() > 0) { $newLanguagesCount++; } } } echo json_encode(['success' => true, 'new_languages' => $newLanguagesCount]); } catch (Throwable $e) { // Captura Throwable para errores y excepciones error_log("Error en sync_languages.php: " . $e->getMessage()); echo json_encode(['success' => false, 'error' => $e->getMessage()]); } ?>