Localização de jogos no Unity: as melhores maneiras de traduzir suas Tabelas de Strings

Localização de jogos no Unity: as melhores maneiras de traduzir suas Tabelas de Strings

7 de setembro de 2026

O Unity oferece três maneiras de exportar suas Tabelas de Strings, e a escolha define a forma de todo o trabalho. Não a qualidade, nem o custo: a forma. Um caminho entrega um único arquivo com uma coluna por idioma. Outro entrega um arquivo por idioma. Escolher a opção errada para o seu modo de trabalho é o que faz um trabalho de duas horas levar duas semanas.

Este é um guia sobre as três opções, o que realmente há em cada exportação e como realizar a tradução sem precisar editar manualmente sequer uma linha.

As três rotas para exportar de uma String Table Collection

O pacote de Localização da Unity exporta String Table Collections para CSV, XLIFF e Google Sheets. Esse é todo o menu, e os três resultam em formatos de arquivo que o AI Glot lê nativamente, portanto nenhum deles exige uma etapa de conversão.

Eles não são intercambiáveis, porém, e esta é a parte que merece dois minutos de atenção:

O Unity exporta as mesmas String Tables de duas formas opostas: um único arquivo com uma coluna por idioma ou um arquivo para cada idioma.

O CSV mantém seus idiomas juntos. Uma tabela pode ter quantas colunas você quiser, então um único arquivo carrega inglês, francês, japonês e todo o resto de uma vez, e um único trabalho de tradução pode preencher cada coluna vazia em uma única passagem.

O XLIFF os separa. Por design, um arquivo XLIFF emparelha um idioma de origem com um de destino, então a Unity grava um arquivo separado por idioma e anexa o código do idioma ao nome: uma coleção chamada MyGame é exportada como MyGame-ru para russo, MyGame-ja para japonês. Isso não é uma limitação da Unity, é a natureza do formato. A Unity suporta tanto XLIFF 1.2 quanto 2.0, e o AI Glot lê ambos.

O Google Sheets é o formato CSV com um botão de sincronização. Envie sua coleção para uma planilha e puxe-a de volta quando estiver preenchida. Se você já trabalha assim, exporte a planilha para CSV ou XLSX e o trabalho será idêntico à rota do CSV.

Portanto, a recomendação honesta: escolha CSV, a menos que algo no fluxo seguinte exija XLIFF. Dez idiomas em um arquivo significam um único trabalho para executar, um único plano para ler e um único arquivo para reimportar.

O que realmente há dentro da exportação CSV

Abra o arquivo uma vez e todo o fluxo de trabalho deixa de ser misterioso. Uma exportação básica tem uma coluna Key, uma coluna Id e uma coluna por localidade, nomeada conforme o idioma e seu código, como English(en) e French(fr). Ao exportar com comentários, você também terá uma coluna Shared Comments e uma coluna por localidade, como French(fr) Comments.

Uma linha exportada antes e depois. Apenas a coluna de francês é preenchida, pois a Key, o Id e o inglês são os campos que o Unity usa para a correspondência na importação.

Duas colunas ali decidem se a sua importação funcionará ou não.

Key e Id são a junção. A Unity correlaciona as linhas por meio delas ao reimportar, e usa os nomes dos cabeçalhos das colunas para encontrá-las. Uma Key traduzida não gera um erro óbvio: a linha simplesmente deixa de corresponder e uma string retorna silenciosamente ao seu fallback em todos os idiomas. Especifique claramente quais colunas devem ser traduzidas e quais devem ser mantidas, e isso não acontecerá.

As colunas de comentários são contexto, não conteúdo. Se a sua equipe escreve notas para tradutores em Shared Comments, essas notas são úteis para leitura, mas erradas para traduzir. Identifique-as.

O que causa problemas, e não é o prazo

As Smart Strings da Unity são o real perigo em uma String Table de jogo, e são invisíveis para qualquer ferramenta que traduza palavra por palavra.

Uma Smart String carrega lógica dentro do texto. Um placeholder vazio é {}. Um nomeado fornece contexto ao tradutor, como {PlayerName}. Plurais seguem as regras Unicode CLDR por meio de um formatador, então uma única entrada pode ser {0:plural:is 1 item|are {} items}. Elas também podem ser aninhadas: {User.Address:{Street}, {City}}.

Um tradutor que não conhece a sintaxe pode reordenar as chaves, traduzir a palavra plural ou, tentando ajudar, transformar {PlayerName} em {NomDuJoueur}. Cada um desses casos é uma quebra de runtime, e não apenas um erro de digitação, que você só descobrirá quando um jogador enviar um print screen.

Isso deve estar na instrução ao nível de string, e acertar essa distinção é a coisa mais útil de todo este artigo.

O escopo deve ficar na instrução do plano. Uma regra de placeholder deve ficar nas instruções do nível da string. Trocá-los causa falhas silenciosas.

Se você colocar uma regra de placeholder no plano, ela não terá utilidade. Se colocar uma regra de coluna no slot de nível de string, ela não fará absolutamente nada, silenciosamente, pois não há arquivo visível naquele momento. Ambas as falhas são silenciosas, e é por isso que merecem trinta segundos de atenção.

Aproveitando a oportunidade, a outra regra genuinamente específica de jogos: um botão que cabe em inglês transborda em alemão. O texto traduzido geralmente é de 15 a 30% mais longo, e uma instrução ao nível de string pode solicitar um limite de caracteres, para que a linha seja escrita para caber no espaço, em vez de ser cortada posteriormente. Diga isso uma vez para as entradas que ficam em uma UI de largura fixa.

Executando, rota um: o navegador

Faça o upload do CSV no tradutor de CSV ou no app, e então descreva o trabalho em uma frase. Algo como isto, e de forma deliberadamente simples:

The source is the English(en) column. Fill the empty French(fr), German(de)
and Japanese(ja) columns. Leave Key, Id, English(en) and every Comments
column exactly as they are.

Você recebe um plano antes de qualquer gasto: as colunas encontradas, o escopo, a contagem de palavras e o custo. Se houver um erro na leitura do seu arquivo, corrija em uma frase e ele planeja novamente. Tudo até a aprovação é gratuito, então uma leitura errada não custa nada além do tempo para reescrever uma cláusula.

Depois, baixe um CSV, com as mesmas colunas, as mesmas Key e Id, e importe-o novamente no Unity.

Executando, rota dois: seu agente faz todo o ciclo

Se você trabalha com Claude, Cursor, Copilot ou qualquer agente que consiga executar comandos no seu projeto, ele pode fazer tudo isso sem que você precise abrir um navegador, e pode colocar os resultados exatamente onde o Unity espera.

Instale e faça login uma vez:

npm install --global @ai-glot/cli
aiglot auth login
O loop que um agente executa. Apenas a aprovação consome créditos, então o plano pode ser lido e corrigido gratuitamente.

Aqui está um prompt que você pode entregar ao seu agente. Ele foi escrito para ser colado, e as partes importantes estão explicadas abaixo.

Our Unity String Table export is at Assets/Localization/Export/MyGame.csv.
Columns: Key, Id, English(en), and empty columns for French(fr), German(de)
and Japanese(ja).

Use the aiglot CLI to translate it. Run `aiglot batches create --help` and
`aiglot batches approve --help` first so you use the real flags.

Plan instruction: the source is English(en); fill only the empty French(fr),
German(de) and Japanese(ja) cells; leave Key, Id, English(en) and any
Comments column untouched.

Approval instructions: keep every curly-brace placeholder exactly as written,
including plural formatters and nested ones; never translate a placeholder
name; keep entries whose Key starts with MENU_ or HUD_ under 20 characters.

Use the lite quality tier. Show me the plan and the total cost BEFORE you
approve anything, then wait for me to confirm.

After I confirm, poll until it reaches a terminal status, download the result
over the original path, and tell me the row count so I can re-import in Unity.

Ele instrui o agente a ler a ajuda primeiro. Um agente que tenta adivinhar nomes de flags falha na primeira chamada e depois inventa um motivo para isso.

Ele separa explicitamente os dois tipos de instrução, que é todo o objetivo da seção acima. Escrito desta forma, o agente coloca cada item no lugar certo em vez de fundi-los em um bloco que funciona apenas metade.

Ele para antes do gasto. aiglot batches approve é o único comando que consome créditos. Tudo antes disso é gratuito e repetível, então um agente processando seus locais sem supervisão não poderá surpreendê-lo com uma fatura. Essa característica é o que torna a entrega disso a um agente algo razoável, e não imprudente.

Ele termina com um número para verificação. Solicitar a contagem de linhas oferece um teste de sanidade de um segundo antes de você reimportar.

Para referência, a sequência que ele segue:

# 1. Create the job. Free. Returns a plan and an id.
id=$(aiglot batches create Assets/Localization/Export/MyGame.csv \
      --instruction "The source is English(en). Fill only the empty French(fr), German(de) and Japanese(ja) cells. Leave Key, Id, English(en) and Comments columns unchanged." \
      --json | jq -r '.data.id')

# 2. Read the plan for free, and only then commit.
aiglot batches get "$id" --json | jq '.data.plan'

# 3. The only step that spends credits.
aiglot batches approve "$id" --quality lite \
  --instructions "Keep every curly-brace placeholder exactly as written. Never translate a placeholder name. Keep MENU_ and HUD_ entries under 20 characters."

# 4. Wait for a TERMINAL status, not for a specific one.
until status=$(aiglot batches get "$id" --json | jq -r '.data.status'); \
  [ "$status" = "completed" ] || [ "$status" = "failed" ] || [ "$status" = "cancelled" ]; do
  sleep 5
done

# 5. Back into the project.
[ "$status" = "completed" ] && \
  aiglot batches download "$id" --output Assets/Localization/Export/MyGame.csv

Também existe um servidor MCP, aiglot mcp, caso seu agente prefira ferramentas a um shell. Comece com a CLI: funciona em scripts, funciona em CI, e você pode ler exatamente o que foi executado.

Se você optou pela rota XLIFF

Um arquivo por idioma significa um trabalho por idioma, e isso funciona bem até chegar a dez. Existem duas formas de lidar com isso.

Coloque-os em um único ZIP. Até 200 arquivos e 20 MB, com 4 MB por arquivo. Cada XLIFF no arquivo deve ser da mesma versão, 1.2 ou 2.0, mas podem ter idiomas de destino diferentes, que é exatamente a estrutura que a exportação do Unity produz. Um único trabalho, uma instrução e um glossário aplicados a todo o conjunto.

O Unity gera um XLIFF por idioma de destino. Um arquivo compactado transforma esse conjunto novamente em um único trabalho.

Ou faça um loop com a CLI, da mesma forma que o prompt acima, com um lote por arquivo. São mais trabalhos, mas cada plano pode ser revisado separadamente, o que algumas equipes preferem em uma primeira execução. De qualquer maneira, os arquivos retornam como XLIFF na versão em que chegaram, com os segmentos de origem intactos e apenas os de destino preenchidos.

A parte que decide a qualidade: seu próprio vocabulário

Tudo acima é infraestrutura. O motivo de um jogo traduzido soar bem ou mal é se os seus termos são consistentes.

Um glossário define os termos que não podem variar e aplica a mesma decisão a todos os arquivos.

Insira as palavras que não podem variar em um glossário de workspace uma única vez: nomes de personagens, nomes de itens e feitiços, nomes de facções, a tradução oficial de uma frase recorrente. Ele pertence ao workspace, e não a um único trabalho, portanto se aplica a cada String Table que você enviar depois, inclusive à exportação que fizer daqui a seis meses, quando o jogo tiver crescido quatro mil entradas. É isso que faz o arquivo número vinte concordar com o arquivo número um.

Deixe seu agente rascunhá-lo. O glossário está acessível via MCP, com ferramentas para listar, ler e editar termos, portanto, o mesmo agente que acabou de ler suas String Tables pode extrair os substantivos próprios e palavras inventadas recorrentes, entregar a lista a você e escrever os termos aprovados no workspace antes da primeira tradução ser executada. Um glossário que ninguém preenche não protege nada, e para um jogo com mil termos inventados, preenchê-lo manualmente é a tarefa que acaba sendo adiada indefinidamente.

É aqui que um tradutor automático generalista falha, e o motivo é mecânico, não uma questão de gosto. O glossário dele substitui um termo sempre que há uma correspondência, sem reconsiderar a frase ao redor. Aqui, o glossário é incorporado como significado enquanto a linha é escrita, para que um nome se flexione na gramática em vez de ser apenas jogado no meio dela.

A real abrangência disso

Não passe a sua primeira hora de jogo por isso e publique. Os primeiros trinta minutos de um jogo, a página da loja e qualquer coisa que um jogador provavelmente citaria são escrita, e a escrita merece uma pessoa. São algumas centenas de palavras que carregam a maior parte do seu risco reputacional, então pagar um especialista nativo para isso é barato em termos absolutos e obviamente vale a pena.

As outras nove mil entradas são um trabalho diferente, e esta é a divisão que vale a pena internalizar: volume e importância não estão correlacionados. Rótulos de menu, tooltips, descrições de itens, registros de missões, textos de conquistas, strings de erro: é onde as horas realmente são gastas, e é miserável de fazer à mão e banal em uma única passagem. Processe o volume aqui, depois escolha seu próprio teto: envie direto para a build, ou adicione revisão profissional nos seus dois maiores mercados, ou apenas no texto das missões, e deixe o resto como vier. Nenhuma dessas opções é o conserto de uma primeira passagem ruim, e todas elas fazem o revisor gastar tempo com a linguagem em vez de com planilhas.

Se você quiser ver isso em um arquivo real antes de se comprometer com um pipeline, o tradutor de CSV aceita exportações sem a necessidade de conta. A visão geral está em nosso guia de tradução de video games, e a página de localização de jogos cobre os formatos além do Unity, caso seu estúdio lance em mais de um engine.


O comportamento de exportação do Unity descrito aqui provém da documentação do pacote Localization para a versão 1.5: o layout de colunas do CSV, a correspondência de Key e Id, as colunas de comentário, o suporte a XLIFF 1.2 e 2.0, e a nomenclatura de XLIFF por idioma. Verifique a versão do seu próprio pacote se a sua exportação parecer diferente; os limites de arquivo citados são os vigentes no momento em que este texto foi escrito.

Ganhe 10.000 palavras grátis ao se cadastrar

Pronto para traduzir seus arquivos grandes?