9.7. Konfigurere systemlokaliteten

/etc/locale.conf filen nedenfor setter noen miljøvariabler som er nødvendige for morsmålsstøtte. Å sette dem ordentlig 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 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.

Noen pakker utover LFS kan også mangle støtte for din valgte lokalitet. Et eksempel er X-biblioteket (en del av X Window System), som sender ut følgende feilmelding hvis lokaliteten ikke samsvarer nøyaktig med et av tegnkart navn i interne filer:

Warning: locale not supported by Xlib, locale set to C

I flere tilfeller forventer Xlib at karakterkartet vil bli oppført i store bokstaver med kanoniske bindestreker. For eksempel "ISO-8859-1" heller enn "iso88591". Det er også mulig å finne en passende spesifikasjon ved å fjerne tegnkart delen av lokalitetsspesifikasjonen. Dette kan sjekkes ved å kjøre locale charmap kommandoen i begge lokaliteter. For eksempel måtte man endre "de_DE.ISO-8859-15@euro" til "de_DE@euro" for å få denne lokaliteten gjenkjent av Xlib.

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, oppretter du /etc/locale.conf filen:

cat > /etc/locale.conf << "EOF"
LANG=<ll>_<CC>.<charmap><@modifiers>
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 som LANG, LC_CTYPE, LC_NUMERIC eller enhver annen miljøvariabel fra locale utdata. Bare skille dem med et mellomrom. Et eksempel hvor LANG er satt som en_US.UTF-8 men LC_CTYPE er satt som en_US er:

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

Note

Vær oppmerksom på at localectl kommandoen fungerer ikke i chroot miljøet. Det kan bare brukes etter at LFS systemet er startet opp med systemd.

C (standard) og en_US (det anbefalte for engelske brukere i USA) lokalitetene er forskjellige. 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 ukjent 8-bit). Det foreslås at du bruker C lokalitet kun hvis du er sikker på at du aldri vil trenge 8-bits tegn.