Como instalar / alterar a localidade no Debian?

65

Eu escrevi um aplicativo Web para o qual a interface do usuário está em holandês. Eu uso as rotinas de data e hora do sistema para formatar seqüências de datas no aplicativo. No entanto, as strings de data que os formatos do sistema estão em inglês, mas eu as quero em holandês, então preciso definir o código do idioma do sistema. Como faço isso no Debian? Eu tentei configurar, LC_ALL=nl_NLmas parece não ter nenhum efeito:

$ date
Sat Aug 15 14:31:31 UTC 2009
$ LC_ALL=nl_NL date
Sat Aug 15 14:31:36 UTC 2009

Lembro que definir LC_ALL no meu sistema de desktop Ubuntu funciona bem. Preciso instalar pacotes extras para fazer isso funcionar ou estou fazendo isso totalmente errado?

Hongli Lai
fonte
existe uma maneira de fazer isso automaticamente com base no endereço IP atribuído do servidor?
Colher
2
Definir Debian Locale a forma padrão : sudo dpkg-reconfigure locales.
Paul Rougieux

Respostas:

72

Edite /etc/default/localee defina o conteúdo para:

LANG="nl_NL.UTF-8"

Você pode verificar quais localidades você gerou atualmente usando:

# locale -a

Você pode gerar mais editando /etc/locale.gene descomentando as linhas dos códigos de idioma que deseja ativar. Então você pode gerá-los executando:

# locale-gen

Você pode encontrar uma lista de locais suportados em /usr/share/i18n/SUPPORTED

Há mais informações disponíveis no wiki do Debian .

David Pashley
fonte
9
/ var / lib / belocs / list não existe. Você precisa editar o /etc/locale.gen ou executar o local do dpkg-reconfigure.
pgs
Marque com +1 esta resposta para descrever a locale-gen, mas conforme o comentário anterior, não existe um arquivo como / var / lib / belocs / list no meu sistema
telent
Levei 5 horas para encontrar essa resposta, que acabou sendo perfeita. Além disso, ele permite criar aliases: en_US UTF-8 e it_IT UFT-8 me permitiram ter minhas localidades em UTF-8 por padrão, o que é ótimo se você tiver código PHP que depende de localidades
Cec
Existe um comando ou pacote que pode editar e definir o conteúdo de / etc / default / locale?
22418 Karl Morrison
Veja a resposta abaixo do Czar. Você pode fazê-lo gosto: -i sed 's / ^ # * (en_US.UTF-8) / \ 1 /' /etc/locale.gen
Tobias Gaertner
66

Pode ser necessário instalar o localespacote. Isso perguntará quais localidades a serem geradas. Se já estiver instalado, dpkg-reconfigure localesvocê poderá gerar mais localidades.

pgs
fonte
Isso gera apenas localidades, não define o padrão do sistema.
David Pashley
16
NÃO, a questão final dos códigos de idioma dpkg-reconfigure é selecionar o código de idioma padrão.
pgs
2
Eu tive que executá-lo com sudocomo em sudo dpkg-reconfigure locales.
Alex Yursha
Se for um servidor acessado através do ssh, a página wiki do Debian em localidades recomenda deixar o local padrão definido como NONE.
Paul Rougieux
11
Era exatamente isso que eu precisava: instale todos os códigos de idioma com apenas algumas teclas. Muito obrigado!
aexl
11

As respostas aqui estão incompletas, como na maioria dos outros lugares. Depois de reunir as informações de alguns lugares, o que funcionou para mim foi: (1) garantir que o código do idioma desejado estivesse disponível (gerá-lo, se não estivesse); em seguida, (2) definir as variáveis ​​de ambiente relacionadas ao código do idioma para o código do idioma desejado.

No meu caso, eu precisava en_US.UTF-8programaticamente (ou seja, não interativamente) instalado em um contêiner de docker. O ff realizou o que eu preciso, mas deve funcionar muito bem em um shell interativo.

apt-get update

# Install locales package
apt-get install -y locales

# Uncomment en_US.UTF-8 for inclusion in generation
sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen

# Generate locale
locale-gen

# Export env vars
echo "export LC_ALL=en_US.UTF-8" >> ~/.bashrc
echo "export LANG=en_US.UTF-8" >> ~/.bashrc
echo "export LANGUAGE=en_US.UTF-8" >> ~/.bashrc

No mesmo shell, você precisará fazer source ~/.bashrcpara que os envios entrem em vigor imediatamente. Você pode verificar se a localidade foi configurada corretamente chamando locale.

LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

Havia muitas entradas de perguntas e respostas sobre esse assunto, mas apenas algumas eram realmente úteis. Crédito onde o crédito é devido:

Czar
fonte
6

Nenhuma dessas respostas funcionou para mim, em um contêiner LXC instalado com:

lxc-create -n sse-master -t download -n sse-master -- \
    -d debian -r jessie --arch i386

Eu sempre obtive a seguinte saída locale-gen, ou seja, não gerando nenhum local (nenhum listado):

$ sudo locale-gen
Generating locales (this might take a while)...
Generation complete.

A execução dpkg-reconfigure localese a seleção de alguns códigos de idioma não foram atualizadas /etc/locale.gencomo eu esperava.

No entanto, quando modifiquei esse arquivo manualmente e descomentei os códigos de idioma desejados, locale-gencomecei a funcionar corretamente:

$ sudo locale-gen
Generating locales (this might take a while)...
  en_GB.UTF-8... done
  en_US.UTF-8... done
Generation complete.

Também pude gerar localidades manualmente assim:

sudo localedef -i en_US -f UTF-8 en_US.UTF-8
sudo localedef -i en_GB -f UTF-8 en_GB.UTF-8

Mas essa não era uma solução permanente: descobri que a execução locale-gensem a --keep-existingopção excluirá todos os locais gerados manualmente, ou seja, todos os locais não listados (e não comentados) em /etc/locale.gen.

qris
fonte
3

Para um aplicativo Web, pode ser melhor usar setlocale () dentro do programa, em vez de exigir que o código de idioma padrão do sistema seja definido adequadamente fora. Menos solto termina assim.

SamB
fonte
11
Se o sistema não tiver exigido código de idioma, setlocalenão funcionará.
The Godfather
1

Mas primeiro você precisa ter o pacote de idiomas necessário instalado. No meu VPS baseado em alemão, não havia nenhum pacote de idioma inglês pré-instalado. Então, primeiro verifique se você o instalou:

aptitude install language-pack-en
valentt
fonte
1

Para quem, como eu, no Ubuntu 14.04 LTS, não possui nenhum /etc/locale.genarquivo, é possível adicionar um novo código de idioma /var/lib/locales/supported.d/locale executar:

sudo dpkg-reconfigure locales

Você também pode adicionar a localidade francesa (por exemplo) desta maneira (em vez de editar /var/lib/locales/supported.d/local):

sudo locale-gen fr_FR fr_FR.UTF-8

para adicionar e gerar os conjuntos de códigos ISO-8859-1e UTF-8da fr_FRlocalidade e, finalmente, digite:

sudo dpkg-reconfigure locales

para terminar o trabalho

SebMa
fonte