Arquitetura e Uso do Sistema de Tradução (i18n On-Demand)
Visão Geral
A plataforma utiliza um modelo Híbrido On-Demand com Cache Persistente (Lazy Translation Pattern) para tradução de posts e comentários em tempo real, permitindo que usuários globais se comuniquem no idioma nativo de cada um (estilo Reddit / Circle.so).
Componentes
Docker Service (
LibreTranslate):- Rodando via Docker Compose na porta
5000. - Baixa e persiste automaticamente os modelos de idioma (
en,pt,es) no volume Dockerlibretranslate_data.
- Rodando via Docker Compose na porta
Serviço de Tradução Resiliente (
apps.utils.services.translation):translate_text: Suporta múltiplos provedores (libretranslate,argos,llm).safe_translate: Resiliência com fallback automático. Caso o LibreTranslate esteja indisponível ou estoure o timeout (configurável viaTRANSLATION_TIMEOUT_SECONDS), tenta um LLM secundário (ex:OpenAI gpt-4o-mini) ou retorna graciosamente o texto original sem travar a requisição do usuário.
Cache de Tradução (
TranslatableModel):- Os models
PosteCommentherdam deTranslatableModel, fornecendo a colunai18n(JSONField). - Estrutura do cache no banco:json
{ "en": { "body": "Hello world!", "title": "Welcome" }, "es": { "body": "¡Hola mundo!", "title": "Bienvenido" } }
- Os models
Endpoints REST API
Traduzir Post
- URL:
POST /api/v1/spaces/posts/{post_id}/translate/ - Payload:json
{ "target_lang": "en" } - Resposta:json
{ "translated_text": "Hello world!", "status": "success", "target_lang": "en" } - Nota: Se a tradução para
enjá existir no cache do post, o resultado é retornado instantaneamente sem nenhuma chamada a APIs externas.
Traduzir Comentário
- URL:
POST /api/v1/spaces/comments/{comment_id}/translate/ - Payload:json
{ "target_lang": "es" }
Configurações no settings.py / .env
LIBRETRANSLATE_URL:http://libretranslate:5000TRANSLATION_PRIMARY_PROVIDER:libretranslateTRANSLATION_TIMEOUT_SECONDS:3.0