Soluzione 1:
Modifica /etc/default/locale
e imposta il contenuto su:
LANG="nl_NL.UTF-8"
Puoi verificare quali locali hai attualmente generato utilizzando:
locale -a
Puoi generarne altri modificando /etc/locale.gen
e decommentare le righe per le impostazioni locali che si desidera abilitare. Quindi puoi generarli eseguendo il comando:
locale-gen
Puoi trovare un elenco delle impostazioni locali supportate in /usr/share/i18n/SUPPORTED
Ci sono maggiori informazioni disponibili sul wiki Debian.
Soluzione 2:
Potrebbe essere necessario installare locales
pacchetto. Questo ti chiederà quali impostazioni locali generare. Se è già installato, allora dpkg-reconfigure locales
ti permetterà di generare più locali.
Soluzione 3:
Le risposte qui sono incomplete come con la maggior parte altrove. Dopo aver messo insieme le informazioni da alcuni punti, ciò che ha funzionato per me è stato (1) assicurarmi che la locale che volevo fosse disponibile (generarla se non lo era) quindi (2) impostare le variabili di ambiente relative alla locale sulla locale desiderata.
Nel mio caso avevo bisogno di en_US.UTF-8
installato in modo programmatico (ovvero non interattivo) in un contenitore docker. La ff ha realizzato ciò di cui avevo bisogno, ma dovrebbe funzionare bene 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 eseguire source ~/.bashrc
affinché env vars abbia effetto immediato. Puoi controllare che la locale sia stata configurata 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 dove è dovuto il credito:
- https://unix.stackexchange.com/a/247019/21289
- https://perlgeek.de/en/article/set-up-a-clean-utf8-environment
Soluzione 4:
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 ricevuto il seguente output da locale-gen
, cioè non genera alcuna locale (nessuna elencata):
$ sudo locale-gen
Generating locales (this might take a while)...
Generation complete.
Esecuzione di dpkg-reconfigure locales
e la selezione di alcune impostazioni locali non ha aggiornato /etc/locale.gen
come mi aspettavo.
Tuttavia, quando ho modificato quel file manualmente e ho decommentato le localizzazioni che volevo, allora locale-gen
ha iniziato 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 impostazioni locali 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 di locale-gen
senza --keep-existing
l'opzione eliminerà tutte queste impostazioni locali generate manualmente, ovvero tutte le impostazioni locali non elencate (e non commentate) in /etc/locale.gen
.
Soluzione 5:
Per un'applicazione web, potrebbe essere meglio utilizzare setlocale () dentro il programma, piuttosto che richiedere che la locale predefinita del sistema sia impostata in modo appropriato all'esterno. Meno questioni in sospeso in questo modo.