Normalmente, eu corro aptitude -y install locales
, em seguida, dpkg-reconfigure locales
para configurar localidade.
Agora eu quero colocá-lo em um script de shell, como posso fazer o seguinte com segurança, de forma automática / não interativa?
- Escolha
en_US.UTF-8
e defina-o como padrão do sistema - Desativar todos os outros locais
- (Opcional) Verifique se
/etc/default/locale
contém uma entrada únicaLANG=en_US.UTF-8
como esperado
File "/usr/share/apt-listchanges/ALChacks.py", line 32, in <module> sys.stderr.write(_("Can't set locale; make sure $LC_* and $LANG are correct!\n"))
...locale-gen --purge en_GB.UTF-8
uma instalação limpa, obtém uma saída inesperada:Generating locales (this might take a while)... en_US.UTF-8... done Generation complete.
Alguma idéia de como definir a lista de códigos de idioma como você faz no código de configuração do dpkg-reconfigure de maneira não interativa?Não foi possível obter a resposta acima para o trabalho. Em vez disso, eu uso este método (para Dockerfiles):
fonte
en_GB.UTF-8
o código de idioma configurado no CircleCI - essa era a melhor resposta que estava funcionando. Esperando que, devido a esse comentário, o Google possa mostrar isso como relevante quando as pessoas tentam procurar o problema que eu estava tendo.Para reconfigurar o fuso horário e as localidades de maneira não interativa, de dentro de um script, aqui está o que funciona para mim (no Debian):
Para configurar o fuso horário, primeiro crio '/ etc / localtime' como um link para o arquivo zoneinfo apropriado no diretório '/ usr / share / zoneinfo'. Então, eu executo o comando dpkg-reconfigure e tudo será colocado no lugar. Por exemplo, para configurar o fuso horário 'Europa / Bruxelas':
(Observe que AREA é um subdiretório em '/ usr / share / info' e ZONE é um arquivo no subdiretório AREA).
Para configurar as localidades, primeiro executo um script sed que criará uma nova cópia do arquivo '/etc/locale.gen', com base no conteúdo do arquivo '/ usr / share / i18n / SUPPORTED'. Todas as linhas do arquivo de entrada serão copiadas, mas serão transformadas em comentários, a menos que seja uma entrada de uma localidade UTF-8 para um idioma que eu desejo disponibilizar no meu sistema (por exemplo, inglês, holandês, francês, e alemão):
Em seguida, defino o código de idioma do ambiente padrão no banco de dados debconf, por exemplo, para inglês britânico :
Posteriormente, removo o arquivo '/ etc / default / locale' existente (apenas para garantir que seu conteúdo antigo não interfira nas minhas novas configurações) e execute o comando dpkg-reconfigure para gerar todos os códigos de idioma que o script sed selecionou e para criar um novo arquivo '/ etc / default / locale' com apenas uma entrada para definir a variável 'LANG' como o local do ambiente padrão selecionado:
Então, dependendo dos meus requisitos, talvez eu queira executar alguns comandos update-locale , para substituir, por exemplo, as variáveis que afetam a formatação dos valores e configurá-los para um local diferente (como o inglês irlandês ):
(Eu poderia ter especificado todos esses parâmetros em uma única chamada do comando update-locale , mas, aparentemente, a ordem na qual as entradas são gravadas no arquivo '/ etc / default / locale' é imprevisível se eu fizer isso. prefiro que eles sempre estejam na mesma ordem, e é por isso que eu os gero um a um.)
E, finalmente, convém executar o comando update-locale uma última vez, para configurar a variável LANGUAGE (ou seja, a lista de idiomas nos quais desejo que as mensagens de texto traduzíveis sejam exibidas):
Junte tudo isso em um script bash e poderá reconfigurar facilmente suas configurações de localidade com uma simples execução do script, o que não exigirá nenhuma interação adicional do usuário.
Na minha experiência, no entanto, as novas configurações não serão totalmente ativadas até que você reinicie o sistema duas vezes (pelo menos no Debian Jessie Xfce). Após a primeira reinicialização, o gerenciador de login aceitará as novas configurações, mas após o login, sua sessão de usuário continuará usando as configurações antigas; depois da segunda reinicialização, sua sessão do usuário também fará as novas configurações.
fonte
Baseado no bom trabalho da resposta de @ EirikW. Específico para um
Dockerfile
:fonte
Para mim, foi necessário definir os 3 ENV-Vars adicionais:
No entanto, obrigado a ErikWs por sua resposta: ( https://serverfault.com/a/689947 )
fonte