AndreyChernovBijgedragen door Michael C.WuHerschreven door RenéLadanVertaald door Lokalisatie - I18N/L10N gebruiken en instellenOverzicht&os; is een zeer gedistribueerd project met gebruikers over
de gehele wereld. Dit hoofdstuk behandelt de
internationalisatie- en lokalisatie-eigenschappen van &os; die
niet-Engelssprekende gebruikers echt werk laten verzetten. Er
zitten veel aspecten van de i18n-implementatie in zowel de
systeem- als applicatieniveaus, dus waar mogelijk wordt de lezer
verwezen naar meer specifieke bronnen.Na dit hoofdstuk weet de lezer:Hoe verschillende talen en locales gecodeerd zijn
op moderne besturingssystemen.Hoe de locale in te stellen voor een login-shell.Hoe de console voor niet-Engelse talen in te
stellen.Hoe het X Window systeem effectief met meerdere
talen te gebruiken.Waar meer informatie te vinden over het schrijven
van i18n-respecterende applicaties.Veronderstelde voorkennis:Weten hoe aanvullende applicaties van derde partijen
geïnstalleerd worden ().BeginselenWat is I18N/L10N?internationalisatielokalisatielokalisatieOntwikkelaars hebben internationalisatie
(internationalization afgekort tot de term
I18N, de eerste en de laatste letter en het aantal
tussenliggende letters. L10N gebruikt hetzelfde schema voor
naamgeving en komt van localization. Samen
staan I18N/L10N methoden, protocollen en applicaties gebruikers
toe de taal van hun keuze te gebruiken.I18N-applicaties zijn geprogrammeerd door gebruik te maken
van I18N-gereedschappen van bibliotheken. Daarmee kunnen
ontwikkelaars een eenvoudig bestand schrijven en menu's en
teksten weergeven in elke taal. Programmeurs worden door het
&os; Project sterk aangemoedigd deze conventie te
volgen.Waarom I18N/L10N gebruiken?I18N/L10N wordt gebruikt als een gebruiker gegevens wil
bekijken, invoeren of verwerken in niet-Engelse talen.Welke talen worden ondersteund door I18N?I18N en L10N zijn niet &os; specifiek. Momenteel kan er
gekozen worden uit de meeste grote wereldtalen, inclusief maar
niet beperkt tot: Chinees, Duits, Japans, Koreaans, Frans,
Russisch en Vietnamees.Lokalisatie gebruikenIn al zijn pracht is I18N niet &os; specifiek maar een
conventie. Het &os; Project moedigt iedereen aan &os; te helpen
deze conventie te gebruiken.localeLokalisatie-instellingen zijn gebaseerd op drie hoofdtermen:
Taalcode, Landcode en Codering. Localenamen zijn als volgt
opgebouwd:Taalcode_Landcode.CoderingTaal- en landcodestaalcodeslandcodesOm een &os;-systeem (of een ander I18N-ondersteunend &unix;
achtig systeem) te lokaliseren naar een bepaalde taal, moet de
gebruiker de codes voor het specifieke land en taal
achterhalen. Landcodes geven applicaties aan welke variatie
van de gegeven taal gebruikt moet worden. Ook webbrowsers,
SMTP/POP-servers, webservers, enzovoorts maken beslissingen gebaseerd
op die codes. Hieronder staan voorbeelden van taal- en
landcodes:Taal- en landcodeOmschrijvingen_USEngels - Verenigde Statenru_RURussisch voor Ruslandzh_TWTraditioneel Chinees voor TaiwanEen complete lijst van beschikbare locales is beschikbaar
via:&prompt.user; locale -aCoderingencoderingenASCIISommige talen gebruiken andere ASCII-coderingen dan 8-bit,
wijde of multibyte karakters, zie &man.multibyte.3;. Oudere
programma's herkennen die niet en interpreteren ze foutief als
controlekarakters aan. Afhankelijk van de implementatie moeten
gebruikers eventueel een applicatie met wijde of multibyte
karakterondersteuning compileren, of hem correct instellen. Om
wijde of multibyte karakters in te kunnen voeren en te kunnen
verwerken levert de &os; Portscollectie
voor elke taal programma's. Hiervoor staat I18N-documentatie
in de respectievelijke &os; Port.Voor het bouwen van een gewenste applicatie met lokalisatie
is het verstandig de applicatiedocumentatie te bekijken om te
bepalen hoe de juiste waarden doorgegeven kunnen worden naar
configure, Makefile of de compiler.Houd rekening met:Taalspecifieke enkele C-karakters karakterverzamelingen
(zie &man.multibyte.3;), bijvoorbeeld ISO8859-1,
ISO-8859-15, KOI8-R of CP437.Wijde of multibyte coderingen, bijvoorbeeld EUC of Big5.Een lijst met actieve karakterverzamelingen staat bij de
IANA
Registry.&os; gebruikt in plaats hiervan X11-compatible
locale-coderingen.I18N applicatiesIn het &os; Ports en Package systeem hebben
I18N-applicaties I18N in hun naam zodat ze
eenvoudig herkend kunnen worden. Toch ondersteunen ze niet
altijd iedere mogelijk gewenste taal.Locale instellenMeestal is het voldoende om de waarde van de localenaam
te exporteren als LANG in de login-shell. Dit
kan door die waarde in ~/.login_conf van
de gebruiker of in ~/.profile,
~/.bashrc of
~/.cshrc) van de gebruiker te zetten.
Het is niet nodig om localedeelverzamelingen als
LC_CTYPE of LC_CTIME in te
stellen. Bij de taalspecifieke &os; documentatie staat vaak
nog informatie.De twee volgende omgevingsvariabelen moeten in de
instellingenbestanden ingesteld worden:LANG voor de &posix;POSIX &man.setlocale.3;
functies.MM_CHARSET voor de MIMEMIME
karakters voor applicaties.Dit is inclusief het instellen van de gebruikers-shell, het
instellen van de specifieke applicatie en de instellingen voor
X11.Methoden om locale in te stellenlocaleloginklasseEr zijn twee methoden om de locale in te stellen en
beiden worden hieronder beschreven. De eerste (aanbevolen)
methode is door middel van het toekennen van
omgevingsvariabelen in de loginklasse en de tweede is
mogelijk door middel van het toevoegen van de
omgevingsvariabelen aan het opstartbestand van de
systeem-shell.Methode loginklasseDeze methode biedt de mogelijkheid om
omgevingsvariabelen die nodig zijn voor de localenaam en
MIME karakterverzamelingen éénmalig voor
elke mogelijke shell toe te kennen in plaats van door
toekenning via het opstartbestand van elke shell. Gebruikersinstellingen kunnen
door de gebruiker zelf worden gemaakt en voor Beheerdersinstellingen zijn
superuser-rechten nodig.GebruikersinstellingenHieronder staat een minimaal voorbeeld van een
.login_conf bestand in de thuismap
van een gebruiker die beide variabelen heeft ingesteld op
Latin-1 codering:me:\
:charset=ISO-8859-1:\
:lang=de_DE.ISO8859-1:traditioneel ChineesBIG-5 coderingHieronder staat is een voorbeeld van een
.login_conf die variabelen instelt
voor traditioneel Chinees in BIG-5 codering. Er zijn
veel andere variabelen ingesteld zijn omdat sommige
software localevariabelen niet correct respecteert voor
Chinees, Japans, en Koreaans.# Gebruikers die geen valuta eenheden of tijdformaten voor Taiwan
# willen gebruiken kunnen handmatig elke variabele wijzigen.
me:\
:lang=zh_TW.Big5:\
:setenv=LC_ALL=zh_TW.Big5:\
:setenv=LC_COLLATE=zh_TW.Big5:\
:setenv=LC_CTYPE=zh_TW.Big5:\
:setenv=LC_MESSAGES=zh_TW.Big5:\
:setenv=LC_MONETARY=zh_TW.Big5:\
:setenv=LC_NUMERIC=zh_TW.Big5:\
:setenv=LC_TIME=zh_TW.Big5:\
:charset=big5:\
:xmodifiers="@im=gcin": # Stel gcin in als XIM invoerserverZie Beheerdersinstellingen en
&man.login.conf.5; voor meer details.BeheerdersinstellingenEr dient gecontroleerd te worden of loginklasse voor
gebruikers, /etc/login.conf, de
juiste taal instelt door de volgende instellingen in
/etc/login.conf:taalnaam|accountstitel:\
:charset=MIME_karakterverzameling:
:lang=localenaam:\
:tc=default:Voor het bovenstaande voorbeeld dat gebruik maakt van
Latin-1 ziet dat er als hieronder uit:german|Duitse gebruikersaccounts:\
:charset=ISO-8859-1:\
:lang=de_DE.ISO8859-1:\
:tc=default:Voer voordat de gebruikers login class wordt
gewijzigd het volgende uit:&prompt.root; cap_mkdb /etc/login.confom de nieuwe configuratie in
/etc/login.conf zichtbaar te maken
voor het systeem.Loginklasse wijzigen met
&man.vipw.8;vipwMet vipw kunnen nieuwe gebruikers
toegevoegd worden en de instellingen dienen ongeveer als
volgt uit te zien:gebruiker:wachtwoord:1111:11:taal:0:0:Gebruikersnaam:/home/gebruiker:/bin/shLoginklasse wijzigen met
&man.adduser.8;adduserloginklasseMet adduser kunnen nieuwe
gebruikers toegevoegd worden. Hierna dient
één van de volgende stappen uitgevoerd te
worden:defaultclass =
taal instellen
in /etc/adduser.conf. In dit
geval dient er voor alle gebruikers van andere talen
een default klasse ingevoerd te
worden.Er kan ook gekozen worden voor een antwoord op
de vraag over taal vanuit &man.adduser.8;:Enter login class: default []: Ook kan het volgende gebruikt worden voor elke
gebruiker die een andere taal gebruikt:&prompt.root; adduser -class taalLoginklasse wijzigen met
&man.pw.8;pwAls &man.pw.8; wordt gebruikt om nieuwe gebruikers
toe te voegen:&prompt.root; pw useradd gebruikersnaam -L taalMethode opstartbestand shellDeze methode wordt niet aanbevolen omdat er
instellingenen nodig zijn voor elke mogelijke shell. Het
advies is de Methode
Loginklasse te gebruiken.MIMElocaleOm de localenaam en MIME karakterverzameling toe te
voegen kunnen gewoon twee omgevingsvariabelen ingesteld
worden, zoals hieronder te zien is, in
/etc/profile en/of
/etc/csh.login opstartbestanden voor
shells. Hier wordt de Duitse taal als voorbeeld
gebruikt:In /etc/profile:LANG=de_DE.ISO8859-1; export LANGMM_CHARSET=ISO-8859-1; export MM_CHARSETOf in /etc/csh.login:setenv LANG de_DE.ISO8859-1setenv MM_CHARSET ISO-8859-1Het is ook mogelijk de bovenstaande instructies toe te
toevoegen /usr/share/skel/dot.profile
(ongeveer gelijk aan wat hierboven in
/etc/profile is gebruikt) of aan
/usr/share/skel/dot.login
(ongeveer gelijk aan wat hierboven in
/etc/csh.login is gebruikt).Voor X11:In $HOME/.xinitrc:LANG=de_DE.ISO8859-1; export LANGOf:setenv LANG de_DE.ISO8859-1Afhankelijk van de shell (zie boven).Console instellenVoor alle enkele C-karakters karakterverzamelingen worden
de juiste lettertypen voor het console ingesteld in
/etc/rc.conf voor de taal in kwestie
met:font8x16=lettertypenaam
font8x14=fontnaam
font8x8=fontnaamDe lettertypenaam komt uit de
map /usr/share/syscons/fonts zonder het
achtervoegsel .fnt.sysinstalltoetsenmappingschermmappingDe gebruiker dient ervoor te zorgen dat indien nodig de juiste
enkele C-karakters karakterverzameling wordt ingesteld met
/stand/sysinstall. In
sysinstall kan
Configure en
Console gekozen worden. Het is ook
mogelijk het volgende aan /etc/rc.conf
toe te voegen:scrnmap=schermmappingnaam
keymap=toetsenmappingnaam
keychange="fkey_nummer sequentie"schermmappingnaam komt uit de
map /usr/share/syscons/scrnmaps zonder het
achtervoegsel .scm. Meestal is een
schermmapping met een overeenkomstig gemapt lettertype nodig
als workaround om bit 8 naar bit 9 uit te breiden op een
lettertype–karaktermatrix van een VGA-adapter in
pseudografische gebieden, dat wil zeggen om letters uit dat
gebied te halen als het schermlettertype een bit 8 kolom
gebruikt.Als de moused daemon is
ingeschakeld met de onderstaande regel in
/etc/rc.conf, dan wordt aangeraden de
muiscursorinformatie in de volgende paragraaf te
bekijken.moused_enable="YES"mousedStandaard neemt de muiscursor van het &man.syscons.4;
stuurprogramma het bereik 0xd0-0xd3 van de tekenverzameling in
beslag. Als een ingestelde taal dit bereik gebruikt, moet het
cursorbereik hierbuiten gehaald worden. Om de workaround voor
&os; aan te zetten kan de volgende regel aan
/etc/rc.conf toegevoegd worden:mousechar_start=3De toetsenmappingnaam komt uit
de map /usr/share/syscons/keymaps zonder
het achtervoegsel .kbd. Als niet precies
duidelijk is welke toetsenmapping te gebruiken, kan de
toetsenmapping getest worden met &man.kbdmap.1; zonder opnieuw
op te starten.keychange is nodig om functietoetsen zo
te programmeren dat ze overeenkomen met het geselecteerde
terminaltype omdat functietoetssequenties niet in de
toetsenmapping gedefinieerd kunnen worden.Er dient ook een controle te zijn op een juiste instelling
van het juiste terminaltype voor het console in
/etc/ttys voor alle
ttyv* regels. De huidige instellingen
zijn:KarakterverzamelingTerminaltypeISO8859-1 of ISO-8859-15cons25l1ISO8859-2cons25l2ISO8859-7cons25l7KOI8-Rcons25rKOI8-Ucons25uCP437 (VGA standaardinstelling)cons25US-ASCIIcons25wVoor wijde of multibyte karaktertalen kan je juiste
&os; port in de map
/usr/ports/taal
gebruikt worden. Sommige ports verschijnen als console terwijl
het systeem ze als serieële vtty ziet. Er dienen dus
voldoende vtty's gereserveerd te zijn voor zowel X11 als de
pseudo-serieële console. Hier is een gedeeltelijke lijst
van applicaties voor het gebruik van andere talen in
console:TaalLocatietraditioneel Chinees (BIG-5)chinese/big5conJapansjapanese/kon2-16dot
of japanese/mule-freewnnKoreaanskorean/hanX11 instellenHoewel X11 geen deel is van het &os; Project wordt het hier
wel besproken voor &os; gebruikers. Meer details zijn te
vinden op de &xorg;
website of op de website van een andere X11 server
die gebruikt wordt.In ~/.Xresources kunnen
applicatiespecifieke I18N instellingen gemaakt worden als
lettertypen, menu's, enzovoort.Lettertypen weergevenX11 &truetype;
lettertypeserverEerst moet &xorg; server
(x11-servers/xorg-server),
geïnstalleerd worden en daarna de &truetype;
lettertypen van de taal. Door de gewenste locale in te
stellen worden de menu's en dergelijke in de gekozen taal
weergegeven.Niet-Engelse karakters invoerenX11 Input Method (XIM)Het X11 Input Method (XIM) protocol is een nieuwe
standaard voor alle X11-cliënts. Alle X11-applicaties
horen geschreven te worden als XIM-cliënts die
invoer aannemen van de XIM-invoerservers. Er zijn meerdere
XIM-servers beschikbaar voor verschillende talen.PrinterinstellingenSommige enkele C-karakters karakterverzamelingen zijn
standaard hardware-gecodeerd in printers. Voor wijde of
multibyte karakterverzamelingen is een speciale installatie
nodig en het gebruik van apsfilter
wordt dan aangeraden. Een document kan ook naar &postscript;
of PDF formaat omgezet worden door gebruik te maken van
taalspecifieke conversieprogramma's.Kernel en bestandssystemenHet &os; Snelle Bestandssysteem (FFS) is 8-bit schoon, dus
het kan gebruikt worden met elke enkele C-karakters
karakterverzameling (zie &man.multibyte.3;), maar er is geen
karakterverzamelingnaam opgeslagen in het bestandssysteem. Het
is dus rauw 8-bit en het weet niets van coderingsbevelen.
Officieel ondersteunt FFS nog geen enkele vorm van wijde of
multibyte karakterverzamelingen. Toch hebben sommige wijde of
multibyte karakterverzamelingen onafhankelijke patches voor FFS
die ondersteuning inschakelen. Dit zijn tijdelijke oplossingen
of hacks die niet overdraagbaar zijn en daarom is besloten ze
niet in de source tree op te nemen. Op de websites van de
talen staan de patchbestanden en meer informatie.&ms-dos;UnicodeVoor het &os; &ms-dos; bestandssysteem kan geschakeld
worden tussen &ms-dos;, Unicode karakterverzamelingen en
gekozen &os; bestandssysteem-karakterverzamelingen.
&man.mount.msdosfs.8; beschijft de details.I18N-programma's compilerenVeel &os; Ports zijn geschikt gemaakt voor &os; met
I18N-ondersteuning. Een aantal daarvan zijn gemarkeerd met
-I18N in de portnaam. Deze en nog veel andere
programma's hebben ingebouwde ondersteuning voor I18N en
behoeven geen speciale aandacht.MySQLToch is het voor sommige applicaties zoals
MySQL nodig dat de
Makefile ingesteld is met de specifieke
karakterverzameling. Dit wordt normaliter gedaan in de
Makefile of door middel van het doorgeven
van een waarde aan configure in de
broncode.&os; lokaliseren naar talenAndreyChernovOorspronkelijk bijgedragen door Russisch (KOI8-R codering)lokalisatieRussischVoor meer informatie over KOI8-R codering, zie de
KOI8-R References (Russian Net
Character Set).Locale instellenVoeg de volgende regels toe aan
~/.login_conf bestand:me:Mijn account:\
:charset=KOI8-R:\
:lang=ru_RU.KOI8-R:Zie eerder in dit hoofdstuk voor voorbeelden over het
opzetten van de locale.Console instellenVoeg de volgende regel toe aan
/etc/rc.conf:mousechar_start=3Gebruik ook de volgende instellingen in
/etc/rc.conf:keymap="ru.koi8-r"
scrnmap="koi8-r2cp866"
font8x16="cp866b-8x16"
font8x14="cp866-8x14"
font8x8="cp866-8x8"Voor elke ttyv* regel in
/etc/ttys, gebruik
cons25r als het terminaltype.Zie eerder in dit hoofdstuk voor voorbeelden over het
opzetten van de
console.Printer instellenprintersAangezien de meeste printers met Russische karakters met
hardware-codepagina CP866 komen, is een speciaal
uitvoerfilter nodig om KOI8-R om te zetten in CP866. Zo'n
filter is standaard geïnstalleerd als
/usr/libexec/lpr/ru/koi2alt. Een
/etc/printcap regel voor een Russische
printer moet er uit zien als:lp|Russische lokale lijnprinter:\
:sh:of=/usr/libexec/lpr/ru/koi2alt:\
:lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs:Zie &man.printcap.5; voor een gedetailleerde
beschrijving.&ms-dos; bestandssysteem en Russische
bestandsnamenDe volgende voorbeeld &man.fstab.5; regel zet
ondersteuning aan voor Russische bestandsnamen gekoppeld op
&ms-dos; bestandssystemen:/dev/ad0s2 /dos/c msdos rw,-Wkoi2dos,-Lru_RU.KIO8-R 0 0De optie selecteert de te gebruiken
localenaam, en stelt de
karakteromzettabel in. Om de te
gebruiken moet /usr gemount zijn voor de
&ms-dos; partitie omdat de omzettabellen zich bevinden in
/usr/libdata/msdosfs.
&man.mount.msdosfs.8; geeft verdere uitleg.X11 instellenVoer eerst de niet-X
lokale instellingen uit zoals beschreven.Installeer bij gebruik van
&xorg; het package x11-fonts/xorg-fonts-cyrillic.Controleer de "Files" sectie in
/etc/X11/xorg.conf bestand. Zorg
dat de volgende regel
vóór andere
FontPath regels staan:FontPath "/usr/local/lib/X11/fonts/cyrillic"Zie de Ports Collectie voor meer cyrillic
fonts.Om een Russisch toetsenbord te activeren dient het
volgende in het "Keyboard" gedeelte
van xorg.conf te staan:XkbLayout "ru"
XkbOptions "grp:caps_toggle"Voor &xorg;:Option "XkbLayout" "us,ru"
Option "XkbOptions" "grp:caps_toggle"Ook moet daar XkbDisable
uitgeschakeld (uitgecomment) zijn.Voor grp:toggle is de
RUS/LAT-schakelaar Rechter Alt voor
de grp:ctrl_shift_toggle schakelaar zal
dat CtrlShift zijn. Voor
grp:caps_toggle zal de
RUS/LAT-schakelaar CapsLock zijn. De
oude CapsLock functie is nog steeds
beschikbaar via ShiftCapsLock
(alleen in LAT-modus). grp:caps_toggle
werkt om onbekende reden niet in
&xorg;.Als er &windows; toetsen op een
toetsenbord zitten en het blijkt dat sommige
niet-alfabetische toetsen verkeerd gemapt zijn in
RUS-modus, dan kan de volgende regel aan
xorg.conf toegevoegd worden:Option "XkbVariant" ",winkeys"Het Russische XKB toetsenbord hoeft niet te werken
met niet-gelokaliseerde applicaties.Minimaal gelokaliseerde applicaties moeten vroeg in het
programma een aanroep naar de XtSetLanguageProc
(NULL, NULL,); functie doen.In KOI8-R for X
Window staan meer instructies over het
lokaliseren van X11-applicaties.Traditioneel Chinees voor Taiwanlokalisatietraditioneel ChineesHet &os;-Taiwan Project heeft een Chinese HOWTO voor &os;
op
die gebruik maakt van veel Chinese ports. De huidige redacteur
voor de &os; Chinese HOWTO is Shen
Chuan-Hsing statue@freebsd.sinica.edu.tw.Chuan-Hsing Shen heeft de Chinese &os;
Collection (CFC) gemaakt met gebruik van &os;-Taiwan's
zh-L10N-tut. De packages en scriptbestanden
zijn beschikbaar op .Duits (alle ISO 8859-1 talen)lokalisatieDuitsSlaven Rezic eserte@cs.tu-berlin.de heeft
een tutorial geschreven over het gebruik van umlauten op een
&os;-machine. De tutorial is in het Duits geschreven en staat
op .GriekslokalisatieGrieksNikos Kokkalis nickkokkalis@gmail.com heeft
een compleet artikel over Griekse ondersteuning in &os;
geschreven. Het is beschikbaar als deel van de officiële
Griekse &os;-documentatie, in http://www.freebsd.org/doc/el_GR.ISO8859-7/articles/greek-language-support/index.html.
Merk opdat dit alleen in het Grieks
beschikbaar is.Japans en KoreaanslokalisatieJapanslokalisatieKoreaansJapanse lokalisatie staat beschreven op en de Koreaanse
lokalisatie staat op .Niet-Engelstalige &os; documentatieSommige delen van de &os;-documentatie zijn naar andere
talen vertaald. Hiernaar staan links op de hoofdsite of in
/usr/share/doc.