Partilhar via


Tornar seu aplicativo localizável

Um aplicativo localizado é aquele que pode ser localizado para outros mercados, idiomas ou regiões sem descobrir nenhum defeito funcional no aplicativo. A propriedade mais essencial de um aplicativo localizável é que seu código executável foi separado dos seus recursos localizáveis. Portanto, você deve determinar quais recursos do seu aplicativo precisam ser localizados. Pergunte a si mesmo o que precisa mudar se seu aplicativo for localizado para outros mercados.

Também recomendamos que você se familiarize com as diretrizes para a globalização.

Colocar suas strings em Arquivos de Recursos (.resw)

Não codifique literais de cadeia de caracteres em seu código imperativo, marcação XAML, nem no manifesto do pacote do aplicativo. Em vez disso, coloque suas cadeias de caracteres em Arquivos de Recursos (.resw) para que elas possam ser adaptadas a diferentes mercados locais, independentemente dos binários criados do seu aplicativo. Para obter mais detalhes, confira Localizar as cadeias de caracteres em sua interface do usuário e o manifesto do pacote do aplicativo.

Esse tópico também mostra como adicionar comentários ao seu arquivo de recursos padrão (.resw). Por exemplo, se você estiver adotando uma voz ou tom informal, certifique-se de explicar isso nos comentários. Além disso, para minimizar as despesas, confirme se apenas as strings que precisam ser traduzidas são fornecidas aos tradutores.

Defina o idioma padrão do aplicativo adequadamente no arquivo de origem do manifesto do pacote do aplicativo (o Package.appxmanifest arquivo). O idioma padrão determina o idioma usado quando os idiomas preferidos do usuário não correspondem a nenhum dos idiomas compatíveis do seu aplicativo. Marque todos os seus recursos com o idioma deles (mesmo aqueles em seu idioma padrão, por exemplo \Assets\en-us\Logo.png) para que o sistema possa dizer em qual idioma o recurso está e como ele é usado em situações específicas.

Personalize suas imagens e outros recursos de arquivo para o idioma

Idealmente, você será capaz de globalizar suas imagens - ou seja, torná-las independentes da cultura. Para quaisquer imagens e outros recursos de arquivo em que isso não seja possível, crie quantas variantes diferentes forem necessárias e coloque os qualificadores de idioma apropriados em seus nomes de arquivo ou pasta. Para saber mais, consulte Personalizar seus recursos para idioma, escala, alto contraste e outros qualificadores.

Para minimizar os custos de localização, não coloque texto nem material culturalmente sensível nas imagens. Uma imagem apropriada em sua própria cultura pode ser ofensiva ou mal interpretada em outras culturas. Evite o uso de imagens específicas da cultura, como caixas de correio, que não são comuns em todo o mundo. Evite símbolos religiosos, animais, imagens políticas ou específicas de gênero. A exibição de carne, partes do corpo ou gestos com as mãos também pode ser um assunto delicado. Se você não puder evitar tudo isso, suas imagens precisarão ser cuidadosamente localizadas. Se você estiver localizando para um idioma com uma direção de leitura diferente da sua, o uso de imagens e efeitos simétricos facilitará o suporte ao espelhamento.

Evite também o uso de texto em imagens e fala em arquivos de áudio/vídeo.

O uso de cores em seu aplicativo

Esteja atento ao usar cores. O uso de combinações de cores associadas a bandeiras nacionais ou movimentos políticos pode ser problemático. As escolhas de cores podem precisar ser revisadas por especialistas em cultura. Há também problemas de acessibilidade com o uso de cores. Se você usar cores para transmitir significado, também deverá transmitir essas mesmas informações por outros meios, como tamanho, forma ou rótulo.

Considere fatorar suas strings em frases

Use cadeias de caracteres de tamanho apropriado. Cadeias de caracteres curtas são mais fáceis de traduzir e permitem a reciclagem de tradução (o que economiza despesas porque a mesma cadeia de caracteres não é enviada ao localizador mais de uma vez). Além disso, cadeias de caracteres extremamente longas podem não ser suportadas por ferramentas de localização.

Mas em tensão com essa diretriz está o risco de reutilizar uma string em diferentes contextos. Mesmo palavras simples como "on" e "off" podem ser traduzidas de forma diferente, dependendo do contexto. No idioma inglês, "on" e "off" podem ser usados para alternar entre o modo de voo, Bluetooth e dispositivos. Mas em italiano, a tradução depende do contexto do que está sendo ativado e desativado. Você precisaria criar um par de cadeias de caracteres para cada contexto. Você pode reutilizar cadeias de caracteres se os dois contextos forem iguais. Por exemplo, você pode reutilizar a string "Volume" para o volume do efeito sonoro e o volume da música, pois ambos se referem à intensidade do som. Você não deve reutilizar essa mesma cadeia de caracteres ao se referir a um volume de disco rígido porque o contexto e o significado são diferentes e a palavra pode ser traduzida de forma diferente.

Além disso, uma string como "texto" ou "fax" pode ser usada como verbo e substantivo no idioma inglês, o que pode confundir o processo de tradução. Em vez disso, crie uma string separada para o formato de verbo e substantivo. Quando você não tiver certeza se os contextos são os mesmos, erre pelo lado seguro e use uma cadeia de caracteres distinta.

Resumindo, fatore suas strings em partes que funcionem em todos os contextos. Haverá casos em que uma string precisará ser uma frase inteira.

Considere a seguinte cadeia de caracteres: "Não {0} foi possível sincronizar".

Uma variedade de palavras pode substituir {0}, como "compromisso", "tarefa" ou "documento". Embora este exemplo funcione para o idioma inglês, ele não funcionará em todos os casos para a frase correspondente em, por exemplo, alemão. Observe que nas seguintes frases em alemão, algumas das palavras na string de predefinição ("Der", "Die", "Das") precisam corresponder à palavra parametrizada:

Português do Brasil Alemão
O compromisso não pôde ser sincronizado. Der Termin konnte nicht synchronisiert werden.
A tarefa não pôde ser sincronizada. Die Aufgabe konnte nicht synchronisiert werden.
O documento não pôde ser sincronizado. Das Dokument konnte nicht synchronisiert werden.

Como outro exemplo, considere a frase "Lembre-me em {0} minuto(s)". Usar "minuto(s)" funciona para o idioma inglês, mas outros idiomas podem usar termos diferentes. Por exemplo, a língua polonesa usa "minuta", "minuty" ou "minut" dependendo do contexto.

Para resolver esse problema, localize a frase inteira, em vez de uma única palavra. Fazer isso pode parecer um trabalho extra e uma solução deselegante, mas é a melhor solução porque:

  • Uma mensagem gramaticalmente correta será exibida para todos os idiomas.
  • Seu tradutor não precisará perguntar sobre o que as strings serão substituídas.
  • Você não precisará implementar uma correção de código dispendiosa quando um problema como esse surgir após a conclusão do aplicativo.

Outras considerações para cadeias de caracteres

Evite coloquialismos e metáforas nas cadeias de caracteres que você cria em seu idioma padrão. A linguagem específica de um grupo demográfico, como cultura e idade, pode ser difícil de entender ou traduzir porque apenas as pessoas desse grupo demográfico usam essa linguagem. Da mesma forma, as metáforas podem fazer sentido para uma pessoa, mas não significam nada para outra. Por exemplo, um "pássaro azul" significa algo específico para aqueles que fazem parte da cultura do esqui, mas aqueles que não fazem parte dessa cultura não entendem a referência.

Não use jargão técnico, abreviações ou siglas. A linguagem técnica tem menos probabilidade de ser compreendida por públicos não técnicos ou pessoas de outras culturas ou regiões, e é difícil de traduzir. As pessoas não usam esse tipo de palavra nas conversas do dia a dia. A linguagem técnica geralmente aparece em mensagens de erro para identificar problemas de hardware e software, mas você deve ser técnico apenas se o usuário precisar desse nível de informação e puder acioná-lo ou encontrar alguém que possa.

Usar uma voz ou tom informal em suas cordas é uma escolha válida. Você pode usar comentários em seu arquivo de recursos padrão (.resw) para indicar essa intenção.

Pseudo-localização

Pseudolocalize seu aplicativo para descobrir quaisquer problemas de localização. A pseudo-localização é um tipo de teste de localização ou teste de divulgação. Você produz um conjunto de recursos que não são realmente traduzidos; eles só parecem assim. Suas cadeias de caracteres são aproximadamente 40% mais longas do que no idioma padrão, por exemplo, e têm delimitadores para que você possa ver rapidamente se elas foram truncadas na interface do usuário.

Considerações de implantação

Ao instalar um aplicativo que contém dados de idioma localizados, você pode descobrir que apenas o idioma padrão está disponível para o aplicativo, mesmo que você tenha incluído inicialmente recursos para vários idiomas. Isso ocorre porque o processo de instalação é otimizado para instalar apenas recursos de idioma que correspondam ao idioma e à cultura atuais do dispositivo. Portanto, se o dispositivo estiver configurado para en-US, somente os recursos de idioma en-US serão instalados com seu aplicativo.

Observação

Não é possível instalar suporte a idiomas adicionais para seu aplicativo após a instalação inicial. Se você alterar o idioma padrão depois de instalar um aplicativo, o aplicativo continuará a usar apenas os recursos de idioma originais.

Se você quiser garantir que todos os recursos de idioma estejam disponíveis após a instalação, crie um arquivo de configuração para o pacote do aplicativo que especifique que determinados recursos são necessários durante a instalação (incluindo recursos de idioma). Esse recurso de instalação otimizado é habilitado automaticamente quando o .appxbundle do aplicativo é gerado durante o empacotamento. Para obter mais informações, consulte Garantir que os recursos sejam instalados em um dispositivo, independentemente de um dispositivo exigir ou não.

Opcionalmente, para garantir que todos os recursos sejam instalados (não apenas um subconjunto), você pode desabilitar a geração de .appxbundle ao empacotar seu aplicativo. No entanto, isso não é recomendado, pois pode aumentar o tempo de instalação do seu aplicativo.

Desative a geração automática do .appxbundle definindo o atributo "Generate App Bundle" como "never":

  1. No Visual Studio, clique com o botão direito do mouse no nome do projeto
  2. Selecione Loja ->Criar pacotes de aplicativos...
  3. Na caixa de diálogo Criar Seus Pacotes, selecione Desejo criar pacotes para carregar na Microsoft Store usando um novo nome de aplicativo e clique em Avançar.
  4. Na caixa de diálogo Selecionar um nome de aplicativo, selecione/crie um nome de aplicativo para seu pacote.
  5. Na caixa de diálogo Selecionar e Configurar Pacotes, defina Gerar pacote de aplicativos como Nunca.

Consciência geopolítica

Evite ofensas políticas em mapas ou ao se referir a regiões. Os mapas podem incluir fronteiras regionais ou nacionais controversas e são uma fonte frequente de ofensas políticas. Tenha cuidado para que qualquer interface do usuário usada para selecionar uma nação se refira a ela como um "país/região". Listar um território disputado em uma lista rotulada como "países" - como em um formulário de endereço - pode ofender alguns usuários.

Eventos alterados de idioma e região

Assine eventos gerados quando as configurações de idioma e região do sistema são alteradas. Faça isso para que você possa recarregar os recursos, se apropriado. Para obter detalhes, consulte Atualizando cadeias de caracteres em resposta a eventos de alteração de valor de qualificador e Atualizando imagens em resposta a eventos de alteração de valor de qualificador.

Garantir a ordem correta dos parâmetros ao formatar cadeias de caracteres

Não presuma que todas as linguagens expressam parâmetros na mesma ordem. Por exemplo, considere este formato.

    string.Format("Every {0} {1}", monthName, dayNumber); // For example, "Every April 1".

A cadeia de caracteres de formato neste exemplo funciona para inglês (Estados Unidos). Mas não é apropriado para alemão (Alemanha), por exemplo, onde o dia e o mês são exibidos na ordem inversa. Certifique-se de que o tradutor conheça a intenção de cada um dos parâmetros para que ele possa inverter a ordem dos itens de formato na cadeia de caracteres de formato (por exemplo, "{1}{0}") conforme apropriado para o idioma de destino.

Não localize demais

Envie linguagem natural apenas para tradutores; nem linguagem de programação nem marcação. Uma <link> tag não é linguagem natural. Considere estes exemplos.

Não localize isso Localize esta opção
<Link>Termos de Uso</Link> Termos de Uso
<link>política< de privacidade/link> política de privacidade

Incluir a <link> tag em seu arquivo de recursos (.resw) significa que ela também provavelmente será traduzida. Isso tornaria a tag inválida. Se você tiver strings longas que precisam incluir marcação para manter o contexto e garantir a ordenação, deixe claro nos comentários o que não traduzir.

Escolha uma abordagem de tradução apropriada

Depois que as cadeias de caracteres são separadas em arquivos de recurso, elas podem ser traduzidas. O momento ideal para traduzir strings é depois que as strings em seu projeto são finalizadas, o que geralmente acontece no final de um projeto. Você pode abordar o processo de tradução de várias maneiras. Isso pode depender do volume de strings a serem traduzidas, do número de idiomas a serem traduzidos e de como a tradução será feita (como internamente versus contratar um fornecedor externo).

Considere essas opções.

  • Os arquivos de recurso podem ser traduzidos abrindo-os diretamente no projeto. Essa abordagem funciona bem para um projeto que tem um pequeno volume de strings que precisam ser traduzidas para dois ou três idiomas. Pode ser adequado para um cenário em que um desenvolvedor fala mais de um idioma e está disposto a lidar com o processo de tradução. Essa abordagem se beneficia por ser rápida, não requer ferramentas e minimiza o risco de traduções incorretas. Mas não é escalável. Em particular, os recursos em diferentes idiomas podem facilmente ficar fora de sincronia, causando experiências ruins para o usuário e dores de cabeça de manutenção.
  • Os arquivos de recurso de cadeia de caracteres estão no formato de texto XML ou ResJSON, portanto, podem ser entregues para tradução usando qualquer editor de texto. Os arquivos traduzidos seriam copiados de volta para o projeto. Essa abordagem traz o risco de os tradutores editarem acidentalmente as marcas XML, mas permite que o trabalho de tradução ocorra fora do projeto do Microsoft Visual Studio. Essa abordagem pode funcionar bem para projetos que precisam ser traduzidos para um pequeno número de idiomas. O formato XLIFF é um formato XML projetado especificamente para uso em localização e deve ser bem suportado por alguns fornecedores de localização ou ferramentas de localização. Você pode usar o Kit de Ferramentas de Aplicativo Multilíngue para gerar arquivos XLIFF de outros arquivos de recurso, como .resw ou .resjson.

Observação

A localização também pode ser necessária para outros ativos, incluindo imagens e arquivos de áudio.

Você também deve considerar o seguinte:

  • Ferramentas de localização Várias ferramentas de localização estão disponíveis para analisar arquivos de recursos e permitir que apenas as strings traduzíveis sejam editadas por tradutores. Essa abordagem reduz o risco de um tradutor editar acidentalmente as marcas XML. Mas tem a desvantagem de introduzir uma nova ferramenta e processo no processo de localização. Uma ferramenta de localização é boa para projetos com um grande volume de strings, mas um pequeno número de idiomas. Para saber mais, consulte Como usar o Kit de Ferramentas de Aplicativo Multilíngue.
  • Fornecedores de localização Considere usar um fornecedor de localização se seu aplicativo contiver cadeias de caracteres extensas que precisam ser traduzidas para um grande número de idiomas. Um fornecedor de localização pode dar conselhos sobre ferramentas e processos, bem como traduzir seus arquivos de recursos. Essa é uma solução ideal, mas também é a opção mais cara e pode aumentar o tempo de resposta do seu conteúdo traduzido.

Mantenha as chaves de acesso e os rótulos consistentes

É um desafio "sincronizar" as teclas de acesso usadas na acessibilidade com a exibição das chaves de acesso localizadas, pois os dois recursos de cadeia de caracteres são categorizados em duas seções separadas. Certifique-se de fornecer comentários para a cadeia de caracteres do rótulo, como: Make sure that the emphasized shortcut key is synchronized with the access key.

Suporte furigana para strings japonesas que podem ser classificadas

Os caracteres kanji japoneses têm a propriedade de ter mais de uma leitura (pronúncia) dependendo da palavra em que são usados. Isso leva a problemas quando você tenta classificar objetos nomeados em japonês, como nomes de aplicativos, arquivos, músicas e assim por diante. Os kanjis japoneses, no passado, geralmente eram classificados em uma ordem compreensível por máquina chamada XJIS. Infelizmente, como essa ordem de classificação não é fonética, não é muito útil para humanos.

Furigana contorna esse problema permitindo que o usuário ou criador especifique a fonética dos caracteres que está usando. Se você usar o procedimento a seguir para adicionar furigana ao nome do aplicativo, poderá garantir que ele seja classificado no local apropriado na lista de aplicativos. Se o nome do aplicativo contiver caracteres kanji e furigana não for fornecido quando o idioma da interface do usuário ou a ordem de classificação estiver definida como japonês, o Windows fará o possível para gerar a pronúncia apropriada. No entanto, existe a possibilidade de nomes de aplicativos contendo leituras raras ou exclusivas serem classificados em uma leitura mais comum. Portanto, a prática recomendada para aplicativos japoneses (especialmente aqueles que contêm caracteres kanji em seus nomes) é fornecer uma versão furigana do nome do aplicativo como parte do processo de localização em japonês.

  1. Adicione "ms-resource:Appname" como o Nome de Exibição do Pacote e o Nome de Exibição do Aplicativo.

  2. Crie uma pasta ja-JP em strings e adicione dois arquivos de recurso da seguinte maneira:

    strings\
        en-us\
        ja-jp\
            Resources.altform-msft-phonetic.resw
            Resources.resw
    
  3. Em Resources.resw para ja-JP geral: Adicione um recurso de cadeia de caracteres para Appname "希蒼"

  4. Em Resources.altform-msft-phonetic.resw para recursos de furigana japoneses: Adicione o valor de furigana para AppName "のあ"

O usuário pode pesquisar o nome do aplicativo "希蒼" usando o valor furigana "のあ" (noa) e o valor fonético (usando a função GetPhonetic do Editor de Método de Entrada (IME)) "まれあお" (mare-ao).

A classificação segue o formato do Painel de Controle Regional:

  • Em uma localidade de usuário japonês,
    • Se furigana estiver habilitado, então "希蒼" é classificado em "の".
    • Se furigana estiver faltando, então "希蒼" é classificado em "ま".
  • Em uma localidade de usuário não japonesa,
    • Se furigana estiver habilitado, então "希蒼" é classificado em "の".
    • Se furigana estiver faltando, então "希蒼" é classificado em "漢字".

Amostras