Come installare / modificare le impostazioni locali su Debian?


65

Ho scritto un'applicazione Web per la quale l'interfaccia utente è in olandese. Uso le routine di data e ora del sistema per formattare le stringhe di date nell'applicazione. Tuttavia, la data indica che i formati di sistema sono in inglese ma li voglio in olandese, quindi devo impostare le impostazioni internazionali del sistema. Come posso farlo su Debian? Ho provato a impostare LC_ALL=nl_NLma non sembra avere alcun effetto:

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

Ricordo che l'impostazione di LC_ALL sul mio sistema desktop Ubuntu funziona bene. Devo installare pacchetti extra per farlo funzionare o sto sbagliando completamente?


c'è un modo per farlo automaticamente in base all'indirizzo IP assegnato al server?
Scoop

Risposte:


72

Modifica /etc/default/localee imposta i contenuti su:

LANG="nl_NL.UTF-8"

Puoi controllare quali locali hai attualmente generato usando:

# locale -a

Puoi generare di più modificando /etc/locale.gene rimuovendo il commento dalle righe per le impostazioni locali che desideri abilitare. Quindi puoi generarli eseguendo:

# locale-gen

È possibile trovare un elenco di impostazioni locali supportate in /usr/share/i18n/SUPPORTED

Ci sono maggiori informazioni disponibili sul wiki di Debian .


9
/ var / lib / belocs / list non esiste. È necessario modificare /etc/locale.gen o eseguire invece dpkg-reconfigure locales.
pag

+1 a questa risposta per descrivere locale-gen, ma come per il commento precedente, non esiste un file come / var / lib / belocs / list sul mio sistema
telent

Mi ci sono volute 5 ore per trovare questa risposta, che alla fine è stata perfetta. Inoltre, permette di creare alias: en_US UTF-8 e it_IT UFT-8 mi hanno permesso di avere le mie localizzazioni in UTF-8 di default, il che è fantastico se hai un codice PHP che dipende dalle localizzazioni
Cec,

Esiste un comando o un pacchetto che può modificare e impostare il contenuto di / etc / default / locale?
Karl Morrison,

Vedi la risposta di seguito dallo Zar. Puoi farlo come: sed -i 's / ^ # * (en_US.UTF-8) / \ 1 /' /etc/locale.gen
Tobias Gaertner

66

Potrebbe essere necessario installare il localespacchetto. Questo ti chiederà quali locali generare. Se è già installato, dpkg-reconfigure localesti consentirà di generare più locali.


Ciò genera solo locali, non imposta il valore predefinito di sistema.
David Pashley,

16
No, l'ultima domanda di dpkg-reconfigure locales è selezionare la locale predefinita.
pag

2
Ho dovuto eseguirlo con sudocome in sudo dpkg-reconfigure locales.
Alex Yursha,

Se si tratta di un server a cui si accede tramite ssh, la pagina wiki Debian su locales consiglia di lasciare la locale predefinita impostata su NONE.
Paul Rougieux,

1
Era esattamente quello di cui avevo bisogno: installare tutte le versioni locali in pochi tasti. Grazie mille!
aexl,

11

Le risposte qui sono incomplete come nella maggior parte degli altri. Dopo aver messo insieme le informazioni da alcuni punti, ciò che ha funzionato per me è stato (1) assicurarsi che le impostazioni locali che volevo fossero disponibili (generarle se non fosse), quindi (2) impostare le variabili di ambiente relative alle impostazioni locali alle impostazioni locali desiderate.

Nel mio caso avevo bisogno di en_US.UTF-8un'installazione programmatica (cioè non interattiva) in un contenitore docker. L'ff ha realizzato ciò di cui ho bisogno, ma dovrebbe funzionare perfettamente in una shell interattiva.

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

Sulla stessa shell, dovrai fare source ~/.bashrcin modo che le variabili ambientali abbiano effetto immediato. È possibile verificare che le impostazioni internazionali siano state configurate correttamente invocando 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

Ci sono state molte domande e risposte su questo argomento, ma solo alcune sono state effettivamente utili. Credito in cui il credito è dovuto:


6

Nessuna di queste risposte ha funzionato per me, su un contenitore LXC installato con:

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

Ho sempre ottenuto il seguente output locale-gen, ovvero non generando alcuna localizzazione (nessuna elencata):

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

L'esecuzione dpkg-reconfigure localese la selezione di alcune versioni locali non sono state aggiornate /etc/locale.gencome previsto.

Tuttavia, quando ho modificato il file manualmente e decommentato le impostazioni locali desiderate, ho locale-geniniziato a funzionare correttamente:

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

Sono stato anche in grado di generare localmente manualmente in questo modo:

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

Ma questa non era una soluzione permanente: ho scoperto che l'esecuzione locale-gensenza l' --keep-existingopzione eliminerà tutte queste impostazioni locali generate manualmente, vale a dire tutte le impostazioni locali non elencate (e non commentate) /etc/locale.gen.


3

Per un'applicazione Web, potrebbe essere meglio utilizzare setlocale () all'interno del programma, anziché richiedere che le impostazioni internazionali predefinite del sistema siano impostate in modo appropriato all'esterno. In questo modo meno fini sciolti.


1
Se il sistema non ha richiesto le impostazioni internazionali, setlocalenon funzionerà.
Il padrino

1

Ma prima devi aver installato il language pack necessario. Sul mio VPS con base in tedesco non era preinstallato un pacchetto in lingua inglese. Quindi prima controlla di averlo installato:

aptitude install language-pack-en

1

Per coloro che, come me, su Ubuntu 14.04 LTS, non hanno, in qualche modo, nessun /etc/locale.genfile, è possibile aggiungere una nuova locale /var/lib/locales/supported.d/locale quindi eseguire:

sudo dpkg-reconfigure locales

Puoi anche aggiungere le impostazioni locali francesi (ad esempio) in questo modo (anziché modificarle /var/lib/locales/supported.d/local):

sudo locale-gen fr_FR fr_FR.UTF-8

per aggiungere e generare i set di codici ISO-8859-1e UTF-8della fr_FRlocale e infine digitare:

sudo dpkg-reconfigure locales

per finire il lavoro

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.