Řešení 1:
Upravit /etc/default/locale
a nastavte obsah na:
LANG="nl_NL.UTF-8"
Můžete zkontrolovat, která národní prostředí jste aktuálně vygenerovali pomocí:
locale -a
Další můžete vygenerovat úpravou /etc/locale.gen
a odkomentování řádků pro národní prostředí, která chcete povolit. Poté je můžete vygenerovat spuštěním příkazu:
locale-gen
Seznam podporovaných národních prostředí naleznete v /usr/share/i18n/SUPPORTED
Více informací je k dispozici na wiki Debianu.
Řešení 2:
Možná budete muset nainstalovat locales
balík. Tím se vás zeptá, které lokality se mají vygenerovat. Pokud je již nainstalován, pak dpkg-reconfigure locales
vám umožní vygenerovat více lokalit.
Řešení 3:
Odpovědi jsou zde neúplné jako většina ostatních. Po poskládání informací z několika míst se mi osvědčilo (1) ujistit se, že požadované národní prostředí je dostupné (vygenerovat jej, pokud nebylo), a poté (2) nastavit proměnné prostředí související s národním prostředím na požadované národní prostředí.
V mém případě jsem potřeboval en_US.UTF-8
programově (tj. neinteraktivně) nainstalován v kontejneru dockeru. ff splnil to, co jsem potřeboval, ale měl by fungovat dobře v interaktivním prostředí.
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
Na stejném shellu budete muset udělat source ~/.bashrc
aby se env vars projevily okamžitě. Správnou konfiguraci národního prostředí můžete zkontrolovat vyvoláním 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
Na toto téma bylo mnoho otázek a odpovědí, ale jen několik z nich bylo skutečně užitečné. Kredit, na který je kredit splatný:
- https://unix.stackexchange.com/a/247019/21289
- https://perlgeek.de/en/article/set-up-a-clean-utf8-environment
Řešení 4:
Žádná z těchto odpovědí pro mě nefungovala v kontejneru LXC nainstalovaném s:
lxc-create -n sse-master -t download -n sse-master -- \
-d debian -r jessie --arch i386
Vždy jsem dostal následující výstup z locale-gen
, tj. negeneruje žádná národní prostředí (žádná není uvedena):
$ sudo locale-gen
Generating locales (this might take a while)...
Generation complete.
Spuštěno dpkg-reconfigure locales
a výběr některých lokalit neaktualizoval /etc/locale.gen
jak jsem očekával.
Když jsem však tento soubor upravil ručně a odkomentoval jsem požadovaná národní prostředí, pak locale-gen
začal správně fungovat:
$ sudo locale-gen
Generating locales (this might take a while)...
en_GB.UTF-8... done
en_US.UTF-8... done
Generation complete.
Také jsem byl schopen generovat národní prostředí ručně takto:
sudo localedef -i en_US -f UTF-8 en_US.UTF-8
sudo localedef -i en_GB -f UTF-8 en_GB.UTF-8
Ale toto nebylo trvalé řešení:zjistil jsem, že běží locale-gen
bez --keep-existing
možnost smaže všechna taková ručně vygenerovaná národní prostředí, tj. každé národní prostředí neuvedené (a bez komentáře) v /etc/locale.gen
.
Řešení 5:
Pro webovou aplikaci může být lepší použít setlocale () uvnitř program, spíše než vyžadovat, aby výchozí národní prostředí systému bylo nastaveno vhodně mimo. Tím méně volných konců.