Locale instellingen (Linux)
Om Linux aan te passen aan locale instellingen (bv. taal, datum, valuta, decimale scheidingsteken, duizendtal-scheidingsteken), heb je de nodige instellingen ter beschikking. Meestal wil ik een combinatie van verschillende locales. Bv. Engels, maar wel met komma's, datumaanduidingen en euro's zoals in Nederland.
Het is elke keer weer een gepiel om dat goed te krijgen. Bij voorkeur doe ik dit zo low-level mogelijk, dus via Bash. Daarmee kom ik een heel eind, maar niet voor 100%: Instellingen in Gnome kunnen deze instellingen nogal overrulen. Dus vaak moet je ook in Gnome dingen aanpassen (nieuwe theorie: Juist helemaal nix in Gnome aanpassen - Dan worden wellicht de systeeminstellingen overgenomen!)
Achtergrond
Locales worden gebruikt door glibc en andere locale-aware programma's om text, datum, valuata, soorteervolgorde, etc. aan te passen aan locale gebruiken.
Het behelst een systeem met zo'n drie onderdelen:
- Local Names: Specificaties van talen/landen
- System variables: Zoals taal, valuta, etc.
- Configuraties: Dit is waar local names aan system variables toegewezen worden. Dat kan ik verschillende bestanden en op verschillende manieren.
Locale Names
Locales of local names zijn in de vorm [1]
language[_territory].[codeset][@modifier]
waarbij geldt:
language
- ISO 639 language codeterritory
- ISO 3166 country codecodeset
- ISO-8859-1- of UTF-8-identifier. In de praktijk gebruik ik altijd een UTF-8-identifiermodifer
- Geen idee. Misschien zijn de aanduidingen@euro
op sommige regels in/etc/locale.gen
hier een voorbeeld van.
Alle beschikbare locales kun je opvragen mbv. less /etc/locale.gen
. Dit zijn de NL-gerelateerde locales:
nl_AW UTF-8 nl_BE ISO-8859-1 nl_BE.UTF-8 UTF-8 nl_BE@euro ISO-8859-15 nl_NL ISO-8859-1 nl_NL.UTF-8 UTF-8 nl_NL@euro ISO-8859-15
Merk op dat er niet zoiets bestaat als en_NL (Engelstalig + Nederland). Ik heb me er bij neergelegd dat ik qua taal en_US UTF-8 gebruik.
Dit zijn de instellen op één van m'n computers. Dit was voordat ik de locale had geconfigureerd:
LANG=C LANGUAGE= LC_CTYPE="C" LC_NUMERIC=en_US.UTF-8 LC_TIME=en_US.UTF-8 LC_COLLATE="C" LC_MONETARY=en_US.UTF-8 LC_MESSAGES="C" 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=
Locales aanmaken
Om een local te kunnen gebruiken, moet je 'm eerst aanmaken: sudo vim /etc/locale.gen
. Uit-commentariseer de gewenste locales. Voor mij zijn dat meestal deze twee regels:
en_US.UTF-8 UTF-8 nl_NL.UTF-8 UTF-8
Sla het bestand op, en genereer de betreffende locales mbv.
locale-gen
Ik denk dat de betreffende bestanden vervolgens uit /us/lib/locale/locale-archive
worden gevist, en op de juiste plekken in het OS worden geplaatst.
System Locale
De system Locale is (lijkt me) de standaard-locale-configuratie. Die kun je opvragen met localectl
. Op deze computer geeft dit:
strompf@Dell2017 /etc $ localectl System Locale: LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_NUMERIC=nl_NL.UTF-8 LC_MONETARY=nl_NL.UTF-8 LC_PAPER=nl_NL.UTF-8 LC_NAME=nl_NL.UTF-8 LC_ADDRESS=nl_NL.UTF-8 LC_TELEPHONE=nl_NL.UTF-8 LC_MEASUREMENT=nl_NL.UTF-8 LC_IDENTIFICATION=nl_NL.UTF-8 VC Keymap: n/a X11 Layout: us X11 Model: pc105 X11 Variant: euro
Verbazend, want het probleem was juist dat alles op en_EN was ingesteld. Ik weet niet waar localectl z'n informatie vandaan haalt. man localctl
gaf dat niet aan.
Verder kun je de system locale configureren in bestand /etc/locale.conf
Dat bestand bestaat niet op deze computer.
User locale
Er zijn verschillende manieren om gebruiker-specifieke instellingen te configureren:
~/.config/locale/conf
.bashrc
- Meer? Er is zelfs een bestand waarin je de precedence kunt aangeven
- GNOME - Yep: Instellingen daar, overrulen in mijn geval de eerdere instellingen (Linux Mint, geïnstalleerd eind 2016).
Voorbeeld van ~/.config/locale/conf
:
LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_NUMERIC=nl_NL.UTF-8 LC_MONETARY=nl_NL.UTF-8 LC_PAPER=nl_NL.UTF-8 LC_NAME=nl_NL.UTF-8 LC_ADDRESS=nl_NL.UTF-8 LC_TELEPHONE=nl_NL.UTF-8 LC_MEASUREMENT=nl_NL.UTF-8 LC_IDENTIFICATION=nl_NL.UTF-8
en een voorbeeld van .bashrc
(eigen verzinsel, kunnen fouten in zitten):
########################################### # Locale ########################################### # export LANG=en_US.UTF-8 export LANGUAGE=en_US:en # export LC_CTYPE="en_US.UTF-8" # Wat is dit? export LC_NUMERIC=nl_NL.UTF-8 export LC_TIME=nl_NL.UTF-8 export LC_COLLATE=nl_NL.UTF-8 export LC_MONETARY=nl_NL.UTF-8 # export LC_MESSAGES="en_US.UTF-8 # ? export LC_PAPER=nl_NL.UTF-8 export LC_NAME=nl_NL.UTF-8 export LC_ADDRESS=nl_NL.UTF-8 export LC_TELEPHONE=nl_NL.UTF-8 export LC_MEASUREMENT=nl_NL.UTF-8 export LC_IDENTIFICATION=nl_NL.UTF-8
Overzicht actuele instellingen
locale
geeft een overzicht van actuele instellingen.
locale -a
geeft een overzicht van gegenereerde/beschikbare locales. Op de computer waarop ik dit schrijf, is dit de output:
C C.UTF-8 en_AG en_AG.utf8 en_AU.utf8 en_BW.utf8 en_CA.utf8 en_DK.utf8 en_GB.utf8 en_HK.utf8 en_IE.utf8 en_IN en_IN.utf8 en_NG en_NG.utf8 en_NZ.utf8 en_PH.utf8 en_SG.utf8 en_US.utf8 en_ZA.utf8 en_ZM en_ZM.utf8 en_ZW.utf8 nl_NL.utf8 POSIX
Hier zitten allerlei local names tussen die ik niet heb geactiveerd in /etc/locale.gen
. Dit zijn hoogstwaarschijnlijk instellingen vanuit GNOME.
locale -m
geeft een overzicht van beschikbare character maps.
Gebruik de optie -v
(verbose) voor meer info. Gebruik commando man locale
voor een overzicht van overige opties.
Voorbeeld van een deel van de output van local -va
:
locale: nl_NL.utf8 archive: /usr/lib/locale/locale-archive ------------------------------------------------------------------------------- title | Dutch locale for the Netherlands source | RAP address | Sankt Jørgens Alle 8, DK-1615 København V, Danmark email | xxxbug-glibc-locales@gnu.org language | Dutch territory | Netherlands revision | 1.0 date | 2000-06-29 codeset | UTF-8 locale: C.UTF-8 directory: /usr/lib/locale/C.UTF-8 ------------------------------------------------------------------------------- title | C locale email | xxx@debian.org language | C revision | 1.5 date | 2012-11-18 codeset | UTF-8
GNOME
Het is al een paar keer genoemd. Hierbij nog een keer: Goede kans dat GNOME de bash-instellingen overruled. En da's nogal jammer, want de instellingen in GNOME zijn nooit erg werkzaam geweest, maar in Linux Mint (dec. 2016) zijn een hoop subinstellingen zelfs verdwenen`
LibreOffice
Locale instellen (casus juli 2017)
Dit betreft een nieuw-geïnstalleerde computer met Linux Mint. Alles staat nog zo'n beetje ingesteld op US. Ihb.: punten ipv. komma's & dollars ipv. euro's in Calc:
strompf@Dell2017 ~ $ locale LANG=en_US.UTF-8 LANGUAGE= 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 (al snap ik hier minder het nut van):
strompf@Dell2017 ~ $ locale -a C C.UTF-8 en_AG en_AG.utf8 en_AU.utf8 en_BW.utf8 en_CA.utf8 en_DK.utf8 en_GB.utf8 en_HK.utf8 en_IE.utf8 en_IN en_IN.utf8 en_NG en_NG.utf8 en_NZ.utf8 en_PH.utf8 en_SG.utf8 en_US.utf8 en_ZA.utf8 en_ZM en_ZM.utf8 en_ZW.utf8 nl_NL.utf8 POSIX
Bronnen
- http://isis.poly.edu/~qiming/fine-tuning-ubuntu-locale.html
- http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap07.html
- http://www.freebsd.org/doc/nl/books/handbook/using-localization.html
- http://manpages.ubuntu.com/manpages/dapper/en/man5/locale.5.html
- http://www.kq22.com/linux/locale_files_under_ubuntu_374/ - Handig