Como o Sistema de Gerenciamento de Recursos faz a correspondência de tags de idioma

O tópico anterior (Como o Sistema de Gerenciamento de Recursos faz a correspondência dos recursos e os escolhe) analisa a correspondência de qualificador em geral. Este tópico aborda a correspondência de tag de idioma mais detalhadamente.

Introdução

Os recursos com qualificadores de tag de idioma são comparados e pontuados com base na lista de linguagem de tempo de execução do aplicativo. Para obter definições das diferentes listas de idiomas, consulte Compreender os idiomas do perfil do usuário e os idiomas do manifesto do aplicativo. A correspondência com o primeiro idioma em uma lista ocorre antes da correspondência com o segundo idioma em uma lista, mesmo para outras variantes regionais. Por exemplo, um recurso para en-GB é escolhido em vez de um recurso fr-CA se a linguagem de tempo de execução do aplicativo for en-US. Somente se não houver recursos para uma forma de en que um recurso para fr-CA será escolhido (observe que o idioma padrão do aplicativo não pode ser definido para uma forma de en nesse caso).

O mecanismo de pontuação usa dados incluídos no registro de subtags BCP-47 e outras fontes de dados. Ele permite um gradiente de pontuação com diferentes qualidades de correspondência e, quando vários candidatos estão disponíveis, seleciona o candidato com a melhor pontuação correspondente.

Assim, você pode marcar o conteúdo do idioma em termos genéricos, mas ainda pode especificar conteúdo específico quando necessário. Por exemplo, seu aplicativo pode ter muitas cadeias de caracteres em inglês que são comuns aos Estados Unidos, Reino Unido e outras regiões. Marcar essas cadeias de caracteres como "en" (inglês) economiza espaço e sobrecarga de localização. Quando distinções precisam ser feitas, como em uma cadeia de caracteres contendo a palavra "color/colour", as versões dos Estados Unidos e do Reino Unido podem ser marcadas separadamente usando subtags de idioma e região, como "en-US" e "en-GB", respectivamente.

Tags de idioma

Os idiomas são identificados usando tags de idioma BCP-47 normalizadas e bem formadas. Os componentes de subtag são definidos no registro de subtag BCP-47. A estrutura normal para uma tag de idioma BCP-47 consiste em um ou mais dos seguintes elementos de subtag.

  • Subtag de idioma (obrigatório).
  • Subtag de script (que pode ser inferida usando o padrão especificado no registro de subtag).
  • Subtag de região (opcional).
  • Subtag variante (opcional).

Elementos de subtag adicionais podem estar presentes, mas terão um efeito insignificante na correspondência de idioma. Não há intervalos de idiomas definidos usando o curinga (""), por exemplo, "en-".

Correspondência de dois idiomas

Sempre que o Windows compara dois idiomas, isso normalmente é feito dentro do contexto de um processo maior. Pode ser no contexto da avaliação de vários idiomas, como quando o Windows gera a lista de idiomas do aplicativo (consulte Compreender os idiomas do perfil do usuário e os idiomas do manifesto do aplicativo). O Windows faz isso combinando vários idiomas das preferências do usuário com os idiomas especificados no manifesto do aplicativo. A comparação também pode ser no contexto da avaliação da linguagem juntamente com outros qualificadores para um recurso específico. Um exemplo é quando o Windows resolve um determinado recurso de arquivo para um contexto de recurso específico, com a localização inicial do usuário ou a escala atual do dispositivo ou dpi como outros fatores (além do idioma) que são levados em consideração na seleção de recursos.

Quando duas tags de idioma são comparadas, a comparação recebe uma pontuação com base na proximidade da correspondência.

Corresponder a Pontuação Exemplo
Correspondência exata O mais alto en-AU : en-AU
Correspondência de variante (idioma, script, região, variante) en-AU-variant1 : en-AU-variant1-t-ja
Correspondência de região (idioma, script, região) en-AU : en-AU-variant1
Correspondência parcial (idioma, script)
- Correspondência de macrorregião en-AU : en-053
- Correspondência neutra de região en-AU : en
- Correspondência de afinidade ortográfica (compatibilidade limitada) en-AU : en-GB
- Correspondência de região preferida en-AU : en-US
- Correspondência de região en-AU : en-CA
Idioma indeterminado (correspondência de idioma) en-AU : und
Sem correspondência (incompatibilidade de script ou incompatibilidade de tag de idioma principal) O menor en-AU : fr-FR

Correspondência exata

As tags são exatamente iguais (todos os elementos de subtag correspondem). Uma comparação pode ser promovida para esse tipo de correspondência a partir de uma correspondência de variante ou região. Por exemplo, en-US corresponde a en-US.

Correspondência de variante

As tags correspondem às subtags de idioma, script, região e variante, mas diferem em alguns outros aspectos.

Correspondência de região

As tags correspondem às subtags de idioma, script e região, mas diferem em alguns outros aspectos. Por exemplo, de-DE-1996 corresponde a de-DE, e en-US-x-Pirate corresponde a en-US.

Correspondências parciais

As tags correspondem nas subtags de idioma e script, mas diferem na região ou em alguma outra subtag. Por exemplo, en-US corresponde a en, ou en-US corresponde a en-*.

Correspondência de macrorregião

As tags correspondem em subtags de idioma e script; ambas têm subtags de região, e uma delas denota uma macrorregião que engloba a outra região. As subtags de macrorregião são sempre numéricas e derivadas dos códigos de país e de área M.49 da Divisão de Estatísticas das Nações Unidas. Para obter detalhes sobre relacionamentos abrangentes, consulte Composição de macrorregiões geográficas (continentais), sub-regiões geográficas e agrupamentos econômicos e outros agrupamentos selecionados.

Observação Os códigos da ONU para "agrupamentos econômicos" ou "outros agrupamentos" não são compatíveis com BCP-47.

Observação Uma tag com a subtag de macrorregião "001" é considerada equivalente a uma tag de região neutra. Por exemplo, "es-001" e "es" são tratados como sinônimos.

Correspondência neutra por região

As tags correspondem às subtags de idioma e script, e apenas uma tag tem uma tag de região. Uma correspondência pai é preferida em relação a outras correspondências parciais.

Correspondência de afinidade ortográfica

As tags correspondem às subtags de idioma e script, e as subtags de região têm afinidade ortográfica. A afinidade depende de dados mantidos no Windows que definem regiões afins específicas do idioma, por exemplo, "en-IE" e "en-GB".

Correspondência de região preferida

As tags correspondem às subtags de idioma e script, e uma das subtags de região é a subtag de região padrão para o idioma. Por exemplo, "fr-FR" é a região padrão para a subtag "fr". Assim, fr-FR é uma combinação melhor para fr-BE do que fr-CA. Isso depende dos dados mantidos no Windows definindo uma região padrão para cada idioma no qual o Windows está localizado.

Correspondência entre irmãos

As tags correspondem às subtags de idioma e script, e ambas têm subtags de região, mas nenhuma outra relação é definida entre elas. No caso de várias correspondências de irmãos, o último irmão enumerado será o vencedor, na ausência de uma correspondência superior.

Idioma indeterminado

Um recurso pode ser marcado como "und" para indicar que ele corresponde a um idioma. Essa tag também pode ser usada com uma tag de script para filtrar correspondências com base no script. Por exemplo, "und-Latn" corresponderá a uma tag de idioma que use script latino. Consulte abaixo para obter mais detalhes.

Incompatibilidade de script

Quando as tags correspondem apenas na tag de idioma principal, mas não no script, o par é considerado não correspondente e é pontuado abaixo do nível de uma correspondência válida.

Nenhuma correspondência

Subtags de idioma principal incompatíveis são pontuadas abaixo do nível de uma correspondência válida. Por exemplo, zh-Hant não corresponde a zh-Hans.

Exemplos

Um idioma de usuário "zh-Hans-CN" (chinês simplificado (China)) corresponde aos seguintes recursos na ordem de prioridade mostrada. Um X indica que não há correspondência.

Matching for Chinese Simplified (China)

  1. Correspondência exata; 2. e 3. Correspondência de região; 4. Correspondência de pais; 5. Correspondência de irmãos.

Quando uma subtag de idioma tem um valor Suppress-Script definido no registro de subtag BCP-47, ocorre a correspondência, assumindo o valor do código de script suprimido. Por exemplo, en-Latn-US corresponde a en-US. Neste próximo exemplo, o idioma do usuário é "en-AU" (inglês (Austrália)).

Matching for English (Australia)

  1. Correspondência exata; 2. Correspondência de macrorregião; 3. Correspondência de região neutra; 4. Correspondência de afinidade ortográfica; 5. Correspondência de região preferida; 6. Correspondência de irmãos.

Corresponder um idioma a uma lista de idiomas

Às vezes, a correspondência ocorre como parte de um processo maior de correspondência de um único idioma a uma lista de idiomas. Por exemplo, pode haver uma correspondência de um único recurso baseado em idioma com a lista de idiomas de um aplicativo. A pontuação da correspondência é ponderada pela posição do primeiro idioma correspondente na lista. Quanto mais para baixo o idioma estiver na lista, menor será a pontuação.

Quando a lista de idiomas contém duas ou mais variantes regionais com as mesmas subtags de idioma e script, as comparações para a tag de primeiro idioma são pontuadas apenas para correspondências exatas, variantes e correspondências de região. O placar de correspondências parciais é adiado para a última variante regional. Isso permite que os usuários controlem melhor o comportamento correspondente para sua lista de idiomas. O comportamento de correspondência pode incluir permitir que uma correspondência exata para um item secundário na lista seja preferida em vez de uma correspondência parcial para o primeiro item da lista, se houver um terceiro item que corresponda ao idioma e ao script do primeiro. Veja um exemplo.

  • Lista de idiomas (em ordem): "pt-PT" (Português (Portugal)), "en-US" (Inglês (Estados Unidos)), "pt-BR" (Português (Brasil)).
  • Recursos: "en-US", "pt-BR".
  • Recurso com maior pontuação: "en-US".
  • Descrição: a comparação começa com "pt-PT", mas não encontra uma correspondência exata. Devido à presença de "pt-BR" na lista de idiomas do usuário, a correspondência parcial é adiada para a comparação com "pt-BR". A próxima comparação de idioma é "en-US", que tem uma correspondência exata. Assim, o recurso vencedor é "en-US".

OU

  • Lista de idiomas (em ordem): "es-MX" (espanhol (México)), "es-HO" (espanhol (Honduras)).
  • Recursos: "en-ES", "es-HO".
  • Recurso com maior pontuação: "es-HO".

Linguagem indeterminada ("und")

A tag de idioma "und" pode ser usada para especificar um recurso que corresponderá a qualquer idioma na ausência de uma correspondência melhor. Pode ser considerado semelhante ao intervalo de linguagem BCP-47 "" ou "-<script>". Veja um exemplo.

  • Lista de idiomas: "en-US", "zh-Hans-CN".
  • Recursos: "zh-Hans-CN", "und".
  • Recurso com maior pontuação: "und".
  • Descrição: a comparação começa com "en-US", mas não encontra uma correspondência baseada em "en" (parcial ou melhor). Como há um recurso marcado com "und", o algoritmo de correspondência usa isso.

A tag "und" permite que vários idiomas compartilhem um único recurso e permite que idiomas individuais sejam tratados como exceções. Por exemplo.

  • Lista de idiomas: "zh-Hans-CN", "en-US".
  • Recursos: "zh-Hans-CN", "und".
  • Recurso com maior pontuação: "zh-Hans-CN".
  • Descrição: a comparação encontra uma correspondência exata para o primeiro item e, portanto, não verifica o recurso rotulado como "und".

Você pode usar "und" com uma tag de script para filtrar recursos por script. Por exemplo.

  • Lista de idiomas: "ru".
  • Recursos: "und-Latn", "und-Cyrl", "und-Arab".
  • Recurso com a maior pontuação: "und-Cyrl".
  • Descrição: a comparação não encontra uma correspondência para "ru" (parcial ou melhor) e, portanto, corresponde à tag de idioma "und". O valor de script de supressão "Cyrl" associado à tag de idioma "ru" corresponde ao recurso "und-Cyrl".

Afinidade regional ortográfica

Quando duas tags de idioma com diferenças de subtag de região correspondem, pares específicos de regiões podem ter maior afinidade entre si do que com outras. Os únicos grupos afins compatíveis são para inglês ("en"). As subtags de região "PH" (Filipinas) e "LR" (Libéria) têm afinidade ortográfica com a subtag de região "US". Todas as outras subtags de região têm afinidade com a subtag de região "GB" (Reino Unido). Portanto, quando os recursos "en-US" e "en-GB" estiverem disponíveis, uma lista de idiomas "en-HK" (inglês (RAE de Hong Kong)) obterá uma pontuação mais alta com recursos "en-GB" do que com recursos "en-US".

Lidar com idiomas com muitas variantes regionais

Certos idiomas têm grandes comunidades de falantes em diferentes regiões que usam diferentes variantes desse idioma — idiomas como inglês, francês e espanhol, que estão entre os mais frequentemente compatíveis em aplicativos multilíngues. As diferenças regionais podem incluir diferenças na ortografia (por exemplo, "color" versus "colour"), ou diferenças dialetais, como vocabulário (por exemplo, "truck" versus "lorry").

Esses idiomas com variantes regionais significativas apresentam certos desafios ao criar um aplicativo pronto para o mundo: "Quantas variantes regionais diferentes devem ser compatíveis?" "Quais?" "Qual é a maneira mais econômica de gerenciar esses ativos de variantes regionais para meu aplicativo?" Está além do escopo deste tópico responder a todas essas perguntas. No entanto, os mecanismos de correspondência de idioma no Windows fornecem recursos que podem ajudar a lidar com variantes regionais.

Os aplicativos geralmente são compatíveis com apenas uma única variante de idioma. Suponha que um aplicativo tenha recursos para apenas uma variante de inglês que devem ser usados por falantes de inglês, independentemente da região de origem. Nesse caso, a tag "en" sem qualquer subtag de região refletiria essa expectativa. Mas os aplicativos podem ter usado historicamente uma tag como "en-US" que inclui uma subtag de região. Nesse caso, isso também funcionará: o aplicativo usa apenas uma variante de inglês e o Windows lida com a correspondência de um recurso marcado para uma variante regional com uma preferência de idioma do usuário para uma variante regional diferente de maneira apropriada.

No entanto, se duas ou mais variantes regionais forem compatíveis, uma diferença como "en" versus "en-US" pode ter um impacto significativo na experiência do usuário, e torna-se importante considerar quais subtags de região usar.

Suponha que você queira fornecer localizações separadas em francês para o francês usado no Canadá em relação ao francês europeu. Para o francês canadense, "fr-CA" pode ser usado. Para falantes da Europa, a localização usará francês (França), e assim "fr-FR" pode ser usado para isso. Mas e se um determinado usuário for da Bélgica, com uma preferência de idioma de "fr-BE"; quais ele vai receber? A região "BE" é diferente de "FR" e "CA", sugerindo uma correspondência de "uma das regiões" para ambos. No entanto, a França passa a ser a região preferida dos franceses e, portanto, o "fr-FR" será considerado a melhor correspondência neste caso.

Suponha que você tenha localizado seu aplicativo para apenas uma variante de francês, usando cadeias de caracteres de francês (França), mas qualificando-as genericamente como "fr", e você deseja adicionar compatibilidade com francês canadense. Provavelmente, apenas alguns recursos precisam ser retraduzidos para o francês canadense. Você pode continuar usando todos os ativos originais, mantendo-os qualificados como "fr", e basta adicionar o pequeno conjunto de novos ativos usando "fr-CA". Se a preferência de idioma do usuário for "fr-CA", o ativo "fr-CA" terá uma pontuação de correspondência maior do que o ativo "fr". Mas se a preferência de idioma do usuário for para qualquer outra variante de francês, o ativo neutro de região "fr" será uma correspondência melhor do que o ativo "fr-CA".

Como outro exemplo, suponha que você queira fornecer localizações separadas em espanhol para falantes da Espanha e falantes da América Latina. Suponhamos ainda que as traduções para a América Latina foram oferecidas por um fornecedor no México. Você deve usar "es-ES" (Espanha) e "es-MX" (México) para dois conjuntos de recursos? Se o fizesse, isso poderia criar problemas para falantes de outras regiões latino-americanas, como Argentina ou Colômbia, já que eles receberiam os recursos "es-ES". Nesse caso, há uma alternativa melhor: você pode usar uma subtag de macrorregião, "es-419", para refletir que pretende que os ativos sejam usados para falantes de uma parte da América Latina ou do Caribe.

As tags de idioma com neutralidade de região e as subtags de macrorregião podem ser muito eficazes se você quiser oferecer compatibilidade com várias variantes regionais. Para minimizar o número de ativos separados necessários, você pode qualificar um determinado ativo de forma que reflita a cobertura mais ampla para a qual ele é aplicável. Em seguida, complemente um ativo amplamente aplicável com uma variante mais específica, conforme necessário. Um ativo com um qualificador de idioma neutro de região será usado para usuários de uma variante regional, a menos que haja outro ativo com um qualificador mais específico de região que se aplique a esse usuário. Por exemplo, um ativo "en" corresponderá a um usuário em inglês australiano, mas um ativo com "en-053" (inglês usado na Austrália ou Nova Zelândia) será uma correspondência melhor para esse usuário, enquanto um ativo com "en-AU" será a melhor correspondência possível.

O inglês precisa de consideração especial. Se um aplicativo adicionar localização para duas variantes de inglês, elas provavelmente serão para inglês dos EUA e para o Reino Unido, ou inglês "internacional". Como mencionado acima, certas regiões fora dos EUA seguem as convenções de ortografia dos Estados Unidos, e a correspondência de idioma do Windows leva isso em consideração. Nesse cenário, não é recomendável usar a tag de região neutra "en" para uma das variantes; em vez disso, use "en-GB" e "en-US". (No entanto, se um determinado recurso não exigir variantes separadas, "en" poderá ser usado.) Se "en-GB" ou "en-US" for substituído por "en", isso interfere na afinidade regional ortográfica fornecida pelo Windows. Se uma terceira localização em inglês for adicionada, use uma subtag específica ou de macrorregião para as variantes adicionais, conforme necessário (por exemplo, "en-CA", "en-AU" ou "en-053"), mas continue a usar "en-GB" e "en-US".