Localização
O Turian usa um único sistema de localização para o seu jogo e para o próprio Studio. As traduções ficam em assets de tabelas de textos; o código e os documentos de interface buscam textos por chave, e o idioma ativo pode mudar com o jogo rodando.
Tabelas de textos
Cada idioma é um arquivo .strings em qualquer lugar de Assets/ — por exemplo Assets/Localization/pt-BR.strings:
{
"locale": "pt-BR",
"entries": [
{ "key": "menu.play", "source": "Play", "translation": "Jogar", "state": "translated" },
{ "key": "menu.quit", "source": "Quit", "translation": "Sair", "state": "translated",
"note": "Menu principal, último botão" },
{ "key": "inventory.items", "source": "{count} items",
"plurals": { "one": "# item", "other": "# itens" }, "state": "translated" }
]
}
source é o texto original, translation o traduzido, e state acompanha o progresso (new, translated, …) para os tradutores. Todas as tabelas do projeto são carregadas quando o jogo inicia.
Configurações do projeto
O asset Localization Settings (New → Settings → Localization Settings no painel Assets) declara o Default Locale, idioma em que o jogo começa, e os Available Locales que ele oferece.
Buscando textos no código
var title = Localization.T("menu.play"); // "Jogar" em pt-BR
var fallback = Localization.T("menu.credits", fallback: "Credits");
var items = Localization.T("inventory.items", count: 3); // "3 itens"
var source = Localization.Source("Game over"); // o próprio texto é a chave
Localization.SetLocale("pt-BR");
Log.Logger.LogInformation("Agora em {Locale}", Localization.ActiveLocale);
As consultas nunca lançam exceção: uma chave ausente retorna o fallback (ou a chave), e sem tabelas carregadas toda chamada devolve a entrada. A busca recua de uma região para o idioma — pt-BR → pt — e depois para o idioma padrão.
Para atualizar textos que você guardou, assine Localization.Service?.LocaleChanged.
Buscando textos em documentos de interface
O texto dos rótulos em um documento .ui é localizado automaticamente: o texto escrito serve como chave. Dê a um elemento um text-key para buscar uma chave explícita:
<Label text="Play" /> <!-- buscado pelo texto de origem -->
<Button text="Quit" text-key="menu.quit" /> <!-- buscado pela chave -->
Veja Interface do jogo.
Mensagens, plurais e escolhas
As mensagens aceitam um subconjunto compacto do ICU MessageFormat:
| Forma | Exemplo |
|---|---|
| Substituição | Olá, {name}! |
| Bloco de plural | {count, plural, one {# maçã} other {# maçãs}} |
| Bloco de seleção | {gender, select, female {Ela} male {Ele} other {Elu}} venceu |
| Formas de plural por entrada | o objeto plurals de uma entrada, com as chaves zero, one, two, few, many, other |
# representa a contagem. As categorias de plural seguem as regras CLDR de cada idioma, então português, polonês ou árabe escolhem a forma certa.
Trabalhando com tradutores
A biblioteca do editor converte tabelas de e para os formatos usados por ferramentas de tradução — XLIFF 1.2 e CSV — preservando chave, origem, destino, nota e estado. Assim o tradutor trabalha na ferramenta dele e o projeto mantém .strings como fonte da verdade.
Testando um idioma
O Play Mode e a CLI podem forçar um idioma por sessão:
turian-cli playmode MeuJogo --locale pt-BR --out pt-br.png
turian-cli screenshot MeuJogo --locale ja --out ja.png
O próprio Studio
O Studio é localizado com o mesmo sistema. Troque o idioma dele em Edit → Localization; inglês e português do Brasil acompanham a versão 1.0.