1. Separação de código e textos
O requisito fundamental para qualquer localização é a separação estrita entre código de programa e conteúdo textual. Todos os textos a serem exibidos devem ser armazenados em arquivos de recursos externos (por exemplo, Properties, JSON, YAML), não codificados diretamente no código-fonte. Dessa forma, os tradutores podem trabalhar sem alterar o código. Use chaves de string exclusivas como referência no código, que apontam para as respectivas traduções. Essa separação também facilita a manutenção e permite adicionar novos idiomas posteriormente sem alterações no código. Certifique-se de que rótulos de interface, mensagens de erro e dicas também estejam nesses arquivos.
2. Placeholders e variáveis
Os textos frequentemente contêm conteúdo dinâmico, como números, nomes ou datas. Eles devem ser inseridos por meio de placeholders, por exemplo, com formatação printf (%s, %d) ou abordagens mais modernas, como chaves {0}. É importante que os tradutores conheçam a ordem e o significado dos placeholders. Use placeholders nomeados (por exemplo, “{username}”) para fornecer contexto. Em idiomas com diferentes ordens de palavras, a ordem dos placeholders pode variar. Portanto, ofereça a possibilidade de ajustar a ordem na tradução. Teste todas as variantes para evitar saídas incorretas ou incompletas.
3. Regras de plural e formação do plural
Em alemão, existem apenas singular e plural, mas muitos idiomas têm regras de plural mais complexas (por exemplo, árabe com seis categorias). Use bibliotecas como ICU MessageFormat, que tratam as regras de plural específicas de cada idioma. Defina chaves separadas em seus recursos para as diferentes formas de plural (one, other). O código seleciona automaticamente a forma correta com base no número. Exemplo: „{count} {count, plural, one {maçã} other {maçãs}}“. Teste cada idioma com vários valores numéricos para garantir que a forma de plural correta seja exibida. Evite ifs fixos – isso é propenso a erros.
4. Comprimento do texto e buffer de layout
As traduções geralmente são mais longas ou mais curtas que o texto original. Especialmente em botões, menus e rótulos, isso pode prejudicar o layout. Portanto, planeje espaço suficiente para expansões de texto – um bom parâmetro é 30% de espaço extra para idiomas ocidentais, mais para asiáticos. Use layouts dinâmicos que se ajustam ao comprimento do texto (por exemplo, Auto Layout no iOS ou Flexbox na Web). Evite larguras fixas. Permita que os elementos da UI lidem com quebra de texto, se necessário. Teste a interface com as traduções mais longas esperadas para evitar sobreposições ou cortes.
5. Chaves de string, contexto para tradutores e RTL
Chaves de string exclusivas são a espinha dorsal da localização. Use nomes descritivos (por exemplo, „login.button.title“) e documente o propósito de uso. Forneça contexto aos tradutores: capturas de tela, comprimento máximo de caracteres, restrições (por exemplo, „não mais que 20 caracteres“). Para idiomas RTL, como árabe ou hebraico, a interface deve ser espelhada. Use atributos de layout que suportam RTL automaticamente (por exemplo, start/end em vez de left/right). Teste toda a navegação em condições RTL. Considere também ícones e gráficos – eles podem ser interpretados de forma diferente dependendo da cultura.