Eu escrevi um aplicativo da 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 strings de data 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 a localidade do sistema. Como faço isso no Debian? Eu tentei configurar LC_ALL=nl_NL
, mas não parece 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-me de que configurar LC_ALL no meu sistema de desktop Ubuntu funciona bem. Preciso instalar pacotes extras para fazer isso funcionar ou estou fazendo isso totalmente errado?
Edite
/etc/default/locale
e defina o conteúdo para:Você pode verificar quais localidades você gerou atualmente usando:
Você pode gerar mais editando
/etc/locale.gen
e descomentando as linhas das localidades que deseja habilitar. Então você pode gerá-los executando o comando:Você pode encontrar uma lista de localidades com suporte em
/usr/share/i18n/SUPPORTED
Há mais informações disponíveis no wiki do Debian .
Pode ser necessário instalar o
locales
pacote. Isso perguntará quais localidades devem ser geradas. Se já estiver instalado,dpkg-reconfigure locales
permitirá que você gere mais localidades.As respostas aqui estão incompletas, como na maioria dos outros lugares. Depois de reunir informações de alguns lugares, o que funcionou para mim foi (1) certificar-se de que a localidade que eu queria estava disponível (gerá-la se não estivesse) e (2) definir variáveis de ambiente relacionadas à localidade para a localidade desejada.
No meu caso eu precisava
en_US.UTF-8
programaticamente (ou seja, não interativamente) instalado em um contêiner docker. O ff realizou o que eu preciso, mas deve funcionar bem em um shell interativo.No mesmo shell, você precisará fazer
source ~/.bashrc
para que o env vars entre em vigor imediatamente. Você pode verificar se a localidade foi configurada corretamente invocandolocale
.Havia muitas entradas de perguntas e respostas sobre esse assunto, mas apenas algumas foram realmente úteis. Crédito onde o crédito é devido:
Nenhuma dessas respostas funcionou para mim, em um contêiner LXC instalado com:
Eu sempre obtive a seguinte saída de
locale-gen
, ou seja, não gerando nenhuma localidade (nenhuma listada):A execução
dpkg-reconfigure locales
e a seleção de algumas localidades não foram atualizadas/etc/locale.gen
como eu esperava.No entanto, quando modifiquei esse arquivo manualmente e descomentei as localidades que queria,
locale-gen
comecei a funcionar corretamente:Também consegui gerar localidades manualmente assim:
Mas essa não era uma solução permanente: descobri que a execução
locale-gen
sem a--keep-existing
opção excluirá todas essas localidades geradas manualmente, ou seja, todas as localidades não listadas (e não comentadas) em/etc/locale.gen
.Para um aplicativo da Web, pode ser melhor usar setlocale () dentro do programa, em vez de exigir que o locale padrão do sistema seja definido adequadamente fora. Menos pontas soltas assim.
Para aqueles que, como eu, no Ubuntu 14.04 LTS, não têm, de alguma forma, nenhum
/etc/locale.gen
arquivo, você pode adicionar uma nova localidade/var/lib/locales/supported.d/local
e 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-1
eUTF-8
dafr_FR
localidade e, finalmente, digite:sudo dpkg-reconfigure locales
para terminar o trabalho
Nota: Alguns dos comandos abaixo requerem privilégios de root, considere o uso de
sudo
.Informação básica
De acordo com
man locale-gen
, as localidades são definidas em vários arquivos.Detalhes abrangentes sobre localidades no Arch Wiki .
Verificando localidades e a localidade
Para verificar as localidades (já) geradas, execute qualquer um dos comandos a seguir (com pequenas diferenças de saída).
Para verificar a localidade usada atualmente, execute qualquer um dos comandos a seguir (com pequenas diferenças de saída).
Configurando e gerando (novas) localidades
As localidades geralmente são definidas removendo os comentários de linhas em
/etc/locale.gen
, após o que a execuçãolocale-gen
é necessária.Isso gerará arquivos de localidades para cada linha não comentada em
/etc/locale.gen
(e em/var/lib/locales/supported.d/
), independentemente de terem sido geradas anteriormente ou não.Alternativamente, o comando
irá descomentar a linha correspondente
locale-gen
enquanto gera a localidade desejada e somente esta.Removendo localidades
Para remover localidades em
/etc/locale.gen
, simplesmente comente as linhas desejadas e gere novamente as localidades usandolocale-gen
. O comandolocale-gen --purge <locale>
não faz o que o modificador sugere.Para remover localidades abaixo
/var/lib/locales/supported.d/
é mais complicado. Como qualquer arquivo/var/lib/locales/supported.d/<code>
depende do pacotelanguage-pack-<code>-base
, qualquer alteração no primeiro será restaurada quando o último for atualizado.Gambiarra. Para evitar alterações em
/var/lib/locales/supported.d/
, defina arquivos nele com o atributo "immutable (i)" . Então, em vez de remover arquivos, esvazie-os. Por exemplo:Configurando a localidade
Definir e gerar códigos de idioma não define o código de idioma do sistema. Qualquer um dos comandos a seguir consegue isso.
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 você verifica se o instalou: