Compartilhar via


Localização

Este guia apresenta os conceitos por trás da internacionalização e localização e links para instruções sobre como produzir aplicativos móveis Xamarin usando esses conceitos.

Se você quiser pular diretamente para os detalhes técnicos da localização de aplicativos Xamarin, comece com um destes artigos de instruções específicos da plataforma:

i18n e L10n

Internacionalização é o processo de tornar seu código capaz de exibir diferentes idiomas e adaptar sua exibição para diferentes localidades (como formatação de número e data). Isso também é chamado de globalização.

A localização é a etapa a seguir – criando recursos (como cadeias de caracteres e imagens) para cada idioma e agrupando-os com o aplicativo internacionalizar.

Internacionalização é muitas vezes encurtado para i18n – abreviação para 18 letras entre "i" e "n". A localização é igualmente encurtada para L10n – para 10 letras entre "L" e "n".

Visão geral

Este documento apresenta os conceitos associados à internacionalização e localização e como eles se aplicam ao desenvolvimento de aplicativos móveis em geral. Ao projetar e criar um aplicativo, as coisas que você pode ter codificado anteriormente, mas que devem ser parametrizadas para localização, incluem:

  • Layouts de tela e texto,
  • Ícones, gráficos e cores,
  • Arquivos de vídeo e som,
  • Texto dinâmico e formatação de texto (como números, moeda e datas),
  • Alterações de layout para idiomas da direita para a esquerda (RTL) e
  • Classificação de dados.

Independentemente de quais plataformas móveis seu aplicativo segmenta, essas dicas ajudarão você a criar um aplicativo localizado de alta qualidade.

Considerações de criação

Arquitetar um aplicativo para que seja possível localizar seu conteúdo é chamado de internacionalização. Fazer a internacionalização corretamente é mais do que apenas permitir que cadeias de caracteres de idiomas diferentes sejam carregadas em tempo de execução – um aplicativo bem projetado deve permitir que todos os recursos sejam alterados com base no idioma e na localidade (incluindo imagens, sons e vídeos) e pode adaptar a formatação e o layout para lidar com cadeias de caracteres de tamanhos diferentes.

Esta seção discute algumas considerações de design a serem levadas em conta ao criar um aplicativo internacionalizado.

Layouts e comprimento da cadeia de caracteres

As cadeias de caracteres chinês e japonês podem ser muito curtas – às vezes, um ou dois caracteres podem ser significativos o suficiente para um rótulo de campo de entrada.

As cordas alemãs (por exemplo) podem ser muito longas; às vezes, uma palavra relativamente curta em inglês torna-se muito longa em outros idiomas – ou se tornando cortada ou então inesperadamente refluindo seu layout.

Compare os comprimentos de cadeia de caracteres de alguns itens na tela inicial do iOS em inglês, alemão e japonês:

German vs Japanese string length

Observe que Configurações em inglês (8 caracteres) requer 13 caracteres para a tradução em alemão, mas apenas 2 caracteres em japonês.

Layouts em que o rótulo de exibição e o campo de entrada estão lado a lado são difíceis de trabalhar quando o comprimento do rótulo pode variar muito. Muitas vezes, um layout em que o rótulo é exibido acima de um campo é mais fácil de localizar porque a largura total da tela está disponível para o rótulo e a entrada.

Como regra geral, se você estiver criando layouts fixos (especialmente elementos lado a lado) permita pelo menos 50% mais largura do que suas cadeias de caracteres em inglês exigem para rótulos e texto. Isso não resolverá todos os problemas, mas fornecerá um buffer que funcionará em muitos casos.

Validação da entrada

Cuidado com suposições ao escrever regras de validação. Pode parecer válido exigir uma entrada de campo de texto para "exigir" pelo menos três caracteres em inglês, já que uma única letra raramente tem qualquer significado. Em chinês e japonês, no entanto, um único caractere pode ser uma entrada válida, e uma mensagem de validação "pelo menos 3 caracteres é necessário" não faz sentido para esses idiomas.

Outras tarefas aparentemente simples, como validar um endereço de e-mail ou URL de site, tornam-se mais complicadas com os caracteres não estão limitados ao subconjunto ASCII.

Escreva suas regras de validação com a internacionalização em mente – escolha as regras menos restritivas ou escreva a lógica para que ela funcione de forma diferente para cada idioma.

Imagens e Cores

Nem toda imagem precisa ser alterada com base na escolha de idioma do usuário. Muitos ícones ou fotos serão adequados para todos os usuários, não importa o idioma que eles falam. Alguns recursos fazem sentido para localizar, como:

  • Imagens que retratam pessoas ou locais específicos – seu aplicativo pode parecer mais relevante para os usuários se mostrar pessoas/locais locais.
  • Ícones – Algumas iconografias podem ser específicas da cultura e você pode tornar seu aplicativo mais fácil de usar, localizando as imagens para refletir a compreensão local.
  • Cores – Algumas culturas entendem as cores de forma diferente – vermelho pode significar aviso em uma região, mas boa sorte em outra. Verifique com falantes nativos ao projetar seu aplicativo para determinar se você deve criar um mecanismo para localizar cores.

Vídeos e Som

Vídeos e som apresentam desafios especiais ao localizar um aplicativo, porque, embora seja relativamente fácil obter cordas traduzidas, gravar várias faixas de locução ou clipes de vídeo pode ser caro e difícil.

Várias cópias de arquivos de vídeo e som também podem aumentar significativamente o tamanho do seu aplicativo (especialmente se você estiver localizando em um grande número de idiomas ou tiver muitos arquivos de mídia). Você pode considerar baixar apenas os ativos de idioma necessários depois que o usuário tiver instalado seu aplicativo, mas isso também pode resultar em uma experiência de usuário ruim em redes lentas.

Muitas vezes, há várias maneiras de resolver problemas de localização – o mais importante é considerá-los antecipadamente e garantir que seu aplicativo seja projetado para cuidar deles.

Datas, Horas, Números e Moeda

Se você estiver usando funções de formatação do .NET, lembre-se de especificar a cultura para que os separadores decimais sejam analisados corretamente (e evite que exceções de conversão sejam lançadas). Por exemplo, 1,99 e 1,99 são representações decimais válidas, dependendo da sua localidade.

Quando os dados são provenientes de uma fonte conhecida (ou seja, de seu próprio código ou de um serviço Web que você controla), você pode codificar um identificador de cultura que corresponda à formatação, como o InvariantCulture, que funcionará para a formatação padrão do idioma inglês.

double.Parse("1,999.99", CultureInfo.InvariantCulture);

Se os dados estiverem sendo inseridos pelo usuário do aplicativo, analise-os usando uma instância de CultureInfo que reflita sua localidade:

double.Parse("1 999,99", CultureInfo.CreateSpecificCulture("fr-FR"));

Consulte os artigos do MSDN Analisando cadeias numéricas e Analisando cadeias de caracteres de data e hora para obter informações adicionais.

Idiomas da direita para a esquerda (RTL)

Alguns idiomas, como árabe, hebraico e urdu (por exemplo), são lidos da direita para a esquerda. Os aplicativos que oferecem suporte a essas linguagens devem usar designs de tela que se adaptem para leitores da direita para a esquerda, por exemplo:

  • O texto deve estar alinhado à direita.
  • Os rótulos devem aparecer à direita dos campos de entrada.
  • O posicionamento padrão do botão geralmente é invertido.
  • Navegação hierárquica, deslizamento e animação (e outras metáforas e animações de navegação) que usam direção para contexto também devem ser invertidos.

Tanto o iOS quanto o Android suportam layouts da direita para a esquerda e renderização de fontes, com recursos integrados que ajudam a fazer os ajustes acima. No momento, o Xamarin.Forms não oferece suporte automático à renderização RTL.

Classificação

Idiomas diferentes definem a ordem de classificação de seus alfabetos de forma diferente, mesmo quando usam o mesmo conjunto de caracteres.

Consulte o Detalhe da comparação de cadeias de caracteres em Práticas recomendadas para usar cadeias de caracteres no .NET Framework para obter um exemplo em que a linguagem (CultureInfo) afeta a ordem de classificação.

É improvável que os recursos internos de banco de dados nas plataformas móveis ofereçam suporte à ordenação de classificação específica do idioma, portanto, talvez seja necessário implementar código adicional em sua lógica de negócios.

Certifique-se de escrever e testar seu algoritmo de pesquisa com vários idiomas em mente. As coisas a considerar incluem:

  • Preenchimento automático – se você criou uma função de preenchimento automático, certifique-se de que ela forneça sugestões relevantes para o idioma do usuário.
  • Correspondência de consulta a dados – as consultas de pesquisa inseridas em um idioma específico serão executadas apenas em relação ao conteúdo escrito nesse idioma ou em relação a todo o conteúdo do seu aplicativo?
  • Stemming – se sua pesquisa é criada para procurar palavras semelhantes, raízes de palavras e outras otimizações de pesquisa, essas otimizações são criadas para todos os idiomas que você suporta?
  • Classificação – certifique-se de que os resultados estão classificados corretamente (veja acima).

Dados de fontes externas

Muitos aplicativos baixam dados de fontes externas, do Twitter e feeds RSS para clima, notícias ou preços de ações. Ao exibir isso para um usuário, você precisa considerar a possibilidade de exibir uma tela de informações irrelevantes ou ilegíveis para ele.

Há algumas estratégias que você pode usar para tentar garantir que seu aplicativo exiba dados relevantes para o usuário:

  • Fontes diferentes – seu aplicativo pode baixar os dados de uma fonte diferente, dependendo do idioma ou da localidade do usuário. Notícias locais, clima e preços de ações podem fazer mais sentido do que algo baixado de um feed norte-americano.
  • Exibição localizada – se você estiver exibindo um Twitter ou feed de fotos, deverá exibir os metadados (como o tempo tomado) em seu próprio idioma, mesmo que o conteúdo em si permaneça no idioma original.
  • Tradução – você pode criar uma opção de tradução em seu aplicativo para fazer uma tradução automática dos dados recebidos. Isso pode ser automático ou a critério do usuário – apenas certifique-se de notificar o usuário se isso estiver ocorrendo, já que as traduções automáticas nunca são perfeitas!

Isso também pode afetar links externos para faixas de áudio ou vídeos – ao projetar seu aplicativo, certifique-se de planejar com antecedência o fornecimento de conteúdo traduzido ou garantir que os usuários sejam adequadamente informados pela interface do usuário quando o conteúdo não for apresentado em seu idioma.

Não traduza em excesso

Algumas cadeias de caracteres em seu aplicativo podem não precisar de tradução ou, no mínimo, precisam de atenção especial por parte do tradutor. Os exemplos podem incluir:

  • URLs – se você listar um URL, ele pode ou não precisar ser ajustado por idioma. Por exemplo, facebook.com não requer tradução, ele detecta automaticamente o idioma no site principal. Outros sites têm conteúdo específico de localidade e talvez você queira oferecer uma URL diferente, como yahoo.com versus yahoo.fr ou yahoo.it.
  • Números de telefone – especialmente aqueles com códigos de país ou números diferentes para chamadores que falam um idioma específico.
  • Detalhes de contato – endereços e outras informações podem variar de acordo com o idioma ou a localidade.
  • Marcas e nomes de produtos – algumas cadeias de caracteres não precisam ser traduzidas porque são sempre escritas no mesmo idioma.

Finalmente, certifique-se de incluir instruções detalhadas para o tradutor se certas cadeias de caracteres exigirem tratamento especial.

Texto formatado

Geralmente não é um problema com aplicativos móveis porque as cadeias de caracteres geralmente não são ricamente formatadas. No entanto, se o rich text (como formatação em negrito ou itálico) for necessário em seu aplicativo, certifique-se de que o tradutor saiba como inserir a formatação, seus arquivos de cadeia de caracteres o armazenem corretamente e ele seja formatado corretamente antes de ser exibido ao usuário (ou seja, não deixe acidentalmente que os códigos de formatação sejam apresentados ao usuário).

Dicas de Tradução

A conversão das cadeias de caracteres usadas por um aplicativo é considerada parte do processo de localização. Normalmente, essa tarefa será terceirizada para um serviço de tradução e executada por uma equipe multilíngue que pode não conhecer seu aplicativo ou seu negócio.

As dicas a seguir ajudarão você a produzir cadeias de caracteres que são mais fáceis de traduzir com precisão e, portanto, melhorar a qualidade de seus aplicativos localizados.

Localizar cadeias de caracteres completas, não palavras

Às vezes, os desenvolvedores adotam a abordagem de tentar especificar palavras únicas ou frases 'snippets' para que possam reutilizá-las em todo o aplicativo. Por exemplo, para o texto "Você tem 5 mensagens", eles podem especificar as seguintes cadeias de caracteres para tradução:

Ruim:

"You have"
"no"
"message"
"messages"

e, em seguida, tente criar a frase correta em tempo real no código usando concatenação de cadeia de caracteres:

Ruim:

"You have" + " " + numMsgs + " " + "messages"
"You have" + " no " + "messages"

Isso é desencorajado porque não necessariamente funcionará para todas as línguas e será difícil para o tradutor entender o contexto de cada segmento curto. Isso também leva à reutilização de cadeias de caracteres traduzidas, o que pode causar problemas mais tarde se elas forem usadas em contextos diferentes (e depois serem atualizadas).

Permitir a reordenação de parâmetros

Algumas linguagens de programação exigem sintaxe extra para especificar a ordem dos parâmetros em uma cadeia de caracteres, no entanto, o .NET já oferece suporte ao conceito de espaços reservados numerados, portanto,

Bom:

"a {0} b {1} cde {3}"

pode ser traduzido o seguinte (onde a posição e a ordem dos espaços reservados são alteradas)

"{2} {3} f g h {0}"

e as fichas serão ordenadas como o tradutor pretendia. Certifique-se de incluir uma explicação do que cada espaço reservado contém ao enviar a cadeia de caracteres para um tradutor.

Usar várias cadeias de caracteres para cardinalidade

Evite cadeias de caracteres como "You have {0} message/s." Usar cadeias de caracteres específicas para cada estado para fornecer uma melhor experiência ao usuário:

Bom:

"You have no messages."
"You have 1 message."
"You have 2 messages."
"You have {0} messages."

Você terá que escrever código em seu aplicativo para avaliar o número que está sendo exibido e escolher a cadeia de caracteres apropriada. Algumas plataformas (incluindo iOS e Android) têm recursos integrados para escolher automaticamente a melhor cadeia de caracteres no plural com base nas preferências para o idioma/localidade atual.

Permitindo o gênero

As línguas latinas às vezes usam palavras diferentes dependendo do gênero do sujeito. Se seu aplicativo souber sobre gênero, você deve permitir que as cadeias de caracteres traduzidas reflitam isso.

Há também o caso mais óbvio, mesmo em inglês, onde as cadeias de caracteres se referem a uma pessoa ou usuário específico do seu aplicativo. Por exemplo, alguns sites mostram mensagens como "Bob commented on his post" para que você precise de cadeias de caracteres para um sexo masculino, feminino e não-binário ou desconhecido:

Bom:

"{0} commented on his post"
"{0} commented on her post"
"{0} commented on their post"

Não reutilizar cadeias de caracteres

Ou, mais precisamente, não reutilize cadeias de caracteres apenas porque elas são semelhantes quando a própria cadeia de caracteres tem um propósito ou significado diferente.

Por exemplo: imagine que você tem um interruptor liga/desliga em seu aplicativo e o controle de interruptor precisa que o texto para 'ligar' e 'desligar' seja localizado. Você também exibe o valor dessa configuração em outro lugar do aplicativo em um rótulo de texto. Você deve usar cadeias de caracteres diferentes para a exibição do switch versus o status do switch (mesmo que sejam a mesma cadeia de caracteres no idioma padrão) – por exemplo:

  • "Ligado" – exibido no próprio interruptor
  • "Off" – exibido no próprio interruptor
  • "Ligado" – exibido em um rótulo
  • "Desativado" – exibido em um rótulo

Isso proporciona a máxima flexibilidade para o tradutor:

  • Por razões de design, talvez o próprio interruptor use letras minúsculas "on" e "off", mas a etiqueta de exibição usa maiúsculas "On" e "Off".
  • Alguns idiomas podem precisar que o valor do switch seja abreviado para caber no controle da interface do usuário, enquanto a palavra completa (traduzida) pode aparecer no rótulo.
  • Como alternativa, para alguns idiomas, a renderização do seu switch pode ser usar "I" e "O" para familiaridade cultural, mas você ainda pode querer que o rótulo leia "On" ou "Off".

Serviços de Tradução

Tradução automática

Para criar recursos de tradução em seu aplicativo, considere a API de Texto do Azure Translator.

Para fins de teste, você pode usar uma das muitas ferramentas de tradução online para incluir algum texto localizado em seu aplicativo durante o desenvolvimento:

Há muitos outros disponíveis. A qualidade da tradução automática geralmente não é considerada boa o suficiente para lançar um aplicativo sem antes ser revisada e testada por tradutores profissionais ou falantes nativos.

Tradução profissional

Há também serviços de tradução profissionais que pegarão suas cordas e as distribuirão para seus próprios tradutores, fornecendo-lhe traduções concluídas por uma taxa.

Um dos serviços mais conhecidos é o LionBridge. A maioria dos serviços profissionais suporta todos os tipos de arquivos comuns, incluindo strings, XML, RESX e POT/PO.

Resumo

Este artigo apresentou alguns dos conceitos com os quais você deve estar familiarizado antes de internacionalizar seu aplicativo e, em seguida, localizar seus recursos, e também abordou como alterar as preferências de idioma para cada plataforma.

Esses conceitos podem ser aplicados às várias técnicas de internacionalização de plataforma específica e multiplataforma que são possíveis com o Xamarin.

Continue lendo detalhes técnicos da plataforma que você está interessado: