5 pontos por GN⁺ 2025-05-20 | 1 comentários | Compartilhar no WhatsApp
  • Configuração de idioma baseada em IP é um recurso baseado em uma premissa errada
  • O endereço IP só informa a localização e não reflete a preferência real de idioma do usuário
  • O cabeçalho Accept-Language transmite com precisão as informações de preferência de idioma
  • O idioma da interface deve ser definido com base em um sinal confiável, como o cabeçalho do navegador
  • O princípio mais importante é respeitar a liberdade de escolha do idioma e a experiência do usuário

Limites da configuração de idioma inferida por IP

  • Ainda é uma suposição equivocada decidir o idioma de uso com base em geolocalização por IP (GeoIP)
  • O endereço IP fornece apenas informação de localização da requisição
  • Não permite saber qual idioma o usuário realmente prefere ou entende
  • Isso falha com frequência em situações como VPN, viagens internacionais, moradia no exterior ou países com múltiplos idiomas oficiais
  • Essa abordagem não é inteligente; ela gera incômodo e confusão

A distância entre a quantidade de idiomas oficiais e a realidade

  • Países e informações de IP não têm uma relação 1:1 com idioma
    • Belgium tem 3, Switzerland tem 4, India tem 22 e Canada tem oficialmente 2, sendo na prática um país multilíngue
  • O usuário pode morar nesse país, estar visitando-o ou simplesmente ter seu tráfego roteado por ele por acaso
  • Forçar a exibição de um único idioma de UI com base apenas em informação de país é uma atitude errada

Exemplo de engenharia mal feita

  • Depender de dados errados é uma forma preguiçosa de desenvolver
  • A desculpa de que “grandes sites também fazem assim” não é válida
  • Se não for possível tratar isso de forma correta, é melhor não fazer nada

O valor do cabeçalho Accept-Language

  • Muitos usuários passam por desconforto por terem um novo idioma imposto, inclusive por causa do uso de VPN
  • Todos os navegadores enviam o cabeçalho Accept-Language
    • A preferência de idioma é definida pelas configurações do sistema operacional ou do navegador do usuário
    • Se quiser, o próprio usuário pode definir ou alterar esse valor
    • Exemplo: Accept-Language: en-US,en;q=0.9,de;q=0.8
  • Esse cabeçalho é uma informação precisa, gratuita e já embutida, sem necessidade de licença ou manutenção extra

A forma correta de lidar com idioma

  • Assim como resolução de tela ou cor, o idioma também deve respeitar o ambiente do usuário
  • É comum acontecerem definições absurdas, como mostrar inglês para um usuário de inglês na França, neerlandês para um francófono em Bruxelas ou chinês para quem usa VPN de Hong Kong
  • Isso gera reclamações, abandono do serviço e tentativas de solução improvisada depois de explorar a UI
  • Esses erros acontecem porque se usa dados de IP não confiáveis como base para decidir o idioma

Soluções práticas

  • Ler o Accept-Language
  • Respeitar esse valor
  • Permitir que o usuário altere o idioma manualmente, se quiser (a opção pode ser salva em cookie ou parâmetro de URL)
  • Usar informações de GeoIP apenas para moeda, entrega e aspectos legais, e nunca para idioma

Conclusão

  • Se o software é feito para pessoas, ele não deve adivinhar a preferência do usuário
  • O ideal é implementar isso corretamente ou simplesmente não oferecer um recurso de definição automática de idioma

1 comentários

 
GN⁺ 2025-05-20
Comentários do Hacker News
  • Acho realmente irritante quando sites ignoram o cabeçalho Accept-Language. Sites multilíngues muitas vezes traduzem até o botão de troca de idioma ou a lista de idiomas para o idioma atual, o que gera confusão; nesse ponto, acho que a Wikipédia é o exemplo padrão a ser seguido. A Wikipédia usa um ícone multilíngue claro, uma lista com o nome de cada idioma no próprio idioma e, no topo, mostra idiomas recomendados. Não se deve tentar adivinhar o idioma de antemão. Fazer como a Wikipédia ajuda

    • Odeio quando entro na página que queria por um mecanismo de busca, aí aparece um modal pedindo para escolher o país e, depois que escolho, sou forçado a ir para a página inicial do site local. Alguns sites têm botão de fechar (X), mas muitos nem isso, o que é bem irritante

    • A lista de idiomas da Wikipédia não parece ser necessariamente "em ordem alfabética". Por exemplo, às vezes idiomas recomendados como "中文" e "Italiano" aparecem no topo, e o restante parece agrupado por região geográfica ou sistema de escrita. Mesmo que não siga a ordem alfabética "verdadeira" de cada idioma, a Wikipédia faz bem a localização. O ponto importante é que a ideia de uma ordem alfabética "correta" fica complicada quando os nomes dos idiomas são mostrados em cada idioma

    • A Wikipédia lembra o idioma que o usuário escolheu anteriormente e o mostra no topo. Isso sim é oferecer uma experiência de usuário de verdade

    • Já aconteceu de o app do YouTube mudar de repente para amárico. A documentação de suporte do Google dizia onde ficava o botão de English, mas isso não ajudava em nada para quem não entende amárico. Nem o app de tradução do iPhone reconhecia esse idioma. Se houvesse apenas um ícone multilíngue universal, seria fácil resolver situações assim

    • Ironicamente, até o Universal Language Selector (U.S.L) no fim usa principalmente a informação de país baseada no IP do usuário para definir os idiomas recomendados. Muitas vezes esse método não é preciso. Segundo o FAQ do U.S.L, ele determina primeiro o país de origem pelo IP e depois recomenda os principais idiomas candidatos

  • Não gosto de designs que assumem que todo mundo usa só um idioma. Eu consigo ler bem em quatro idiomas e normalmente prefiro o original à tradução. A previsão de idioma por IP erra com muita frequência. Eu já defini meus idiomas suportados, então o correto seria respeitar isso. No YouTube, a dublagem automática por IA vem ativada por padrão, e eu fico ouvindo pela metade, voltando e desligando de novo. Não leva tanto tempo, mas é uma experiência realmente irritante

    • A dublagem por IA do YouTube é de péssima qualidade. Levei uns 5 minutos para perceber, por pouco, que a voz do vídeo era o áudio principal. Também odeio quando o título do vídeo é traduzido. Estou vendo um vídeo em inglês, mas o título aparece em outro idioma aleatório

    • Mesmo configurando o Google para usar espanhol, o YouTube traduz tudo automaticamente para inglês. Quero ver conteúdo no idioma original para melhorar meu espanhol, mas o YouTube faz isso parecer difícil

  • No YouTube, a função que traduz automaticamente os títulos dos vídeos para o meu idioma configurado é realmente irritante. Se eu entendo inglês, não vejo por que precisaria dessa tradução

    • Se eu não consigo entender o idioma em que algo foi escrito, é bem provável que esse vídeo originalmente não fosse para mim. A maioria dos vídeos com alcance internacional já é disponibilizada em inglês, então, se o autor quisesse, provavelmente já teria traduzido. Além disso, título de vídeo tem pouco contexto, então nem dá para traduzir direito. Uma vez vi um vídeo em português com o título "Vamos assistir uma conexão com o passado", que na verdade era "Let's play A Link to the Past". Para descobrir o título em inglês, eu tive que retraduzir e deduzir. Esse tipo de recurso pode até melhorar a acessibilidade, mas pelo menos deveria haver uma opção para desativar

    • O algoritmo do YouTube talvez incentive esse tipo de recurso e até recompense isso em nome da acessibilidade do conteúdo, mas eu prefiro um título em inglês a um título feio em norueguês traduzido por máquina. Na minha experiência, quando aparecem esses títulos traduzidos por máquina, eu configuro para não receber recomendações daquele canal

    • Meu computador é alemão, mas está configurado em inglês. Mesmo assim, o YouTube me faz ouvir vozes traduzidas por máquina ou traduz de forma estranha vídeos e anúncios em alemão para inglês. Muitas vezes fica realmente esquisito e artificial

    • O problema não é só o título, mas também a tradução da faixa de áudio. Quando um youtuber que acompanho oferece faixas de áudio feitas por fãs em vários idiomas, eu sempre preciso voltar manualmente para o original. Com tradução por máquina, trocadilhos e nuances culturais costumam se perder. Às vezes, para trocar a faixa de idioma, é preciso voltar ao começo do vídeo, e ainda há conflitos com extensões do navegador. Seria bom ter uma interface em que essas traduções não fossem o padrão e pudessem ser ativadas livremente

    • Agora o Google, Kagi e outros também mostram resultados do Reddit traduzidos. Achei que a resposta que eu procurava tivesse sido escrita no meu idioma, mas na verdade era um post em inglês traduzido por máquina

  • Acima de tudo, deve-se evitar em qualquer caso aplicar tradução automática como padrão. Basta mostrar de forma clara a lista de idiomas realmente traduzidos. O botão de traduzir já existe no navegador, então o usuário pode aplicar por conta própria. Inglês não é minha primeira nem minha segunda língua, mas eu leio bem. Quero evitar o trabalho de procurar o botão do original em inglês no meio de um monte de tradução automática. Em outros locais isso é raro; curiosamente, esse problema aparece muito mais com inglês. Se forem usar tradução automática, acho que deveriam ao menos testar de verdade para ver se a intenção e o resultado batem

    • O Reddit me mostra conteúdo traduzido automaticamente para francês, mas o estilo próprio do Reddit é quase impossível de passar até com tradução humana. Mesmo que alguém não saiba nada de inglês, essas versões automáticas dificilmente valem a leitura. Também é difícil encontrar a opção de ver o original ou mudar o idioma, dependendo do dispositivo ou do app, e além disso o Reddit vive insistindo para que você instale o aplicativo

    • A tradução automática melhorou bastante nos últimos anos, a ponto de até nativos às vezes não perceberem que se trata de tradução

  • O que mais me incomoda é o Google. O Google já sabe quem eu sou, se estou viajando e qual é meu idioma preferido (inglês), e mesmo assim em algumas páginas continua mostrando o idioma com base na região. Já que o Google usa minhas informações para me rastrear, eu queria que usasse mais disso para melhorar a experiência do usuário

    • Sou usuário de catalão, mas o espanhol nunca esteve registrado na minha conta Google nem como idioma do sistema/navegador, e ainda assim sempre aparece à força. Mesmo morando nos EUA, quando pesquiso coisas relacionadas à Catalunha o Google prioriza a Wikipédia em espanhol. Esse comportamento dos mecanismos de busca sempre foi ruim. É um problema tanto para quem não fala espanhol, como meus filhos, quanto para regiões catalanófonas fora da Espanha. Em especial, o Google Gemini trata conteúdo em catalão como perigoso e bloqueia a conversa. O Google antes parecia realmente sensível à diversidade, mas agora não mais

    • Recentemente o Google deixou de traduzir para inglês coisas como avaliações no Maps e simplesmente as mostra no idioma local. Parece assumir que, como passei bastante tempo naquele país, então devo conhecer o idioma, mas muitas vezes eu realmente preciso do inglês. O mesmo vale para resultados de busca. Usar o idioma local muitas vezes é só uma forma de pesquisar sobre a situação local, mas o Google não consegue refletir bem esse padrão de uso

    • Já discuti isso diretamente com um desenvolvedor do Google. Ele disse que, por causa do processo de renderização dupla, o Google ainda não consegue usar as informações do usuário na página principal para refletir a preferência de idioma, mas eu não acho que isso faça sentido, porque o cabeçalho Accept-Language já está incluído na requisição inicial

    • O Google sabe que eu moro no Reino Unido e falo inglês. Ainda assim, se eu faço login na TV de um hotel na Espanha e assisto vídeos do YouTube em inglês, ele me mostra anúncios em espanhol. Parece que faz isso só para agradar o anunciante, mesmo sabendo que é um idioma que eu não entendo

    • Sempre que uso um dispositivo ou navegador novo, o Google e seus serviços começam em hebraico. Eu vivo mudando para inglês, mas tenho que fazer isso toda vez, e embora eu consiga ler hebraico, prefiro o inglês por ser um idioma mais universal

  • Todos os navegadores podem enviar o cabeçalho Accept-Language para informar os idiomas preferidos do usuário, e, se tiver interesse, o próprio usuário pode editá-lo. Mas o Accept-Language não resolve tudo, porque a maioria dos usuários multilíngues não tem uma ordem absoluta de preferência, e sim preferências por tema. Por exemplo, alguém pode ser fluente em francês e ainda assim não querer uma tradução para francês de notícias originalmente em inglês. Quem mantém o site não precisa forçar funcionalidades complexas; basta oferecer uma interface clara e rápida para troca de idioma. A Wikipédia faz isso bem

    • Na prática, mais importante do que funções como Accept-Language é oferecer tradução bem-feita em vez de tradução automática meia-boca. Para a interface e o conteúdo próprio, vale a pena manter traduções oficiais; já o conteúdo gerado por usuários deveria ser exposto de forma opcional, por meio do botão de tradução do navegador, e não por tradução automática obrigatória. Recomendo usar o Accept-Language para escolher o idioma inicial e também oferecer uma opção clara de troca de idioma. Na Wikipédia, cada versão em um idioma é praticamente um site separado, com conteúdo reescrito de forma independente

    • O Accept-Language também permite definir pesos por idioma (q value). Os sites deveriam permitir que o usuário sobrescrevesse os idiomas pedidos pelo navegador, e o próprio navegador deveria oferecer opções por site como "padrão do site", "idioma do sistema" ou "solicitar inglês". O ideal seria o site publicar claramente a lista de idiomas suportados em algo como manifest.json, e o cliente cuidar da seleção do idioma

    • A premissa de que o usuário configura o Accept-Language com o idioma que de fato lhe é mais conveniente é fraca. Como a maioria dos sites não dá suporte adequado a Accept-Language, é improvável que o usuário faça essa configuração de forma muito estratégica

  • Em um site governamental, implementei um sistema de idioma padrão com Accept-Language para dar suporte multilíngue e acessibilidade. Mas o PM ignorou essa decisão e fixou EN (inglês) como padrão. O auditor de acessibilidade exigiu o uso de Accept-Language e, ao descobrir que a implementação tinha sido desfeita, criticou isso duramente. No fim, esse tipo de absurdo acabou me rendendo mais algumas semanas de contrato

  • Também quero falar do meu próprio problema com idiomas. Tenho familiares que só falam japonês no Apple TV. O país da minha conta Apple é Finlândia. Queria ver The Martian com a família, mas como o sistema só mostra nas faixas de áudio os idiomas suportados no país da conta, não foi possível escolher a dublagem em japonês. Não dá para mudar o país da conta enquanto há uma assinatura ativa do Apple TV. No fim, não conseguimos assistir juntos

    • Imagino que isso aconteça por questões de licenciamento por região. A dublagem nesse idioma provavelmente não está licenciada para uso na Finlândia

    • A Netflix já teve algo parecido. Na Finlândia, era preciso configurar o idioma da conta em inglês para conseguir assistir Kim's Convenience. Mesmo querendo usar legendas em inglês, se a interface estivesse em finlandês o acesso ao conteúdo em si não era possível

  • Já desenvolvi eu mesmo um sistema que, com base no Accept-Language, oferecia a tradução mais próxima disponível para facilitar o acesso do usuário. Por exemplo, se não houvesse português de Portugal, ele entregava automaticamente português do Brasil. Tecnicamente funcionava bem e foi divertido de implementar, mas na prática a maioria dos usuários queria só inglês, independentemente do Accept-Language, e a opção de troca de idioma, embora estivesse no rodapé, não tinha visibilidade suficiente. Então agora passei a perguntar diretamente ao usuário, e a satisfação aumentou bastante

    • Perguntar diretamente quer dizer que, sempre que a pessoa entra no site sem cookie salvo, aparece obrigatoriamente um pop-up para escolher idioma? Esse tipo de pop-up é inconsistente, e a gente já agradece quando ao menos existe um botão X. Em 95 de 100 casos, se eu cliquei para entrar naquele idioma, isso já basta; se precisar, oferecer a escolha de idioma no canto superior direito ou no rodapé já é conveniente. Preferia não ter pop-ups nem modais

    • É melhor usar Accept-Language como padrão e, além disso, dar opção de escolha ao usuário. Concordo em remover ícones do design de troca de idioma, mas acho uma pena agrupar várias regiões dentro de um único idioma

    • A maioria dos usuários simplesmente mantém o idioma padrão do sistema operacional, nem sabe como mudar isso e já se acostumou

  • No exterior esse problema é realmente absurdo, e até no próprio país versões localizadas, como documentação de programação, às vezes têm conteúdo diferente e qualidade de tradução pior. O ideal é poder ver o original em inglês. Ultimamente, resultados de busca também estão trazendo cada vez mais traduções automáticas. O Reddit também adotou isso recentemente. Se eu uso uma busca em um idioma que não é inglês, é porque quero encontrar informação própria daquele idioma

    • Parece que a equipe do Reddit criou essa funcionalidade presumindo apenas usuários monolíngues do próprio país. No mundo todo, muita gente entende vários idiomas, então isso não era necessário

    • Já fiquei furioso com a troca automática por idioma na documentação do MongoDB. No resultado de busca aparecia em inglês, mas assim que eu abria a página o JS mudava tudo para português do Brasil. Só que, quando carregava completamente, voltava para inglês, enquanto a URL continuava em /pt-br/. Além disso, a qualidade da tradução tinha toda a cara de algo automatizado. Eu sou usuário de português de Portugal, então essas diferenças sutis me incomodam ainda mais