Fix: Motor de traducción mejorado para mensajes multi-idioma y dinámicos

- Rediseñado translatePartial para manejar mezclas de idiomas (ej: 'Hello a todos')
- Eliminados hardcodes de idiomas ES/PT, ahora es 100% dinámico
- Corregido truncado de texto original en el webhook de Telegram
- Mejorada la deduplicación y preservación de párrafos en traducciones
- Fallback dinámico al primer idioma activo de la base de datos
This commit is contained in:
2026-03-10 18:23:56 -06:00
parent bf960f3fc3
commit 8170931f3d
3 changed files with 266 additions and 37 deletions

View File

@@ -34,14 +34,19 @@ $discord->on(Event::GUILD_MEMBER_ADD, function (Member $member, Discord $discord
try {
$pdo = getDbConnection();
// Obtener idioma por defecto dinámico
$stmtDefault = $pdo->query("SELECT language_code FROM supported_languages WHERE is_active = 1 LIMIT 1");
$defaultLang = $stmtDefault->fetchColumn() ?: 'es';
$stmt = $pdo->prepare("
INSERT INTO recipients (platform_id, name, type, platform, language_code, chat_mode)
VALUES (?, ?, 'user', 'discord', 'es', 'agent')
VALUES (?, ?, 'user', 'discord', ?, 'agent')
ON DUPLICATE KEY UPDATE name = VALUES(name)
");
$stmt->execute([
$member->user->id,
$member->user->username
$member->user->username,
$defaultLang
]);
echo "Usuario registrado en la base de datos" . PHP_EOL;
@@ -338,7 +343,12 @@ function handleAutoTranslationWithButtons(PDO $pdo, Message $message, string $te
// Detectar idioma del mensaje (sin emojis para mejor precisión)
$textForDetection = stripEmojisForDetection($text);
$detectedLang = $translator->detectLanguage($textForDetection) ?? 'es';
// Obtener idioma por defecto dinámico
$stmtDefault = $pdo->query("SELECT language_code FROM supported_languages WHERE is_active = 1 LIMIT 1");
$defaultLang = $stmtDefault->fetchColumn() ?: 'es';
$detectedLang = $translator->detectLanguage($textForDetection) ?? $defaultLang;
// Obtener idiomas activos de la base de datos
$stmt = $pdo->query("SELECT language_code, flag_emoji FROM supported_languages WHERE is_active = 1");
@@ -470,14 +480,18 @@ function sendDiscordWelcomeMessage(PDO $pdo, Member $member, Discord $discord):
function registerDiscordUser(PDO $pdo, $user): void
{
// Obtener idioma por defecto de la base de datos (el primero activo)
$stmtDefault = $pdo->query("SELECT language_code FROM supported_languages WHERE is_active = 1 LIMIT 1");
$defaultLang = $stmtDefault->fetchColumn() ?: 'es';
$stmt = $pdo->prepare("
INSERT INTO recipients (platform_id, name, type, platform, language_code, chat_mode)
VALUES (?, ?, 'user', 'discord', 'es', 'agent')
VALUES (?, ?, 'user', 'discord', ?, 'agent')
ON DUPLICATE KEY UPDATE name = VALUES(name)
");
$name = $user->username ?? 'Usuario';
$stmt->execute([$user->id, $name]);
$stmt->execute([$user->id, $name, $defaultLang]);
}
function sendDiscordWelcomeMessageOnMessage(PDO $pdo, Message $message, string $username): void
@@ -525,9 +539,8 @@ function handleTranslateInteraction($interaction, string $customId): void
error_log("Acknowledge error: " . $e->getMessage());
}
$textForDetection = stripEmojisForDetection($originalText);
$sourceLang = $translator->detectLanguage($textForDetection) ?? 'es';
$translated = $translator->translate($textForDetection, $sourceLang, $targetLang);
$textForTranslation = stripEmojisForDetection($originalText);
$translated = $translator->translatePartial($textForTranslation, $targetLang);
if ($translated) {
$translated = strip_tags($translated);