prepare( "SELECT `value` FROM translations WHERE `key` = :key AND language_code = :language LIMIT 1" ); $stmt->execute([ ':key' => $key, ':language' => $language ]); $result = $stmt->fetch(PDO::FETCH_ASSOC); $translation = $result ? $result['value'] : ''; // Almacenar en caché para futuras solicitudes $GLOBALS['_translations_cache'][$cache_key] = $translation; } catch (PDOException $e) { // En caso de error, devolver la clave como último recurso error_log("Error al obtener traducción: " . $e->getMessage()); return $key; } } // Si no se encontró la traducción, devolver la clave if (empty($translation)) { // Opcional: Registrar claves faltantes para facilitar la localización log_missing_translation($key, $language); return $key; } // Reemplazar parámetros si se proporcionan if (!empty($params) && is_array($params)) { foreach ($params as $param => $value) { $translation = str_replace(":$param", $value, $translation); } } return $translation; } /** * Registra claves de traducción faltantes para facilitar la localización * * @param string $key Clave de traducción faltante * @param string $language Código de idioma */ function log_missing_translation($key, $language) { $log_file = ROOT_PATH . '/logs/missing_translations.log'; $log_entry = sprintf( "[%s] Missing translation: %s (Language: %s)\n", date('Y-m-d H:i:s'), $key, $language ); // Asegurarse de que el directorio de logs existe if (!is_dir(dirname($log_file))) { @mkdir(dirname($log_file), 0755, true); } // Registrar en el archivo de log @file_put_contents($log_file, $log_entry, FILE_APPEND); } /** * Obtiene la lista de idiomas disponibles * * @param bool $only_active Si es true, solo devuelve los idiomas activos * @return array Lista de idiomas */ function get_available_languages($only_active = true) { global $pdo; try { $sql = "SELECT code, name, native_name, flag_emoji, is_active FROM languages"; if ($only_active) { $sql .= " WHERE is_active = 1"; } $sql .= " ORDER BY name"; $stmt = $pdo->query($sql); return $stmt->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { error_log("Error al obtener idiomas: " . $e->getMessage()); return [ ['code' => 'es', 'name' => 'Spanish', 'native_name' => 'Español', 'flag_emoji' => '🇪🇸', 'is_active' => 1], ['code' => 'en', 'name' => 'English', 'native_name' => 'English', 'flag_emoji' => '🇬🇧', 'is_active' => 1] ]; } } /** * Inicializa el sistema de traducciones en las plantillas * Inyecta las traducciones necesarias para JavaScript * * @return string Código JavaScript con las traducciones (sin etiquetas JS; }