Por que recebo um “erro: Entrada incorreta 'en_US'” ao gerar localidades?

1

O código fala mais alto que palavras:

root@myhost # locale-gen
Generating locales (this might take a while)...

(pulando um pouco aqui)

error: Bad entry 'en_GB '
  en_GB.UTF-8... done

(pulando um pouco aqui)

  en_SG.UTF-8... done
error: Bad entry 'en_US '
  en_US.ISO-8859-1... done
  en_US.UTF-8... done
error: Bad entry 'en_US.iso88591 '
error: Bad entry 'en_US.iso885915 '
  en_ZA.UTF-8... done

(pulando um pouco aqui)

Generation complete.

Por que estou recebendo esses erros e como posso evitá-los?

Notas:

  • Eu uso o Linux Mint 18.2, mas isso começou a acontecer em algum momento no (near?) passado com o Mint 18.1. Ambos são baseados no Ubuntu 16.04, eu acho.
  • Ainda não encontrei arquivos com essas "entradas incorretas" (com ou sem o espaço extra no final) em /etc ; especificamente não /etc/locale.gen .

Informações adicionais:

Conteúdos relevantes de /etc/locale.gen :

# grep -v "#" /etc/locale.gen | sed "s/$/+/" | grep "en_"
en_GB.UTF-8 UTF-8+
en_US ISO-8859-1+
en_US.UTF-8 UTF-8+
    
por einpoklum 04.07.2017 / 12:14

2 respostas

2

locale-gen é um script (não muito bem escrito) bash . Esse erro é relatado por:

is_entry_ok() {
  if [ -n "$locale" -a -n "$charset" ] ; then
    true
  else
    echo "error: Bad entry '$locale $charset'"
    false
  fi
}

Então, aqui o problema é que $charset está vazio.

A lista de localidades a serem geradas é compilada de /etc/locale.gen e todos os arquivos em /var/lib/locales/supported.d .

Possivelmente, um dos arquivos contenha en_US sozinho sem o nome de um conjunto de caracteres.

Como o /etc/locale.gen não tem en_SG.UTF-8 , você provavelmente tem arquivos em /var/lib/locale/supported.d e provavelmente são os que têm linhas malformadas. Depois de identificar o culpado, você pode usar dpkg -S em seu caminho para ver de qual pacote veio, se houver.

    
por 04.07.2017 / 13:07
1

Edit: essa solução alternativa provavelmente não é a melhor solução; mas funciona.

Com base na resposta do @StephaneChazelas, descobri que o problema é com /var/lib/locales/supported.d/mintlocale - um arquivo específico para minha distribuição, o Linux Mint. É gerada incorretamente, sem campos de conjuntos de caracteres para a maioria (nem todas) das linhas, por exemplo:

en_GB
en_GB.iso88591
en_GB.UTF-8 UTF-8

(pulando)

en_US
en_US.iso88591
en_US.iso885915
en_US.UTF-8 UTF-8

Então, o que eu preciso fazer é gerar o segundo campo para tudo. Aqui está o que eu fiz, basicamente:

sed -i -r '/^[a-zA-Z_]*$/d' mintlocale
sed -i -r 's/.([^. ]+)$/. /' mintlocale
sed -i -r 's/ iso8859([0-9]+)$/ISO-8859-/' mintlocale

então, removendo as linhas sem um sufixo .charset, replicando o sufixo .charset após um espaço e alterando a formatação do conjunto de caracteres ISO 8859 para corresponder ao que temos em /usr/shared/i18n/charmaps/ (caso contrário, obteríamos outros erros). / p>

Finalmente, eu corri novamente o locale-gen e não houve erros.

Observação: não tenho 100% de certeza sobre a remoção das linhas sem caracteres, então comentários sobre isso são bem-vindos.

    
por 04.07.2017 / 22:57

Tags