Como deixei meu site de jogos de navegador em 8 idiomas (Python, Docker e um LLM gratuito)

Antes de tudo: sou coreano e escrevi com ajuda de tradução, então desculpe algum erro de português.

Eu administro sozinho, na Coreia do Sul, o Yeoul Games (여울게임터). O site está no ar desde setembro de 2026 e serve como um hub onde desenvolvedores indie publicam jogos de navegador que podem ser jogados por qualquer pessoa, sem cadastro e sem necessidade de instalação. Ele começou como um espaço para hospedar meus próprios jogos e um MUD de texto em coreano; depois outros devs solo coreanos passaram a usar a plataforma.

O Yeoul Games roda em um NAS Synology na minha casa, todo encapsulado em containers Docker. O servidor web é escrito em Python e responde às requisições diretamente do NAS. Em outubro de 2026 a interface recebeu suporte a oito idiomas – coreano, inglês, japonês, português, espanhol, vietnamita, turco e alemão – com a troca feita pela query string ?lang=pt.

Como fiz o multilíngue

  1. Tabela de tradução de textos fixos – Criei um arquivo JSON contendo as chaves e os valores de todas as frases da interface. Cada resposta HTML passa por um filtro que substitui a chave pela tradução correspondente. Quando a frase está dividida por tags HTML, a chave permanece a frase completa, garantindo que a substituição seja exata.
  2. Descrição dos jogos – Quando um desenvolvedor envia seu jogo, ele marca os idiomas que o próprio jogo suporta. Independente dessa marcação, a descrição que ele escreve é enviada para a API gratuita da Groq, que gera traduções para os outros sete idiomas. Isso permite que um visitante brasileiro entenda o que o jogo oferece, mesmo que o próprio jogo só exista em coreano. Uma thread em segundo plano calcula o hash da descrição original; se o desenvolvedor editar o texto, a descrição é retraduzida.
  3. Avisos e regras – Eu escrevo avisos e regras em coreano; eles são traduzidos por máquina e exibidos nas interfaces não‑coreanas, sempre acompanhados de um link para o texto original em coreano, que é a versão que vale. As postagens de outros usuários permanecem exatamente como foram escritas.
  4. Filtros por idioma – Nas versões em inglês, português, etc., o usuário pode aplicar um filtro “jogos jogáveis no meu idioma”. O filtro utiliza a marcação de idiomas feita pelo desenvolvedor, mas, como a maioria dos jogos ainda só está em coreano, o resultado costuma mostrar poucos itens.

Código (trecho)

Tirei do código real a parte da tradução automática das descrições (leitura da chave da API e gravação em arquivo omitidas).

import hashlib, json, re, timedef src_hash(src, fields): """impressão digital dos campos traduzíveis (nome, descrição...)""" body = {f: canon(get_field(src, f)) for f in sorted(fields)} raw = json.dumps(body, ensure_ascii=False, sort_keys=True, separators=(",", ":")) return hashlib.sha256(raw.encode("utf-8")).hexdigest()[:16]def auto_ok(src, tr): """reprova a tradução se sobrar hangul que não está no original""" if isinstance(src, list): return isinstance(tr, list) and len(tr) == len(src) and all(auto_ok(a, b) for a, b in zip(src, tr)) if not isinstance(tr, str) or not tr.strip(): return False return all(w in str(src) for w in re.findall(r"[가-힣]+", tr))def auto_loop(): time.sleep(90) while True: r = auto_once() # por vez: 1 jogo × 1 grupo de idiomas time.sleep(70 if r else 240) # pausa para não estourar o limite gratuito

Na hora de exibir, a tradução só é usada se o _src salvo (a impressão digital de quando foi traduzida) bater com a do texto atual. Se o dev edita a descrição, o hash muda e o original em coreano aparece até sair a nova tradução — nunca fica uma tradução velha descrevendo outra coisa.

Onde eu travei

A principal limitação apareceu quando atingi o limite de tokens por minuto do plano gratuito da Groq. Comecei a receber erros HTTP 413 (payload too large) e 429 (too many requests). A solução foi mandar pouco por vez (1 jogo × 1 grupo de idiomas), limitar o max_tokens e esperar 70 segundos entre pedidos (240 quando não há nada a fazer). Mesmo assim, algumas traduções chegaram pela metade, com partes ainda em coreano – por exemplo, uma frase em japonês que terminava em caracteres coreanos. No começo eu corrigia à mão; depois coloquei o auto_ok acima, que descarta a tradução se sobrar hangul que não está no original.

O que ainda não funciona

Hoje são 42 jogos publicados, quase todos de desenvolvedores solo coreanos. Os próprios jogos continuam em coreano; quase nenhum está marcado como jogável em português. Portanto, apenas a interface e as descrições são traduzidas automaticamente. A qualidade da tradução ainda escorrega em alguns trechos.

Para quem faz jogo de navegador

Se você desenvolve um jogo de navegador e quer que jogadores coreanos (e de outros idiomas) vejam o seu jogo, publicar no Yeoul Games é simples: basta enviar um único arquivo HTML ou um link para a página no itch.io ou para o próprio site. A descrição será traduzida automaticamente para os sete idiomas adicionais, sem a necessidade de criar versões multilíngues manualmente. Não há anúncios nem taxas, e eu ainda dou divulgação nas minhas redes e nas comunidades coreanas.

A publicação é grátis; experimente enviar seu jogo e dê uma olhada na interface em português. Qualquer feedback sobre como a tradução está lendo será muito bem‑vindo.

https://yeoulgame.com/?lang=pt&ref=tabnews

Source

2 views·1 share