Como devo definir o idioma do conteúdo em minha página em HTML?
Sempre use um atributo de idioma na tag
html
para declarar o idioma padrão do texto na página. Quando a página
contiver conteúdos em outro idioma, adicione um atributo de idioma a um
elemento que cerque tal conteúdo.
Use o atributo lang
para páginas
apresentadas como HTML, e o atributo xml:lang
para páginas apresentadas como XML. Para documentos poliglotas em XHTML 1.x e
HTML5, use os dois juntos.
Use as tags de idiomas listadas no Registro de Subtags de Idiomas IANA. Você consegue localizar subtags por meio da ferramenta não oficial Pesquisa de Subtag de Idioma.
Use elementos agrupados para lidar com conteúdos e valores de atributos no mesmo elemento que estejam em idiomas distintos.
Sempre use um atributo de idioma no elemento
html
. Este será herdado por todos os demais elementos, desse modo
definindo o idioma padrão do texto no elemento
head
do documento.
Observe que você deve usar o elemento
html
em lugar do elemento body
,
pois o elemento body
não engloba o
texto dentro do elemento head
do
documento.
Se você tiver algum conteúdo na página que esteja em um idioma diferente
no declarado no elemento html
, use
atributos de idiomas nos elementos em torno desse conteúdo. Isso permite que
você defina seu estilo ou o processe de forma diferente.
Em algumas partes de seu código, você poderá encontrar um problema. Se
você tiver textos em diversos idiomas no elemento
title
, não poderá sinalizar partes do texto para idiomas distintos,
pois o atributo title
permite apenas
caracteres – não sinalizações. O mesmo se aplica para múltiplos idiomas em
valores de atributos. Até este momento, não há uma boa solução para isso.
Se seu documento for em HTML (ou seja, disponibilizado como
text/html
), use o atributo lang
para definir o idioma de um documento ou de um trecho de texto. Por exemplo,
os seguintes atributos definem o idioma padrão como francês:
Ao disponibilizar páginas em XHTML 1.x ou poliglotas como
text/html
, use os atributos lang
e xml:lang
em conjunto todas as vezes que
quiser definir o idioma. O atributo xml:lang
é a forma padrão de identificar informações sobre o idioma em XML.
Assegure-se de que os valores de ambos os atributos sejam idênticos.
O atributo xml:lang
não é
realmente útil para trabalhar o arquivo como HTML, mas assume o comando do
atributo lang
todas as vezes em que
você processa ou disponibiliza o documento como XML. O uso do atributo
lang
é permitido pela sintaxe do XHTML, podendo ser também
reconhecido por navegadores. Entretanto, ao se usar outros analisadores XML
(como a função lang()
em XSLT), não
se pode confiar que o atributo lang
será reconhecido.
Se você for disponibilizar sua página como XML (ou seja, usando um tipo
de MIME como application/xhtml+xml
),
não precisará do atributo lang
.
Apenas o atributo xml:lang
já bastará.
Pode acontecer de o idioma do texto em um atributo e o conteúdo do
elemento estarem em idiomas diferentes. Por exemplo, no canto direito
superior deste artigo há links para versões traduzidas desta página. O link
exibe o idioma da página de destino usando o idioma da página de destino,
mas um atributo title
associado
contém uma alusão no idioma da página atual:
Se seu código tiver a aparência a seguir, os atributos de idioma iriam na
verdade indicar que não apenas o conteúdo, mas também o texto do atributo
title
está em espanhol. Isso está obviamente incorreto.
Em vez disso, mova o atributo que contém texto em um idioma diferente
para outro elemento, como mostrado neste exemplo, em que o elemento
span
herda a configuração padrão en
do elemento html
.
Se você deseja especificar o idioma de algum conteúdo, mas não há
marcação alguma em torno dele, use um elemento como
span
ou div
em torno do
conteúdo. Eis um exemplo:
Para se certificar de que todos os agentes de usuário reconheçam o idioma a que você se refere, é preciso seguir uma abordagem padronizada ao atribuir valores de atributo de idioma. Você também precisa levar em conta como se referir de forma padronizada às diferenças dialetais em um idioma; como, por exemplo, as diferenças entre o inglês estadunidense e o britânico, que apresentam diferenças significativas de grafia e pronúncia.
As regras para criação de valores de atributo de idioma são descritas por
uma especificação IETF chamada
BCP 47. Além de especificar como usar tags de
idioma simples, como en
para
inglês ou fr
para francês, a BCP 47
descreve como compor tags de idiomas que lhe permitam especificar dialetos
regionais, alfabetos e outras variantes relacionadas àquele idioma.
A BCP 47 agrega todas as regras e vai além, trazendo a norma ISO para conjuntos de idiomas e códigos de países. Para localizar códigos específicos, você deve consultar o Registro de Subtags de Idiomas IANA.
Para uma introdução breve, ainda que abrangente, à sintaxe das tags BCP 47, leia Tags de idioma em HTML e XML. Para obter ajuda na escolha da tag de idioma correta dentre as inúmeras tags e combinações possíveis, veja Escolhendo uma tag de idioma.
Se você desejar criar metadados que descrevam o idioma do público alvo de
uma página, em vez do idioma de um trecho de texto específico, consiga isso
fazendo com que o servidor envie informações no cabeçalho HTTP
Content-Language
. Se você pretende que o público alvo fale mais de
um idioma, o cabeçalho HTTP permite que você use uma lista de idiomas
separados por vírgula.
Eis aqui um exemplo de um cabeçalho HTTP que declara que a fonte é uma mistura de inglês, hindi e punjabi:
Observe que essa abordagem não será eficaz se sua página for acessada em um disco rígido, disco ou outra localização fora do servidor. Atualmente, não há um modo amplamente reconhecido de se usar esse tipo de metadado dentro de uma página.
No passado, muitas pessoas usavam um elemento
meta
com o atributo http-equiv
definido como Content-Language
.
Devido a antigas confusões e aplicações inconsistentes deste elemento, a
especificação do HTML5 removeu a sua conformidade em HTML, de forma que não
é mais possível utilizá-lo.
Para compatibilidade com versões anteriores, o HTML5 descreve um
algoritmo pelo qual o idioma padrão do conteúdo pode ser estimado a partir
do HTTP ou da informação meta
Content-Language
sob certas condições. Isso, no entanto, é apenas um
mecanismo de suporte para os casos em que nenhum atributo de idioma tenha
sido usado na tag html
. Se você
utilizou o atributo de idioma na tag html
, como sempre deve ser, tal suporte será irrelevante.
Para informações sobre Content-Language
em HTTP e em elementos meta
, veja
HTTP e meta para informação de idioma.
À guisa de informação extra, e apenas para que nada deixe de ser mencionado, talvez valha a pena mencionar alguns outros pontos que não são relevantes para essa discussão.
Em primeiro lugar, não é possível declarar o idioma de um texto usando CSS.
Em segundo lugar, o DOCTYPE
que
deve iniciar qualquer arquivo HTML pode conter o que para algumas pessoas
parece ser uma declaração de idioma. O
DOCTYPE
no exemplo abaixo contém o texto EN, que significa 'Inglês'.
Isso, contudo, indica o idioma do esquema associado a esse
documento, não tendo nada a ver com o idioma do documento em si.
Em terceiro lugar, as pessoas algumas vezes supõem que informações sobre o idioma natural podem ser deduzidas a partir da codificação de caracteres. A codificação dos caracteres, contudo, não possibilita uma identificação inequívoca de um idioma natural: seria necessário que houvesse uma identificação individual entre codificação e idioma para que essa dedução funcionasse, o que não há. Por exemplo, uma única codificação de caractere poderia ser usada para diversos idiomas; por exemplo, Latin 1 (ISO-8859-1) poderia codificar tanto francês como inglês, bem como uma imensa quantidade de outros idiomas. Além disso, a codificação de caractere pode variar para um único idioma. Árabe, por exemplo, poderia usar codificações como 'Windows-1256', 'ISO-8859-6' ou 'UTF-8'.
Todos esses exemplos de codificação, contudo, são atualmente irrelevantes, visto que todo conteúdo deve ser criado em UTF-8, que cobre até mesmo os idiomas mais raros com uma única codificação de caractere.
O mesmo vale para a direção do texto. Como ocorre com codificação e
idioma, nem sempre há uma correspondência exclusiva entre idioma e script e,
portanto, direcionalidade. O azerbaijanês, por exemplo, pode ser escrito
tanto da direita para a esquerda (árabe) como da esquerda para a direita
(latim ou cirílico), e o código de idioma az
pode ser relevante para ambas as opções. Além disso, a marcação de direção
do texto utilizada com texto alinhado aplica uma diversidade de valores
distintos ao texto, no qual o idioma é uma simples chave que não está à
altura das tarefas necessárias.
Primeiros passos? Idiomas na Web
Tutorial, Trabalhando com idiomas em HTML
Links relacionados, Criando em HTML e CSS