DevEx e negócio

Seu jogo já está sendo traduzido sem você saber — e o que fazer com isso

O jogador tem uma opção de tradução automática na conta dele, e ela funciona no seu jogo mesmo que você nunca tenha ligado nada. Tradução manual sempre vence a automática — e há texto que nunca deveria ser traduzido.

por Gustavo Cantino8 min de leituraIniciante

Produzido com IA a partir das fontes citadas abaixo, e conferido por checagens automáticas contra essas mesmas fontes. Nenhuma pessoa leu este texto antes da publicação. Política Editorial

Placa tipográfica com a categoria DevEx e negócio em destaque, o nível iniciante abaixo, e um campo de barras verticais verde-limão sobre fundo escuro.

Existe uma chance alta de o seu jogo já estar sendo lido em outra língua agora, por gente que você não sabe que tem, com uma tradução que você nunca revisou.

Isso não é hipótese: é como a plataforma funciona por padrão. Este guia explica o mecanismo, o que ele faz sem pedir licença, e o que vale a pena fazer a respeito.

O problema

A premissa da documentação é o dado de negócio: os jogadores do Roblox vêm de culturas variadas e falam línguas diferentes. Usar bem as ferramentas de localização garante que todos entendam e aproveitem o jogo como foi pensado.

O que quase ninguém sabe é que a tradução já está acontecendo. Todo jogador tem uma opção de Tradução Automática nas configurações de conta — e com ela ligada, nome do jogo, descrição e texto dentro do jogo são traduzidos para ele mesmo que você nunca tenha habilitado tradução nenhuma.

Leia essa frase com calma, porque ela inverte a pergunta. A pergunta não é "devo traduzir o meu jogo?". Uma parte do seu público já está lendo uma versão traduzida por máquina, sem revisão, do texto que você escreveu. A pergunta é quem controla essa tradução.

E aí vem a segunda frase que muda tudo: tradução manual acrescentada ao jogo é sempre mostrada aos jogadores. A Roblox só gera tradução automática quando ela está faltando.

As duas juntas descrevem o mecanismo inteiro. Não existe escolher entre "traduzido" e "não traduzido" — existe escolher entre a tradução que você fez e a que a máquina fez por omissão. E o que você preenche, vence.

Passo a passo

1. Chegue às configurações. No painel, passe o mouse sobre o jogo, clique em gerenciar, e na navegação da esquerda vá em Audience e depois Localization. Pela aba de experiências, o caminho alternativo é o menu dos três pontos e a opção Configure Localization.

A página de localização é o ponto de partida de tudo: além de habilitar tradução, ela traz ferramentas para traduzir, acrescentar colaboradores e baixar análises de tradução.

2. Defina a língua de origem. É preciso definir a língua de origem e as línguas suportadas antes de começar qualquer localização.

A língua de origem é a língua principal em que o jogo foi escrito. Duas coisas importam aqui. A Roblox suporta apenas uma língua de origem por vez — não dá para ter um jogo bilíngue na origem. E o padrão é a língua da sua conta Roblox, o que significa que, se você nunca mexeu nisso, a origem já está definida por acidente.

Esse acidente é comum e vale conferir: um criador brasileiro que escreveu o jogo em inglês, com a conta em português, tem a origem marcada como português — e a plataforma vai tratar o inglês do jogo como se fosse tradução.

3. Defina as línguas suportadas. São as línguas para as quais você pretende fornecer tradução, e dá para ter várias no mesmo jogo. Elas se acrescentam na seção Supported Languages, pelo botão Add Language.

4. Comece pela tradução automática. A ferramenta de tradução automática está disponível em qualquer jogo, e a recomendação oficial é pragmática: em muitos casos dá para avançar bastante com ela antes de partir para tradução manual ou para trabalhar com tradutores.

Faz sentido, dado o mecanismo. A automática já está sendo aplicada para quem ligou a opção na conta; ligá-la de forma explícita não piora nada e amplia o alcance.

5. Corrija à mão o que importa. Você, ou um tradutor designado, pode acrescentar e modificar tradução na tabela do jogo. E como tradução manual sempre vence, cada linha corrigida é uma linha que a máquina para de adivinhar.

A ordem que funciona é por impacto: o texto que todo jogador lê — botão principal, tela inicial, tutorial, nome dos itens da loja — antes do texto que aparece uma vez.

Vale gastar um parágrafo no que a tradução automática erra com mais frequência, porque é o que decide o que revisar primeiro. Ela erra em texto curto e sem contexto, que é justamente o texto de interface. Um botão que diz só "Correr" pode virar substantivo em vez de verbo; "Sair" pode virar sair do jogo quando era sair da sala. E ela erra em qualquer coisa que dependa de gênero ou de número que só o seu código sabe.

A regra prática: quanto mais curto e mais isolado o texto, maior a chance de a máquina errar — e maior o retorno de revisar. Um parágrafo de história tem contexto suficiente para a máquina acertar razoavelmente; uma palavra num botão não tem nenhum.

6. Traga um tradutor quando valer. A ferramenta de colaboradores existe para isso, e dá acesso à tradução sem dar acesso ao jogo. Para uma língua com público grande, um falante nativo passando os olhos na tela inicial rende mais que qualquer ajuste automático.

Artefato

O artefato tem duas partes, e a primeira é a que dá retorno imediato.

A parte 1 é um script de Studio que desliga o AutoLocalize em tudo que estiver marcado com uma tag. Ele existe porque fazer isso clicando objeto por objeto não sobrevive à próxima pessoa que criar um TextLabel — com tag, a regra mora no objeto.

A parte 2 resolve o que a tabela de tradução não alcança: imagem com texto desenhado dentro. Cartaz, logo, tutorial ilustrado. A documentação diz que a tabela é acessível por código justamente para permitir trocar imagem ou asset por língua, e o código mostra o padrão, incluindo o recuo para a família da língua e o padrão obrigatório.

Erro comum

O erro mais visível é deixar traduzir o que não deveria. A documentação nomeia o problema: há texto que nunca deveria ser traduzido, e os exemplos que ela dá são nome de NPC e placa de rua.

O resultado de não cuidar disso é o tipo de coisa que quebra a imersão de um jeito difícil de rastrear. O NPC chamado "Rocky" vira "Rochoso". A placa que dizia "Main Street" vira "Rua Principal" — e o jogador que ouviu "vá até a Main Street" num vídeo não acha a rua. Nomes próprios, marcas, códigos e palavras inventadas do seu mundo são todos candidatos.

A correção é a propriedade AutoLocalize, desligada nos objetos, dentro do Studio. É uma propriedade por objeto, e é por isso que o artefato faz isso por tag: o número de objetos com texto num jogo médio passa de cem, e a lista cresce toda semana.

O segundo erro é a língua de origem errada, já mencionada. Ela não dá erro nenhum — só faz toda a máquina de tradução trabalhar a partir de uma premissa falsa.

O terceiro é achar que não ter configurado nada significa não estar traduzido. Significa o oposto: significa estar traduzido sem revisão, exatamente nas partes em que você não olhou.

E o quarto é tratar localização como projeto de fim de desenvolvimento. Como a tradução automática já roda, a versão traduzida do seu jogo existe desde o primeiro dia — e o texto que você escrever hoje pensando "depois eu reviso" já está sendo lido em outra língua amanhã.

Próximo passo

O exercício de maior retorno hoje custa dez minutos: abra o painel de audiência e veja de onde vêm os seus jogadores. O número decide se localização é prioridade ou curiosidade, e costuma surpreender para cima.

Depois, faça a lista do que nunca deve ser traduzido. Nome de NPC, nome de lugar, marca do jogo, códigos. Marque com tag e rode o script. É a única parte deste assunto que tem efeito imediato e não depende de decidir nada.

Uma nota final sobre expectativa: localizar não é traduzir tudo. É traduzir o que decide se a pessoa fica. Tela inicial, nome dos itens, o botão que começa o jogo e as instruções dos primeiros minutos cobrem a maior parte do efeito; o resto pode conviver com tradução automática por bastante tempo sem prejuízo nenhum.

E vale escrever pensando em quem vai traduzir. Frase curta, sem gíria e sem trocadilho atravessa bem a tradução automática; texto montado por concatenação — juntar pedaços em tempo de execução para formar uma frase — atravessa mal, porque cada pedaço chega ao tradutor sem o resto. Escrever a frase inteira, com o valor entrando num lugar marcado, custa o mesmo e sobrevive à tradução.

Com isso feito, a página de localização tem duas ferramentas que valem conhecer: a de colaboradores, que permite dar acesso a um tradutor sem dar acesso ao jogo, e a de análises de tradução, que mostra o que está sendo lido em qual língua — e é ela que diz quais linhas merecem revisão humana primeiro.

Fontes

Como corrigimos erros

Artefato pronto pra usar

Proteger do tradutor o que não deve ser traduzido, e trocar asset por língua (Studio + LocalScript)
lua
-- PARTE 1 — Script de Studio (rode uma vez na barra de comandos).
--
-- Desliga AutoLocalize no que NUNCA deve ser traduzido. A documentacao
-- da os exemplos: nome de NPC e placa de rua. Some a isso o que for
-- marca, codigo, nome proprio do seu mundo.
--
-- Por que por TAG e nao na mao: um jogo tem centenas de TextLabel, e
-- quem faz isso clicando esquece o proximo que alguem criar. Com tag, a
-- regra mora no objeto e sobrevive a quem entrar no projeto depois.

local CollectionService = game:GetService("CollectionService")

local TAG = "NaoTraduzir"
local quantos = 0

for _, objeto in CollectionService:GetTagged(TAG) do
	-- AutoLocalize existe em GuiObject e em BasePart com texto de
	-- superficie; descer pelos descendentes pega o conjunto inteiro.
	for _, d in objeto:GetDescendants() do
		if d:IsA("TextLabel") or d:IsA("TextButton") or d:IsA("TextBox") then
			d.AutoLocalize = false
			quantos += 1
		end
	end
	if objeto:IsA("TextLabel") or objeto:IsA("TextButton") or objeto:IsA("TextBox") then
		objeto.AutoLocalize = false
		quantos += 1
	end
end

print(quantos .. " objeto(s) marcados para NAO traduzir")

--[[
═══════════════════════════════════════════════════════════════════════
PARTE 2 — LocalScript: trocar ASSET conforme a lingua do jogador.

A tabela de traducao resolve TEXTO. Imagem com texto desenhado dentro
(cartaz, logo, tutorial ilustrado) ela nao alcanca -- e a documentacao
diz que da para acessar a tabela por codigo justamente para trocar
imagem ou asset por lingua.
═══════════════════════════════════════════════════════════════════════

local Players = game:GetService("Players")
local player = Players.LocalPlayer

-- Um asset por lingua, com um padrao obrigatorio.
local CARTAZ = {
    padrao  = "rbxassetid://0",
    ["pt-br"] = "rbxassetid://0",
    ["es-es"] = "rbxassetid://0",
}

-- LocaleId vem como "pt-br", "en-us", "es-es". Normalizar para minuscula
-- evita o bug classico de comparar "pt-BR" com "pt-br".
local function assetDaLingua(mapa)
    local id = string.lower(player.LocaleId or "")
    if mapa[id] then
        return mapa[id]
    end
    -- cai para a familia da lingua: "pt-pt" usa o de "pt-br" se houver
    local familia = string.match(id, "^(%a+)")
    for chave, valor in mapa do
        if type(chave) == "string" and string.match(chave, "^(%a+)") == familia then
            return valor
        end
    end
    return mapa.padrao
end

local imagem = script.Parent:WaitForChild("Cartaz")
imagem.Image = assetDaLingua(CARTAZ)
]]
Neste artigo

Continue por aqui