FreeToGenerate.com

Analise o cabeçalho e rode os dois algoritmos padrão. Nada é enviado.

O pedido e o que você tem

Separe por vírgulas ou espaços. São seus próprios arquivos ou traduções: as tags com que você realmente responderia.

O que cada algoritmo responde

Lookup: uma única tag

en

Basic Filtering: um conjunto

fr

Os dois algoritmos discordam nesta entrada.

Não é defeito de nenhum dos dois. A RFC 4647 define ambos, e eles buscam em direções opostas — então o que o seu framework usa decide o que essa pessoa vê.

O que o Lookup tentou

en-us → en

O Lookup corta o intervalo pedido pela direita até algo coincidir. Repare que uma subtag de um único caractere no fim é removida junto com a anterior, de modo que um passo como zh-Hant-CN-x nunca é tentado: essa regra vem do exemplo resolvido impresso na própria especificação.

O cabeçalho analisado

Intervaloq
en-us1
fr0.8

Um valor de qualidade zero é uma recusa, não uma preferência fraca. Um cabeçalho que nomeia um idioma com q=0 está pedindo que você não o sirva, então aqui qualquer tag que só coincida com um intervalo recusado fica fora das duas respostas. Intervalos sem q valem 1, e valores iguais mantêm a ordem do cabeçalho, já que a especificação não oferece outro critério de desempate.

Com que frequência discordam

combinações medidas
119
discordâncias
14
só o Lookup coincidiu
8
só o Filtering coincidiu
6

Medido sobre 7 conjuntos realistas de tags disponíveis contra 17 intervalos realistas: divergem em 14 de 119 combinações. A forma importa mais que a taxa. Em 8 delas só o Lookup achou algo, porque ele encurta o pedido — então en-US chega ao seu en simples. Em 6 só o Filtering achou, porque ele amplia o pedido — então en chega ao seu en-GB. Em nenhuma os dois coincidiram e escolheram coisas diferentes. Os dois esquemas cobrem direções opostas do desencontro, e nenhum cobre as duas.

Os dois algoritmos vêm da RFC 4647; as regras dos valores de qualidade, da RFC 9110. Nada é enviado: a comparação acontece nesta aba.

Também disponível em: English · Español · Français · العربية

Analisador do cabeçalho Accept-Language

Veja qual dos seus idiomas o cabeçalho Accept-Language de um navegador seleciona — e por que os dois algoritmos padrão podem escolher idiomas diferentes.

O que é o cabeçalho Accept-Language

Accept-Language é o campo que o navegador envia em cada requisição para dizer em quais idiomas quem o usa preferiria ler. Ele carrega uma lista de intervalos de idioma, cada um com um valor de qualidade opcional entre 0 e 1, do mais preferido para o menos. Um cabeçalho típico é en-US,fr;q=0.8: essa pessoa quer inglês americano e aceita francês com menos entusiasmo.

O cabeçalho é um pedido, não uma ordem. Ele diz o que o visitante gostaria, mas não tem como saber o que você tem. Transformá-lo numa resposta de verdade significa comparar esses intervalos com o conjunto de idiomas que você realmente consegue servir, e é aí que mora o interesse, porque existe mais de uma forma padronizada de fazer isso e elas nem sempre concordam.

Esta ferramenta faz as duas metades. Ela analisa o cabeçalho segundo as regras de valores de qualidade da RFC 9110 e depois roda os dois esquemas de correspondência definidos pela RFC 4647 — Lookup e Basic Filtering — contra as tags que você declarar, mostrando as duas respostas lado a lado.

Como usar

  1. Cole o cabeçalho. Copie o valor dos logs do seu servidor, das ferramentas de desenvolvedor do navegador ou da requisição que você está depurando. Os intervalos aparecem numa tabela, ordenados por valor de qualidade e com o padrão 1 já preenchido onde o cabeçalho o omite.
  2. Liste os idiomas que você pode servir. Digite as tags para as quais você realmente tem arquivos ou traduções, separadas por vírgulas ou espaços: en, fr, de. São as tags com que você responderia, não as que o visitante pediu.
  3. Leia as duas respostas. O Lookup devolve uma tag; o Basic Filtering devolve um conjunto. Quando divergem, a página avisa, e a cadeia de recortes abaixo mostra cada passo que o Lookup tentou até chegar à resposta.

Os dois algoritmos falham em direções opostas

A RFC 4647 define os dois esquemas sobre o mesmo cabeçalho, e a diferença não é questão de rigor. O Lookup encurta o pedido pela direita até algo coincidir, então quem pede en-US recebe o seu en simples. O Basic Filtering faz o contrário: um intervalo coincide com qualquer tag da qual seja prefixo numa fronteira de subtag, então quem pede en recebe o seu en-GB.

Medido sobre 7 conjuntos realistas de tags disponíveis contra 17 intervalos realistas — 119 combinações — os dois divergem em 14, ou seja 11,8%. A taxa importa menos que a forma. Em 8 dessas 14 só o Lookup achou alguma coisa, e em 6 só o Filtering achou. Não houve um único caso em que ambos coincidissem e escolhessem tags diferentes.

Os dois esquemas, portanto, não disputam as mesmas respostas. Cada um cobre uma direção do desencontro que o outro não enxerga, e nenhum cobre as duas. Se o seu framework usa Lookup, você falha em silêncio com os visitantes cujo pedido é menos específico que os seus arquivos; se usa Filtering, falha com aqueles cujo pedido é mais específico. Saber qual deles está rodando é o ponto central, e a maioria das pilhas não conta.

A regra de encurtamento também tem uma armadilha, e a especificação a imprime. Reduzir zh-Hant-CN-x-private1-private2 dá zh-Hant-CN-x-private1 e em seguida direto zh-Hant-CN, nunca zh-Hant-CN-x, porque uma subtag de um único caractere no fim é removida junto com a anterior. A cadeia desta página reproduz esse exemplo resolvido passo a passo.

O que o cabeçalho não consegue dizer

Um valor de qualidade zero é uma recusa, não uma preferência fraca. Um cabeçalho que nomeia um idioma com q=0 está pedindo que você não o sirva, o que é diferente de simplesmente deixá-lo de fora. Esta ferramenta exclui das duas respostas qualquer tag que só coincida com um intervalo recusado; um comparador que trate q=0 como a menor pontuação vai servir alegremente justamente o idioma que o visitante recusou de forma explícita.

Valores de qualidade iguais não têm critério de desempate na especificação, então a ordem do próprio cabeçalho é o único sinal que sobra, e é o que esta página usa. Vale saber que isso é convenção e não regra, e que outra implementação pode ordená-los de outro jeito com toda razão.

De modo mais amplo, o cabeçalho descreve uma preferência e não um fato. Normalmente é a lista de idiomas do sistema operacional, e não uma escolha deliberada; não diz nada sobre o idioma do conteúdo que o visitante veio procurar; e é trivial de forjar. Serve bem como padrão e mal como sobreposição: se alguém clicou num seletor de idioma, esse clique deve vencer e deve ser lembrado em lugar mais firme que um palpite sobre o navegador.

Uma coisa que esta página não faz é se comparar com uma implementação de referência, e vale explicar por quê. A API Intl executa o Lookup com localeMatcher em lookup, mas contra os idiomas disponíveis do próprio ambiente de execução, e não contra um conjunto que você forneça — ou seja, responde a outra pergunta. No lugar dela, o vetor de teste é o exemplo resolvido impresso na especificação.

Por que é grátis?

Tudo roda no seu navegador. Analisar um cabeçalho e comparar textos não custa nada quando é a sua própria máquina que faz, então não há servidor a pagar nem motivo para pedir qualquer coisa a você.

Nada do que você digita é enviado, guardado ou registrado: cabeçalhos tirados de logs de produção podem identificar uma pessoa, e a maneira segura de lidar com isso é não recebê-los. Não há conta, cadastro nem limite de quantos você pode verificar.