Oi Neste artigo, compartilharei minha experiência de localização de jogos e aplicativos no Unity, além de falar sobre meu plug-in de localização simples, disponível na Asse Store. O nível do artigo é fácil. Não haverá código, não será útil para você.

Do ponto de vista do conceito geral, tudo é simples. Deveríamos ter uma lista de dicionários para cada idioma com as mesmas chaves, a partir da qual receberemos valores localizados. Do lado técnico, você precisa determinar:
- Quais serão os nossos dicionários?
- Onde eles serão armazenados?
- Como vamos editá-los e expandi-los?
- Como implementar um pacote configurável com a interface do aplicativo?
Na implementação, fui guiado por dois princípios: simplicidade e conveniência. Portanto, o formato estruturado mais simples e adequado para dicionários é CSV (valores separados por vírgula). Este é um arquivo de texto no qual todas as células são separadas por um separador - uma vírgula (",") ou um ponto e vírgula (";"), dependendo das configurações regionais. O CSV pode ser aberto e editado em qualquer editor de texto, mas o Excel é melhor para isso. É claro que os CSVs serão armazenados na pasta Recursos, para que o aplicativo possa lê-los a qualquer momento.
O formato será o seguinte: a primeira coluna é a chave, todas as colunas subseqüentes são dicionários. A primeira linha é o título. Você pode ter um CSV comum, se houver poucos textos no aplicativo, mas pode dividi-lo em vários CSVs de acordo com algum princípio, por exemplo: menus, configurações, realizações etc.
Vá em frente. A edição da localização no Excel é ótima, é claro, mas sugiro enviá-las para o Planilhas Google. Em seguida, você pode editá-los de qualquer lugar, a qualquer hora e em qualquer dispositivo. Mas o mais importante é que a localização possa ser compartilhada entre tradutores e eles não terão dificuldades com a tradução. Você pode olhar o dicionário
aqui .

E o último ponto é a integração com o Unity, com o uGUI. Aqui também tudo é simples - para cada componente de texto
Text , adicionamos nosso componente
LocalizedText , no qual indicamos a chave. Quando iniciado, este componente receberá um valor localizado e o definirá como
Texto .

Em seguida, surgem algumas perguntas:
- Como e quando inicializar um dicionário? Basta fazer uma chamada para LocalizationManager.Read a partir do script de controle. Isso pode ser feito em Desperta ou Iniciar, se você estiver satisfeito com a detecção automática do idioma ( Application.systemLanguage ) ou após carregar o perfil quando as configurações do usuário já forem conhecidas.
- E se não soubermos exatamente qual o valor do componente Texto ? Não adicionamos o componente LocalizedText e atribuímos a ele um valor do código, acessando o dicionário por meio de LocalizationManager.Localize (string localizationKey) .
- O que devo fazer se precisar inserir um parâmetro em um valor localizado? Apenas usamos a formatação na string localizada, por exemplo, "Level {0}" e, em seguida, por meio da string.Format, executamos a substituição. Para isso, há uma sobrecarga de LocalizationManager.Localize (string localizationKey, params object [] args) .
- Como alterar a localização em tempo de execução? Basta alterar o idioma através do LocalizationManager.Language. Isso gerará um evento no qual todos os componentes LocalizedText estão inscritos. No entanto, os componentes de texto localizados a partir do código (que não possuem um componente LocalizedText ) precisarão ser atualizados manualmente.
- O que fazer com outros elementos, por exemplo, com a lista suspensa suspensa? Obviamente, use o componente LocalizedDropdown =)
Bem, o último bolo no meu ativo - ele pode baixar automaticamente todas as folhas do Google Sheets e salvá-las nos recursos do jogo. Existe um componente
LocalizationSync para isso, que possui um botão
Sincronizar (no inspetor).
Você pode baixá-lo no Asset Store:
Localização Simples .