Vraag Hoe locale te installeren / wijzigen op Debian?


Ik heb een webapplicatie geschreven waarvoor de gebruikersinterface in het Nederlands is. Ik gebruik de datum- en tijdroutines van het systeem om datumreeksen in de toepassing op te maken. Echter, de datumstrings dat de systeemformaten in het Engels zijn maar ik wil ze in het Nederlands, dus ik moet de locale van het systeem instellen. Hoe doe ik dat op Debian? Ik probeerde het instellen LC_ALL=nl_NL maar het lijkt geen effect te hebben:

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

Ik herinner me dat het instellen van LC_ALL op mijn Ubuntu-desktopsysteem prima werkt. Moet ik extra pakketten installeren om dit te laten werken, of doe ik het helemaal verkeerd?


58
2017-08-15 14:42


oorsprong


is er een manier om dit automatisch te doen op basis van het toegewezen IP-adres van de server? - Scoop
Debian-landinstelling op de standaardmanier instellen: sudo dpkg-reconfigure locales. - Paul Rougieux


antwoorden:


Bewerk /etc/default/locale en stel de inhoud in op:

LANG="nl_NL.UTF-8"

U kunt controleren welke locaties u momenteel hebt gegenereerd met behulp van:

# locale -a

Je kunt meer genereren door te bewerken /etc/locale.gen en uncommenting de regels voor de locales die u wilt inschakelen. Dan kun je ze genereren door te draaien:

# locale-gen

U kunt een lijst met ondersteunde landinstellingen vinden in /usr/share/i18n/SUPPORTED

Er is meer informatie beschikbaar over de Debian wiki.


60
2017-08-15 15:56



/ var / lib / belocs / list bestaat niet. U moet /etc/locale.gen bewerken of dpkg-reconfiguratie-locales uitvoeren. - pgs
+1 dit antwoord voor het beschrijven van locale-gen, maar volgens de vorige opmerking is er geen bestand als / var / lib / belocs / list op mijn systeem - telent
Het kostte me 5 uur om dit antwoord te vinden, wat uiteindelijk perfect was. Bovendien maakt het het mogelijk om aliassen te maken: en_US UTF-8 en it_IT UFT-8 stonden me toe om mijn locales standaard in UTF-8 te hebben, wat geweldig is als je PHP-code hebt die afhankelijk is van de locales - Cec
Is er een commando of pakket dat de inhoud van / etc / default / locale kan bewerken en instellen? - Karl Morrison
Zie het antwoord hieronder van Tsaar. Je kunt het doen als: sed -i's / ^ # * (en_US.UTF-8) / \ 1 / '/etc/locale.gen - Tobias Gaertner


Mogelijk moet u de locales pakket. Dit zal je vragen welke locales je moet genereren. Als het al is geïnstalleerd, dan dpkg-reconfigure locales laat je meer locales genereren.


63
2017-08-15 15:47



Dat genereert alleen landinstellingen, niet de standaardinstelling van het systeem. - David Pashley
NEE, de laatste vraag van dpkg-herconfigureer locales is om de standaard locale te selecteren. - pgs
Ik moest het uitvoeren sudo als in sudo dpkg-reconfigure locales. - Alex Yursha
Als het een server is die toegankelijk is via ssh de Debian-wiki-pagina over landinstellingen raadt aan om de standaard locale die is ingesteld op te verlaten NONE. - Paul Rougieux
Dit was precies wat ik nodig had: zorg dat alle locaties in slechts een paar toetsaanslagen zijn geïnstalleerd. Heel erg bedankt! - aexl


Geen van deze antwoorden werkte voor mij, op een LXC-container geïnstalleerd met:

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

Ik kreeg altijd de volgende uitvoer van locale-gen, d.w.z. genereert geen enkele locales (geen vermeld):

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

hardlopen dpkg-reconfigure locales en het selecteren van een aantal locales is niet bijgewerkt /etc/locale.gen zoals ik het verwachtte.

Toen ik dat bestand echter handmatig wijzigde en de door mij gewenste localisaties niet gebruikte locale-gen begon goed te werken:

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

Ik kon op dezelfde manier ook locales handmatig genereren:

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

Maar dit was geen permanente oplossing: ik vond dat hardlopen locale-gen zonder de --keep-existing optie verwijdert al dergelijke handmatig gegenereerde locales, d.w.z. elke locale die niet wordt vermeld (en niet-gecommentarieerd) /etc/locale.gen.


6
2018-05-24 14:54





Antwoorden hier zijn onvolledig zoals bij de meeste andere. Na het samenvoegen van informatie van enkele plaatsen, werkte het voor mij om (1) ervoor te zorgen dat de locale die ik wilde beschikbaar was (produceer het als dit niet het geval was) en (2) locale gerelateerde omgevingsvariabelen in de gewenste locale in te stellen.

In mijn geval had ik het nodig en_US.UTF-8 programmatisch (dat wil zeggen niet-interactief) geïnstalleerd in een docker-container. Het ff volbracht wat ik nodig heb, maar het zou prima moeten werken in een interactieve shell.

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

Op dezelfde shell moet je doen source ~/.bashrc voor de env-vars om onmiddellijk van kracht te worden. U kunt controleren of de locale correct is geconfigureerd door op te roepen 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

Er waren veel Q & A-inzendingen over dit onderwerp, maar slechts enkelen waren echt nuttig. Krediet waarbij het krediet verschuldigd is:


6
2018-01-29 03:58





Voor een webtoepassing is het misschien beter om te gebruiken setlocale() binnen het programma, in plaats van te vereisen dat de standaardlandinstelling van het systeem naar behoren buiten wordt ingesteld. Minder losse eindjes op die manier.


3
2018-02-07 23:00



Als het systeem geen vereiste locale heeft, dan setlocale zal niet werken. - The Godfather


Maar eerst moet je het benodigde talenpakket hebben geïnstalleerd. Op mijn Duitse VPS was er geen Engels taalpakket vooraf geïnstalleerd. Dus controleer eerst of je het hebt geïnstalleerd:

aptitude install language-pack-en

1
2018-04-20 17:14