Localização de jogos e aplicativos no Unity. Rápido e fácil

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 .

Source: https://habr.com/ru/post/pt417675/


All Articles