Dez idiomas em três dias: notas de campo da localização de um produto de tradução por IA
Localizamos o Transept para alemão, ucraniano, chinês, português, francês, espanhol, tcheco, italiano, polonês e turco em um longo fim de semana, usando a tradução automática da forma como orientamos nossos usuários a usá-la: com contexto, decisões terminológicas e pós-edição humana. Estas são as regras de plural, mudanças de registro, inversões tipográficas e lições de hreflang que reunimos pelo caminho.


Nesta página
Entre uma manhã de sexta-feira e uma noite de domingo no início de julho, o Transept deixou de ser um produto apenas em inglês para falar onze idiomas. Alemão, ucraniano e chinês foram os primeiros, com o português brasileiro logo em seguida; francês, espanhol, tcheco, italiano e polonês chegaram no dia seguinte; o turco encerrou a lista no domingo.
Desenvolvemos uma ferramenta de tradução por IA. Continuar apenas em inglês teria sido uma admissão implícita de que não acreditamos no nosso próprio discurso. Por isso, fizemos a localização da forma como recomendamos aos nossos usuários: tradução automática para ganhar escala, julgamento humano para as decisões e uma memória de cada escolha para que nada precise ser decidido duas vezes.
Cada idioma representou cerca de 3.300 strings no aplicativo, outras 3.000 no site de marketing e na central de ajuda, seis páginas jurídicas e todos os e-mails enviados pelo produto. Este post traz as notas de campo: o que nos surpreendeu, as armadilhas em que caímos e algumas que evitamos no último minuto. Se você está prestes a localizar um produto, ou se vive de tradução e quer ver como é a localização de software por dentro das engrenagens, este texto é para você.
Por que não passamos tudo simplesmente pelo Google Tradutor
Essa é a primeira pergunta, e é justa. A tradução automática é barata e instantânea; qualquer tabela de strings no mundo pode ser processada por uma API em uma única tarde. Por que não fazer isso?
Porque tentamos algo parecido e detectamos a falha no nosso próprio produto antes de qualquer usuário. Nossa primeira versão das páginas de marketing as tratou da forma como a maioria dos fluxos de strings faz: como uma planilha de células desconectadas, agrupadas por tamanho, com cada linha traduzida às cegas. O resultado era gramaticalmente correto e plausível, mas sutilmente sem vida. Um título e a frase de destaque que o completava foram traduzidos por duas chamadas de API diferentes que nunca se cruzaram. Uma resposta de FAQ ignorava a própria pergunta. Duas colunas de uma tabela comparativa perderam a sintonia porque uma ignorava a existência da outra. Enquanto isso, a interface do app, onde cada string foi criada com uma nota de contexto, ficou visivelmente melhor em todos os idiomas. O mesmo modelo, no mesmo dia, no mesmo fluxo. A diferença foi o contexto.
Isso se tornou a regra para tudo: o modelo enxerga conjuntos coerentes, nunca fragmentos embaralhados, e cada string é acompanhada por uma nota explicando onde ela aparece e o que o usuário está fazendo ao vê-la. "Botão salvar" não é uma nota de contexto. "Rótulo genérico de botão de salvamento para envio de formulários; o usuário acabou de editar um valor e está confirmando a alteração" já é uma nota de contexto. Ela é escrita para um tradutor que nunca abriu o aplicativo, e não importa se esse tradutor é um humano ou um modelo: sem ela, ambos produzem resultados imprestáveis, e com ela, ambos se tornam surpreendentemente bons.
A qualidade da tradução depende mais do contexto do que do tradutor em si. Qualquer tradutor profissional confirmará isso. E o mesmo vale quando o tradutor é uma máquina. O que é ótimo, pois fornecer mais contexto a uma máquina escala muito melhor do que dar broncas nela.
O nome técnico do fluxo de trabalho que adotamos é MTPE (pós-edição de tradução automática). A máquina faz a primeira passagem por tudo; os humanos revisam onde a confiança é fundamental. Mas a MTPE só funciona em uma ordem: o humano decide, a máquina executa, o humano verifica. As decisões vêm primeiro. O que nos leva ao alemão.
du oder Sie: o registro é uma decisão de produto
O alemão foi nosso primeiro idioma e nos deu nossa primeira lição poucas horas após o lançamento.
O alemão tem duas formas de dizer "você": o informal du e o formal Sie. Lançamos com o du: amigável, com cara de startup, o registro que metade dos aplicativos no seu celular utiliza. Depois, olhamos para o nosso público real (tradutores profissionais, agências, equipes jurídicas) e mudamos o produto inteiro para o Sie no mesmo dia.
A lição foi o que uma mudança de registro custa: uma nova retradução de tudo. A escolha do pronome gera um efeito cascata em conjugações verbais, imperativos, possessivos e até no uso de maiúsculas. Tentar remendar o texto string por string deixa rastros de uma conversão incompleta por toda parte: uma frase com Sie com um verbo em du escondido no meio. Retraduzimos cada corpus do zero e depois usamos o grep para buscar os radicais reveladores du/dein/dich para confirmar que a mudança realmente funcionou.

*A página inicial em alemão. *O slogan da marca, "Onde cada decisão se torna memória", acabou se revelando uma premissa central sobre a própria localização.
Desde então, o registro é a primeira questão que definimos para cada novo idioma, antes mesmo de traduzir uma única string, pois ele se entranha em seis mil delas. O espanhol adotou o formal usted, na variante europeia em vez da latino-americana, para se alinhar ao Sie do alemão e ao vous do francês. O italiano seguiu o formal Lei. Polonês? Bem, o polonês merece uma seção à parte.
As regras de plural que ninguém te conta
Toda equipe que localiza software em inglês cai na mesma armadilha: os plurais em inglês são tão simples que o seu formato de string provavelmente só tem dois campos: uma coisa, várias coisas. O alemão se comporta da mesma maneira, o que faz você baixar a guarda ainda mais. Aí você adiciona um idioma eslavo e categorias inteiras da sua interface revertem silenciosamente para o inglês.
O ucraniano, minha língua materna e o idioma para o qual eu tinha menos desculpas, tem quatro categorias de plural. Um documento. Dois, três, quatro documentos em uma forma diferente. De cinco a vinte em uma terceira. Frações em uma quarta. Nossa tabela de strings continha apenas as duas categorias do modelo inglês, então, para contagens de 2, 3, 4, 5, 11, 22 (a maioria dos números que o usuário realmente vê), o aplicativo exibia o conteúdo em inglês. Eram cerca de oitenta strings (créditos, documentos, membros, arquivos), cada uma delas uma emenda visível bem no meio de uma frase em ucraniano.

*A nota da build do dia em que o descobrimos. "*Cai no inglês — um bug muito visível" é um eufemismo típico da engenharia.
A correção é conceitualmente simples (fornecer todas as formas de plural que a gramática do idioma define, não apenas as duas do inglês), mas explorar o que são essas formas se tornou minha coleção favorita de curiosidades de todo o projeto:
| Idioma | Categorias de plural | A surpresa |
|---|---|---|
| Alemão | 2 | Nenhuma. Essa é a armadilha: ela faz você acreditar que o mundo só tem duas. |
| Ucraniano | 4 | O 21 assume a forma singular: «21 крок». |
| Tcheco | 4 | A quarta forma serve apenas para decimais, uma categoria fantasma que a sua interface nunca renderiza. |
| Polonês | 4 | As mesmas quatro categorias do tcheco, com uma distribuição completamente diferente. O 21 é plural: „21 kroków”. |
| Francês | 3 | O zero é singular. E a terceira forma só é acionada em milhões exatos. |
| Espanhol | 3 | O zero é plural, o exato oposto do francês. |
| Turco | 2 | Substantivos permanecem no singular após qualquer numeral: "5 belge", nunca "5 belgeler". |
| Chinês | 1 | Uma única forma para tudo. O idioma mais fácil desta tabela. |
Dois destes casos merecem um olhar mais atento.
O polonês não é o tcheco. Como são línguas eslavas ocidentais irmãs, presumimos que o polonês seguiria o padrão do tcheco. Mas não é o que acontece: a distribuição de plurais do polonês coincide com a do ucraniano, seu primo eslavo oriental, apesar da árvore genealógica. Vinte e um passos é „21 kroków” em polonês, mas «21 крок» em ucraniano: plural em um, singular no outro, em dois idiomas que concordam em quase todo o resto. A lição é universal: verifique a gramática, nunca o parentesco. O parentesco linguístico é apenas uma sugestão.
O francês tem uma forma de plural que só existe em um milhão. Não "por volta de um milhão": em exatos 1.000.000, 2.000.000 e assim por diante. Para qualquer outro número, o francês se comporta como o inglês. Já cuidamos disso e espero que, algum dia, um usuário com um saldo redondo de milhões de palavras perceba.
Mais uma armadilha deste capítulo para os engenheiros: o código de idioma do ucraniano é uk, não ua. ua é o código de país e, se você usá-lo, o mecanismo de plurais não acusa erro; ele simplesmente assume as regras do inglês britânico e tudo o que vimos acima se repete. Essa mesma confusão afeta o tcheco (cs, não cz) e o dinamarquês (da, não dk).
«Воркфлоу» чи «робочий процес»: terminologia é um conjunto de decisões
Os problemas mais difíceis não eram gramaticais. Eram as pequenas guerras travadas por causa de uma única palavra.
Vejamos o workflow. O ucraniano oferece um decalque nativo («робочий процес», literalmente "processo de trabalho"), que é o que você encontraria no dicionário. Mas os tradutores que passam o dia imersos nesse software não dizem «робочий процес»; eles dizem «воркфлоу», o estrangeirismo, da mesma forma que o inglês absorveu rendezvous. Após muitas idas e vindas, optamos pelo estrangeirismo. O resultado soa como o setor realmente fala.
Ou vejamos o Memory, o nome de um recurso nosso. Nossa convenção para o alemão mantém alguns poucos termos em inglês: Credits, Translation Memory. Um profissional alemão os lê como vocabulário do setor, da mesma forma que lê Update ou Login. Assim, quando o ucraniano herdou a mesma lista de termos "não traduzir", "Translation Memory" aparecia em inglês no meio de frases em cirílico, soando como se alguém tivesse esquecido de traduzir aquilo. Uma palavra em alfabeto latino no meio de um texto em cirílico salta aos olhos. Para piorar, o ucraniano é uma língua flexiva: «Пам'ять» precisa declinar em casos conforme a frase se molda ao seu redor, algo que um substantivo em inglês se recusa a fazer. Corrigimos para «перекладацька пам'ять» e aprendemos que uma lista de termos "não traduzir" é uma decisão específica para cada idioma. O chinês ilustrou o mesmo ponto pelo lado oposto: lá, tudo é traduzido (翻译记忆库 para Translation Memory, 术语库 para glossary, 工作流 para workflow), e apenas os próprios nomes dos produtos permanecem em alfabeto latino.
Todo o nosso produto é construído sobre esta lição: a terminologia é um conjunto cumulativo de decisões fundamentadas. Esta palavra porque o setor a utiliza, aquela em inglês por ser uma marca, esta outra traduzida porque o sistema de escrita exige. Tome a decisão uma vez, registre o motivo, e todos os documentos futuros a herdarão. É para isso que um glossário realmente serve, e é por isso que tratamos a memória de tradução como contexto de decisão, e não apenas como um amontoado de frases correspondentes.
Idiomas irmãos discordam em tudo
Se os plurais foram o tour gramatical, a tipografia foi o tour de etiqueta, e a lição mais sólida foi que nada se transfere entre vizinhos.
O francês faz questão de um espaço antes de cada dois-pontos, ponto e vírgula, ponto de exclamação e ponto de interrogação (um espaço inseparável, s'il vous plaît) e envolve as citações em « aspas angulares com espaços internos ». O espanhol, logo ali na fronteira, faz exatamente o oposto: a pontuação fica colada ao texto, as aspas angulares abraçam o conteúdo «assim» e as perguntas devem abrir de cabeça para baixo. ¿ e ¡ são obrigatórios na gramática.
O caso mais sutil veio do italiano. No italiano formal, o pronome de cortesia é grafado com inicial maiúscula (Lei, Suo, Sua), em parte para distinguir o "você" formal do lei em minúsculo, que significa "ela". Isso foi mais importante aqui do que em outros contextos, pois nossos textos mencionam constantemente a Literess — que é, essencialmente, uma lei — logo ao lado de frases que se dirigem ao usuário como Lei. Uma única letra maiúscula está fazendo um trabalho pesado de desambiguação. O italiano também rompeu a convenção dos botões: enquanto o francês e o espanhol usam o infinitivo (Enregistrer, Guardar), o italiano utiliza o imperativo puro (Salva, Accedi). Isso parece informal, mas não é; é simplesmente como o software fala em italiano.
O polonês trouxe um desafio inédito: sua forma de tratamento formal é flexionada por gênero. O Sie alemão, o vous francês e o usted espanhol servem para qualquer usuário; já a polidez polonesa usa Pan para homens e Pani para mulheres — e até os verbos no passado se flexionam conforme o gênero do interlocutor. Como não sabemos o gênero do usuário e não nos cabe adivinhar, o produto em polonês se expressa como qualquer software polonês bem-feito: com construções impessoais ("Zapisano", salvo), uma voz institucional acolhedora na primeira pessoa do plural ("Zapraszamy", nós convidamos você) e o tratamento direto com distinção de gênero apenas quando é realmente inevitável.
O turco, nosso último idioma, parecia fácil (um siz formal e neutro, sem qualquer gênero gramatical), mas acabou nos cobrando caro na ortografia. No turco, a versão maiúscula de i é İ, com ponto, então "iptal" (cancelar) vira "İptal"; um I sem o ponto é uma letra diferente e um erro evidente. Nomes de idiomas levam letra maiúscula ("Türkçe"), ao passo que todas as línguas românicas e eslavas os escrevem com minúscula. E como o turco é uma língua aglutinante, até os nomes de marcas que nunca traduzimos sofrem flexão: um sufixo de caso é anexado com um apóstrofo, então os usuários fazem upgrade "Pro'ya" e importam "Transept'e". A própria marca declina. Essa não está em nenhum manual de i18n.
O chinês, para equilibrar as coisas, foi a lição de física: pontuação de largura total(,。!?), um leve espaço de respiro onde o CJK encontra o alfabeto latino ("使用 Transept 翻译") e textos que acabam tendo cerca de metade do comprimento da versão em inglês. Enquanto o alemão se expande e quebra seus layouts, o chinês encolhe e faz com que os botões pareçam grandes demais. Sua interface precisa sobreviver a ambos.
Os clandestinos: as strings que nunca passaram pela tradução
A localização tem um tipo de bug bem específico: a string que sequer chegou a entrar no sistema.
Nossa cobertura de tradução é garantida pelo compilador: se uma string não tiver tradução, o sistema literalmente não compila. Mas essa verificação só enxerga as strings que pediram para ser traduzidas. Um badge que renderiza um valor bruto do banco de dados (owner, vindo direto do enum) nunca pediu. Ele passou ileso por todas as compilações, em inglês em todos os onze idiomas, invisível por um motivo simples: enquanto o app era apenas em inglês, o inglês fixo no código servia de camuflagem.
A primeira sessão de um usuário em ucraniano revelou o selo owner. Depois, os rótulos de nível de acesso na janela de compartilhamento. Em seguida, toda a coluna de comentários: cerca de vinte e cinco strings que nunca haviam passado pela camada de tradução. Depois, um rótulo de leitor de tela aqui, um placeholder ali. Cada novo idioma se tornava uma auditoria de tudo o que veio antes: no momento em que o texto ao redor muda para o ucraniano, cada clandestino brilha como um sinalizador.
Lançar um idioma não é uma tarefa de tradução; é um censo. Você não sabe quais de suas strings são reais, localizáveis e traduzíveis até que um segundo idioma force até a última delas a responder à chamada. Planeje essa etapa de auditoria no cronograma, pois o compilador não vai te salvar de uma string que nunca solicitou tradução.
Literess se recusou a ser presunçosa em ucraniano
O meu bug favorito de todo o projeto não é, a rigor, um bug. Ainda não conseguimos explicá-lo totalmente.
A Literess, nossa editora assistente interna (você talvez a conheça pelo seu próprio artigo), tem um repertório de quarenta e oito humores. O avatar dela reage enquanto ela trabalha: ela escolhe a expressão da mesma forma que escolhe as palavras, como parte da resposta. E sua marca registrada é o ar presunçoso: aquele sorrisinho de satisfação que ela exibe quando encontra um erro que você deixou passar.
Ela faz isso em todos os idiomas. Aquela presunção de quem pegou um erro de digitação no alemão, no francês, no chinês, no polonês. Então, mudamos para o ucraniano e testamos as mesmas situações que costumam gerar o sorrisinho em qualquer outro lugar, mas ela não o fez. O mesmo modelo, o mesmo prompt, a mesma personalidade, os mesmos quarenta e oito humores à disposição. Em ucraniano, ela continua feliz ou, no máximo, fica séria. Ela simplesmente se recusa a ser presunçosa em ucraniano.
Nossa melhor teoria é justamente a que um tradutor proporia. Em inglês, smug pode ser afetuoso: quando dirigido a uma assistente virtual que acabou de encontrar um erro de digitação seu, soa praticamente como um elogio. O ucraniano não tem uma palavra assim: o equivalente mais próximo, «самовдоволена», é apenas um insulto. Uma autossatisfação monótona e antipática, sem piscadela, sem charme. E um modelo pensando em ucraniano parece saber disso. Ao formular sua resposta em um idioma onde a presunção afetuosa não existe como conceito, ela também não a busca como um sentimento. A palavra existe em seu vocabulário; a relutância vive em seu comportamento.
Acho isso ao mesmo tempo engraçado e profundo. Este post inteiro foi sobre strings (plurais, registros, pontuação), e aqui temos um caso em que todas as strings estavam corretas e, ainda assim, o produto mudou. Um idioma não é uma pele que se estica sobre um produto de IA; ele guia o modelo que o veste. Localizar uma agente significa verificar sua personalidade em cada idioma, além de seus rótulos: você precisa ir e conhecer quem ela é em cada um deles.
(Os rótulos também exigiram cuidado, diga-se de passagem: o humor content, no sentido de satisfeito, quase foi lançado em alemão como "Inhalt" (conteúdo, o substantivo) até que uma única linha de contexto para o tradutor definisse o sentido. A intervenção de qualidade mais barata em localização ainda é uma frase dizendo ao tradutor o que uma string é.)
O lado menos glamoroso: hreflang, sitemaps e como não competir consigo mesmo
Nada disso importa se ninguém encontrar as páginas, então aqui está a parte de SEO, de forma resumida.
No momento em que você publica a mesma página em onze idiomas, o Google assume por padrão que você publicou onze quase-duplicatas competindo entre si. O mecanismo que evita isso é a anotação hreflang, e ela é menos tolerante que qualquer compilador:
- Ela deve ser recíproca. A página em inglês aponta para a versão gêmea em alemão e a versão em alemão aponta de volta com o conjunto idêntico; caso contrário, o Google ignora toda a configuração. Hreflang unidirecional não é hreflang.
**x-default**** aponta para a sua versão canônica**: a alternativa para usuários cujo idioma não corresponde a nenhum dos que você oferece.- Nunca anote uma página que não existe. Se a versão em ucraniano de uma página ainda não estiver no ar, ela não recebe um link alternativo; um hreflang pendente apontando para um erro 404 é pior do que não ter nenhum. Isso parece óbvio até você ter áreas parcialmente traduzidas, o que exige um controle rigoroso: nossos artigos da revista, por exemplo, são traduzidos um a um, de modo que cada artigo só anuncia os idiomas nos quais realmente existe.
- Os sitemaps carregam as mesmas anotações. Reestruturamos os nossos em um índice de sitemaps por idioma, o que tem o efeito colateral positivo de gerar estatísticas de indexação por idioma no Search Console: você pode acompanhar as páginas de cada idioma entrando no índice separadamente e ver imediatamente se algum deles está ficando para trás.
Tudo isso é infraestrutura. A localização sem esse trabalho de base apenas fragmenta a sua autoridade entre onze cópias concorrentes. Todo o benefício de SEO de falar o idioma do usuário depende de o Google entender que se trata de uma única página, e não de onze.
O que nos recusamos a traduzir automaticamente
Apesar de todo o entusiasmo com a tradução automática acima, três coisas foram deliberadamente mantidas fora do processo.
Estes artigos. A interface da revista (rótulos, créditos e navegação) é traduzida automaticamente, como todo o resto. Já os artigos em si são traduzidos manualmente por nós, no Transept. Textos longos e assinados são justamente o caso em que a tradução automática ainda deixa a desejar, e traduzir nossos próprios ensaios em nosso próprio editor é a forma mais honesta que conhecemos de testar o produto. A versão deste artigo que você talvez esteja lendo em alemão ou ucraniano passou pelo mesmíssimo editor, glossário e fluxo de revisão que vendemos.
Páginas jurídicas. A tradução automática gera os rascunhos (com cada nome de empresa, endereço, data e número de cláusula fixados), mas os Termos e a Privacidade são documentos vinculativos, e um advogado revisa cada idioma. Um erro de tradução em um texto de marketing custa pontos de estilo; em um contrato, custa dinheiro de verdade.
Palavra final sobre superfícies de confiança. Preços, faturamento, autenticação, e-mails: um falante nativo revisa esses conteúdos antes de considerarmos um idioma concluído. Isso é o MTPE funcionando como deveria: a máquina escreve cada palavra para que os humanos possam dedicar sua atenção — escassa e cara — apenas às palavras que envolvem riscos.
Por trás dessas três decisões está o mesmo princípio: a tradução automática é uma primeira etapa, e decidir onde essa etapa é suficiente é a essência da competência em localização. Traduzir dez idiomas em três dias só foi possível porque sabíamos exatamente o que a máquina não deveria fazer.
Onde cada decisão se torna memória
Relembre esta lista. Registro formal ou informal. «Воркфлоу», em vez de «робочий процес». Translation Memory em inglês para alemães, «перекладацька пам'ять» para ucranianos. O Lei maiúsculo, o polonês impessoal, um apóstrofo antes de sufixos turcos, uma forma de plural reservada para milhões redondos. Um assistente que dá um sorriso irônico em nove idiomas e se recusa a fazê-lo no décimo.
Quase nada disso poderia ter sido consultado antecipadamente, e as partes que mais importam são as decisões: debatidas, definidas e, depois, servindo de base para milhares de strings e para cada documento futuro. Perder a decisão significa ter que arcar com a discussão novamente; manter apenas a decisão sem o motivo significa que a próxima pessoa acabará questionando tudo de qualquer maneira.
É por isso que, no fim das contas, construímos nosso produto dessa maneira: a memória de tradução como contexto de decisão, glossários e guias de estilo como o lugar onde residem o registro e a terminologia, e um editor cuja única função é garantir que nada do que foi decidido seja esquecido. Localizar o Transept foi a primeira vez que aplicamos toda essa filosofia ao nosso próprio produto em escala total. As ferramentas deram conta do recado. As lições acima são as que estamos incorporando de volta, porque dez idiomas foram apenas o ensaio, não o ato final.
O autor

Cofundadora do Transept. Três diplomas em Língua e Literatura Inglesa — Kyiv, Ostrava e um ano em Salzburg — e uma nativa ucraniana que vive a maior parte de sua vida de escritora em inglês. Entrou na IA como engenheira de prompt, passando depois para marketing de produto e ciclo de vida. Ela escreve histórias semificcionais sobre pessoas reais e continua rondando a questão do que se perde entre os idiomas.

de desambiguação. O italiano também rompeu a convenção dos botões: enquanto o francês e o espanhol usam o infinitivo (Enregistrer, Guardar), o italiano utiliza o imperativo puro (Salva, Accedi). Isso parece informal, mas não é; é simplesmente como o software fala em italiano.
