Noções básicas sobre idiomas de perfil de usuário e idiomas de manifesto do app

Um usuário do Windows pode usar oidioma Da Região & da Linguagem> deTempo &de Configurações> para configurar uma lista ordenada de idiomas de exibição preferenciais ou apenas um único idioma de exibição preferencial. Um idioma pode ter uma variante regional. Por exemplo, você pode selecionar o espanhol falado na Espanha, o espanhol falado no México, o espanhol falado nos Estados Unidos, entre outros.

Também noidioma Da Região & da Linguagem> doTempo &de Configurações>, mas separado do idioma, o usuário pode especificar sua localização (conhecida como região) no mundo. Observe que a configuração do idioma de exibição (e a variante regional) não é determinante da configuração de região, e vice-versa. Por exemplo, um usuário pode estar vivendo atualmente na França, mas escolher como idioma de exibição preferencial do Windows o espanhol (México).

Para aplicativos do Windows, um idioma é representado como uma marca de idioma BCP-47. Por exemplo, a marca de idioma BCP-47 "en-US" corresponde ao inglês (Estados Unidos) em Configurações. ApIs de Windows Runtime apropriadas aceitam e retornam representações de cadeia de caracteres de marcas de idioma BCP-47.

Veja também o Registro da submarca de idioma IANA.

As três seções a seguir definem os termos "lista de idiomas do perfil do usuário", "lista de idiomas de manifesto do app" e "lista de idiomas de tempo de execução do aplicativo". Vamos usar esses termos neste tópico e em outros tópicos nessa área de recurso, por isso, é importante saber o que significam.

Lista de idiomas do perfil do usuário

A lista de idiomas de perfil do usuário é o nome da lista configurada pelo usuário em Idiomas daRegião &> do Idioma > doTempo &deConfigurações>. No código, você pode usar a propriedade GlobalizationPreferences.Languages para acessar a lista de idiomas do perfil do usuário como lista somente de leitura de cadeias de caracteres, em que cada cadeia é uma única marca de idioma BCP-47, como "en-US" ou "ja-JP".

    IReadOnlyList<string> userLanguages = Windows.System.UserProfile.GlobalizationPreferences.Languages;

Lista de idiomas de manifesto do app

A lista de idiomas de manifesto do app é a lista de idiomas para os quais o seu app declara (ou irá declarar) suporte. Essa lista cresce à medida que você progride no app pelo ciclo de vida de desenvolvimento até a localização.

A lista é determinada no tempo de compilação, mas você tem duas opções de controlar exatamente como isso acontece. Uma opção é permitir que o Visual Studio determine a lista entre os arquivos no seu projeto. Para fazer isso, primeiro defina o Idioma padrão do seu app na guia Aplicativo no seu arquivo de origem do manifesto do pacote do aplicativo(Package.appxmanifest). Em seguida, confirme se o mesmo arquivo contém essa configuração (que ocorre por padrão).

  <Resources>
    <Resource Language="x-generate" />
  </Resources>

Cada vez que o Visual Studio gera seu arquivo de manifesto do pacote do app (AppxManifest.xml), ele expande esse único elemento Resource do arquivo de origem em uma união de todos os qualificadores de idiomas encontrados no seu projeto (veja Personalizar os recursos de acordo com idioma, escala, alto contraste e outros qualificadores). Por exemplo, se você já começou a localização e possui cadeia de caracteres, imagem e/ou recursos de arquivo cujos nomes de pastas ou arquivos incluem "en-US", "ja-JP" e "fr-FR", seu arquivo AppxManifest.xml criado conterá o seguinte (a primeira entrada na lista é o idioma padrão que você definir).

  <Resources>
    <Resource Language="EN-US" />
    <Resource Language="JA-JP" />
    <Resource Language="FR-FR" />
  </Resources>

A outra opção é substituir o único elemento "x-generate" <Resource> em seu arquivo de origem do manifesto do pacote do aplicativo (Package.appxmanifest) pela lista expandida de elementos <Resource> (tendo o cuidado de listar o idioma padrão primeiro). Essa opção envolve mais trabalho de manutenção, mas pode ser uma opção apropriada para você se você usa um sistema de compilação personalizado.

Em primeiro lugar, sua lista de idiomas de manifesto do app conterá somente um idioma. Talvez seja en-US. Mas, eventualmente, como você configura manualmente seu manifesto ou à medida que adiciona recursos traduzidos ao seu projeto, essa lista aumentará.

Quando seu app está na Microsoft Store, os idiomas na lista de idiomas de manifesto do app são os exibidos aos clientes. Para uma lista de marcas de idioma BCP-47 com suporte, especificamente, pela Microsoft Store, consulte Idiomas com suporte.

No código, você pode usar a propriedade ApplicationLanguages.ManifestLanguages para acessar a lista de idiomas de manifesto do app como lista somente de leitura de cadeias de caracteres, em que cada cadeia é uma única marca de idioma BCP-47.

    IReadOnlyList<string> userLanguages = Windows.Globalization.ApplicationLanguages.ManifestLanguages;

Lista de idiomas de tempo de execução do app

A lista de interesse do terceiro idioma é a interseção entre as duas listas que acabamos de descrever. No tempo de execução, a lista de idiomas para os quais o app tiver declarado suporte (a lista de idiomas de manifesto do app) é comparada à lista de idiomas para o qual o usuário declarou preferência (a lista de idiomas do perfil do usuário). A lista de idiomas de tempo de execução do app é definida para essa interseção (se a intersecção não estiver vazia), ou apenas para o idioma padrão do app (se a intersecção estiver vazia).

Mais especificamente, a lista de idiomas do tempo de execução do app é composta por esses itens.

  1. Substituição do Idioma Principal (Opcional). A PrimaryLanguageOverride é uma configuração de substituição simples para aplicativos que permitirão aos usuários fazer sua própria escolha de idioma independente ou para aplicativos que, por motivos realmente importantes, substituirão as opções de idioma padrão. Para obter mais informações, consulte o Exemplo de recursos e localização de aplicativos.
  2. Os idiomas do usuário com suporte pelo aplicativo.. Esta é a lista de idiomas do perfil do usuário filtrada pela lista de idiomas de manifesto do app. Filtrar os idiomas do usuário por aqueles suportados pelo aplicativo mantém a consistência entre os SDKs (software development kits), bibliotecas de classes, pacotes de estrutura dependente e o aplicativo.
  3. Se 1 e 2 estão vazios, o padrão ou o primeiro idioma suportado pelo app.. Se a lista de idiomas do perfil do usuário não contém nenhum idioma com suporte pelo aplicativo, o idioma de tempo de execução do app será o primeiro idioma suportado pelo aplicativo.

No código, você pode usar a propriedade ResourceContext.QualifierValues para acessar a lista de idiomas de tempo de execução do app na forma de cadeia contendo uma lista delimitada por ponto e vírgula de marcas de idioma BCP-47.

    string runtimeLanguages = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().QualifierValues["Language"];

Você também pode acessá-lo como lista somente leitura de cadeias de caracteres, cada um contendo uma única marca de idioma BCP-47. Você pode usar a propriedade ResourceContext.Languages ou ApplicationLanguages.Languages para fazer isso.

    IReadOnlyList<string> runtimeLanguages = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().Languages;

    runtimeLanguages = Windows.Globalization.ApplicationLanguages.Languages;

A lista de idiomas do tempo de execução do app determina os recursos que o Windows carrega no seu app, além do(s) idioma(s) usado(s) para formatar as datas, as horas e os números, além de outros componentes. Consulte Globalize seus formatos data/hora/número.

Observação se o idioma do perfil do usuário e o idioma de manifesto do app são variantes regionais um do outro, a variante regional do usuário é usada como idioma de tempo de execução do app. Por exemplo, se o usuário prefere en-GB e o app der suporte a en-US, o idioma de tempo de execução do app será en-GB. Isso garante que as datas, as horas e os números sejam formatados da maneira mais próxima às expectativas do usuário (en-GB), mas os recursos localizados ainda sejam carregados (devido à correspondência do idioma) no idioma do aplicativo com suporte (en-US).

Qualificar arquivos de recurso com o respectivo idioma

Nomeie seus arquivos de recurso ou suas pastas, com qualificadores de recursos de idiomas. Para aprender mais sobre qualificadores de recursos, consulte Personalizar os recursos de acordo com idioma, escala, alto contraste e outros qualificadores). Um arquivo de recurso pode ser uma imagem (ou outro ativo), ou pode ser um arquivo de contêiner de recursos, como um .resw que contém cadeias de caracteres de texto.

Nota Mesmo os recursos no idioma padrão do aplicativo devem especificar o qualificador de idioma. Por exemplo, se o idioma padrão do aplicativo for inglês (Estados Unidos), qualifique seus ativos como \Assets\Images\en-US\logo.png.

  • O Windows executa correspondências complexas, inclusive entre variantes regionais, como en-US e en-GB. Portanto, inclua a sub-marca da região conforme apropriado. Confira Como o Sistema de Gerenciamento de Recursos faz a correspondência de marcas de idioma.
  • Especifique uma sub-marca de script de idioma no qualificador quando não houver nenhum valor Suppress-Script definido para o idioma. Por exemplo, em vez de zh-CN ou zh-TW, use zh-Hant, zh-Hant-TW ou zh-Hans (para obter mais detalhes, consulte o registro de subtag da linguagem IANA).
  • Para idiomas que têm um único dialeto padrão, não é necessário incluir o qualificador de região. Por exemplo, use ja em vez de ja-JP.
  • Algumas ferramentas e outros componentes como os tradutores automáticos podem encontrar marcas de idioma específicas, como informações de dialetos regionais, que são úteis para entender os dados.

Nem todos os recursos precisam ser localizados

A localização pode não ser necessária para todos os recursos.

  • No mínimo, verifique se todos os recursos existem no idioma padrão.
  • Um subconjunto de alguns recursos pode ser suficiente para uma linguagem intimamente relacionada (localização parcial). Por exemplo, você pode não localizar toda interface do usuário do app para catalão se o seu app tem um conjunto completo de recursos em espanhol. Para usuários que falam catalão e depois espanhol, os recursos que não estão disponíveis em catalão aparecem em espanhol.
  • Alguns recursos podem exigir exceções para idiomas específicos, enquanto a maioria dos outros recursos é mapeada para um recurso comum. Nesse caso, marque o recurso destinado a ser usado para todos os idiomas com a marca de idioma indeterminado 'und'. O Windows interpreta a marca de idioma 'und' como um curinga (semelhante a '*') na medida em que corresponde ao idioma do aplicativo superior após qualquer outra correspondência específica. Por exemplo, se alguns recursos forem diferentes para finlandês, mas o restante dos recursos for o mesmo para todos os idiomas, o recurso do finlandês deverá ser marcado com a marca do idioma finlandês, e o restante deverá ser marcado com 'und'.
  • Para recursos baseados em um script de linguagem, como uma fonte ou altura de texto, use a marca de idioma indeterminado com um script especificado: 'und-script<>'. Por exemplo, para fontes latinas, use und-Latn\\fonts.css e para fontes cirílicas use und-Cryl\\fonts.css.

Defina o cabeçalho da solicitação HTTP Accept-Language

Considere se os serviços Web usados têm a mesma extensão de localização do seu app. As solicitações HTTP feitas de aplicativos do Windows em solicitações web típicas e XMLHttpRequest (XHR) usam o cabeçalho de solicitação HTTP Accept-Language padrão. Por padrão, o cabeçalho HTTP é definido para a lista de idiomas do perfil do usuário. Cada idioma da lista é expandido ainda mais para incluir neutralidades de idioma e pesos (q). Por exemplo, a lista de idiomas de um usuário consistindo em fr-FR e en-US resulta em um cabeçalho da solicitação HTTP Accept-Language de fr-FR, fr, en-US, en ("fr-FR,fr;q=0.8,en-US;q=0.5,en;q=0.3"). Entretanto, se o seu app de condições climáticas (por exemplo) estiver exibindo uma interface do usuário em francês (França), mas o idioma principal do usuário na lista de preferências for alemão, será necessário solicitar o serviço explicitamente em francês (França) para que permaneça consistente com o seu app.

APIs no namespace Windows.Globalization

Normalmente, as APIs no namespace Windows.Globalization usam a lista de idiomas do tempo de execução do app para determinar o idioma. Se nenhum dos idiomas tiver um formato de correspondência, a localidade do usuário será usada. Esta é a mesma localidade usada no relógio do sistema. A localidade do usuário está disponível em Configurações>Idioma da Região &do Idioma > doTempo &Idioma >Adicional data, hora, & configurações> regionaisRegião: Alterar formatos de data, hora ou número. As APIs Windows.Globalization também têm substituições para especificar uma lista de idiomas a ser usada em vez da lista de idiomas do tempo de execução do app.

Usando a classe Idioma, você pode inspecionar detalhes sobre um idioma específico, como o script do idioma, o nome de exibição e o nome nativo.

Use a região geográfica quando adequado

Em Configurações> Idioma daRegião da Linguagem &>> temporalPaís ou região, o usuário pode especificar sua localização no mundo.& Você pode usar essas configurações, em vez do idioma, para escolher o conteúdo a ser exibido para o usuário. Por exemplo, um app de notícias pode exibir como padrão o conteúdo dessa região.

No código, você pode acessar essa configuração usando a propriedade GlobalizationPreferences.HomeGeographicRegion.

Usando a classe GeographicRegion, você pode inspecionar os detalhes sobre uma região específica, como o nome de exibição, o nome nativo e as moedas em uso.

Exemplos

A seguinte tabela contém exemplos do que o usuário veria na sua interface do usuário do app em várias configurações de idioma e região.

Lista de idiomas de manifesto do app Lista de idiomas do perfil do usuário Substituição do idioma principal do aplicativo (opcional) Lista de idiomas de tempo de execução do app O que o usuário vê no aplicativo
Inglês (GB) (padrão); Alemão (Alemanha) Inglês (GB) nenhum Inglês (GB) UI: Inglês (GB)
Datas/horas/números: Inglês (GB)
Alemão (Alemanha) (padrão); Francês (França); Italiano (Itália) Francês (Áustria) nenhum Francês (Áustria) Interface do usuário: Francês (França) (fallback do francês (Áustria))
Datas/horas/números: Francês (Áustria)
Inglês (EUA) (padrão); Francês (França); Inglês (Reino Unido) Inglês (Canadá); Francês (Canadá) nenhum Inglês (Canadá); Francês (Canadá) Interface do usuário: Inglês (EUA) (fallback do inglês (Canadá))
Datas/horas/números: Inglês (Canadá)
Espanhol (Espanha) (padrão); Espanhol (México); Espanhol (América Latina); Português (Brasil) Inglês (EUA) nenhum Espanhol (Espanha) Interface do usuário: Espanhol (Espanha) (usa o padrão visto que nenhum fallback está disponível para inglês)
Datas/horas/números: Espanhol (Espanha)
Catalão (padrão); Espanhol (Espanha); Francês (França) Catalão; Francês (França) nenhum Catalão; Francês (França) Interface do usuário: principalmente o catalão e algum francês (França), porque nem todas as cadeias de caracteres estão em catalão
Datas/horas/números: catalão
Inglês (Reino Unido) (padrão); Francês (França); Alemão (Alemanha) Alemão (Alemanha); Inglês (Reino Unido) Inglês (Reino Unido) (escolhido pelo usuário na interface do usuário do aplicativo) Inglês (Reino Unido); Alemão (Alemanha) Interface do usuário: Inglês (GB) (substituição de idioma)
Datas/Horas/Números: Inglês (GB)

Observação

Para obter uma lista de códigos padrão de país/região usados pela Microsoft, consulte a Lista Oficial de País/Região.

APIs importantes

Exemplos