9.7. Konfigurere systemlokaliteten

Noen miljøvariabler er nødvendige for morsmål støtte. Å sette dem riktig resulterer i:

Erstatt <ll> nedenfor med koden på to bokstaver for ønsket språk (f.eks., en) og <CC> med tobokstavskoden for det aktuelle land (f.eks., GB). <charmap> bør erstattes med den kanoniske tegntabellen for din valgte lokalitet. Valgfri modifikatorer som f.eks @euro kan også være tilstede.

Listen over alle lokaliteter som støttes av Glibc kan fås ved å kjøre følgende kommando:

locale -a

Tegntabellene kan ha en rekke aliaser, f.eks., ISO-8859-1 er også referert til som iso8859-1 og iso88591. Noen applikasjoner kan ikke håndtere de forskjellige synonymene riktig (f.eks. krever at UTF-8 er skrevet som UTF-8, ikke utf8), så det er det sikreste i de fleste tilfeller å velge det kanoniske navnet for en bestemt lokalitet. å bestemme det kanoniske navnet, kjør følgende kommando, hvor <locale name> er utdataen gitt av locale -a til din foretrukne lokalitet (en_GB.iso88591 i vært eksempel).

LC_ALL=<locale name> locale charmap

For en_GB.iso88591 lokalitet, kommandoen over vil skrive ut:

ISO-8859-1

Dette resulterer i en endelig lokaleinnstilling for en_GB.ISO-8859-1. Det er viktig at lokaliteten funnet ved hjelp av heuristikken ovenfor testes på forhånd før det legges til Bash oppstartsfilene:

LC_ALL=<locale name> locale language
LC_ALL=<locale name> locale charmap
LC_ALL=<locale name> locale int_curr_symbol
LC_ALL=<locale name> locale int_prefix

Kommandoene ovenfor skal skrive ut språknavnet, tegnkodingen som brukes av lokaliteten, den lokale valutaen og prefikset for å ringe før telefonnummeret for å komme inn i landet. Hvis noen av kommandoene ovenfor mislykkes med en melding som ligner på den som vises nedenfor, betyr dette at lokaliteten din enten ikke ble installert i kapittel 8 eller at det ikke støttes av standardinstallasjonen av Glibc.

locale: Cannot set LC_* to default locale: No such file or directory

Hvis dette skjer, bør du enten installere ønsket lokalitet ved å bruke localedef kommando, eller vurder å velge en annen lokalitet. Ytterligere instruksjoner forutsetter at det ikke er slike feilmeldinger fra Glibc.

Andre pakker kan også fungere feil (men kanskje ikke nødvendigvis vise eventuelle feilmeldinger) hvis lokalenavnet ikke oppfyller deres forventninger. I disse tilfellene, undersøke hvordan andre Linux distribusjoner støtter lokaliteten din kan gi noe nyttig informasjon.

Når de riktige lokale innstillingene er bestemt, opprett /etc/locale.conf filen:

cat > /etc/locale.conf << "EOF"
LANG=<ll>_<CC>.<charmap><@modifiers>
EOF

Skallprogrammet /bin/bash (her etter referert som «skallet») bruker en samling oppstartsfiler for å hjelpe med å lage miljøet å kjøre i. Hver fil har en bestemt bruk og kan påvirke pålogging og interaktive miljøer ulikt. Filene i /etc mappen gir globale innstillinger. Hvis tilsvarende filer finnes i hjemmemappen, kan de overstyre de globale innstillingene.

Et interaktivt påloggingsskall startes etter en vellykket pålogging, ved hjelp av /bin/login, ved å lese /etc/passwd filen. Et interaktivt ikke-påloggingsskall er startet på kommandolinjen (f.eks. [prompt]$/bin/bash). Et ikke-interaktivt skall er vanligvis tilstede når et skallskript kjører. Det er ikke-interaktivt fordi det behandler et skript og ikke venter for brukerinndata mellom kommandoer.

Påloggingsskallene er ofte upåvirket av innstillingene i /etc/locale.conf. Opprett /etc/profile for å lese lokalinnstillinger fra /etc/locale.conf og eksporter dem, men still inn C.UTF-8 lokalitet i stedet hvis den kjøres i en Linux konsoll (for å hindre programmer fra å skrive ut tegn som Linux konsollen ikke kan gjengi):

cat > /etc/profile << "EOF"
# Begin /etc/profile

for i in $(locale); do
  unset ${i%=*}
done

if [[ "$TERM" = linux ]]; then
  export LANG=C.UTF-8
else
  source /etc/locale.conf

  for i in $(locale); do
    key=${i%=*}
    if [[ -v $key ]]; then
      export $key
    fi
  done
fi

# End /etc/profile
EOF

Merk at du kan endre /etc/locale.conf med systemd localectl verktøyet. For å bruke localectl for eksempelet ovenfor, kjør:

localectl set-locale LANG="<ll>_<CC>.<charmap><@modifiers>"

Du kan også spesifisere andre språkspesifikke miljøvariabler som f.eks LANG, LC_CTYPE, LC_NUMERIC eller noe annen miljøvariabel fra locale utdataen. Bare skill dem med et mellomrom. Et eksempel hvor LANG er satt som en_US.UTF-8 men LC_CTYPE er satt som bare en_US er:

localectl set-locale LANG="en_US.UTF-8" LC_CTYPE="en_US"
[Notat]

Notat

Vennligst merk at localectl kommandoen fungerer ikke i chroot miljøet. Den kan bare brukes etter at LFS systemet er startet opp med systemd.

C (standard) og en_US (den anbefalte for engelske brukere i USA) er annerledes. C bruker US-ASCII 7-biters tegnsett, og behandler byte med det høye bitsettet som ugyldige tegn. Det er derfor, f.eks ls kommandoen erstatter dem med spørsmålstegn i det lokalet. Også et forsøk på å sende post med slike tegn fra Mutt eller Pine resulterer i at ikke-RFC-samsvarende meldinger sendes (tegnsettet i den utgående posten er indikert som unknown 8-bit). Det foreslås at du bruker C lokalitet kun hvis du er sikker på at du aldri vil trenge 8-bits tegn.