Re: Konstigt gettextbeteende

From: Göran Uddeborg (goeran_at_uddeborg.pp.se)
Date: 2002-03-07 22:37:07

Daniel Resare writes:
> Det räcker med LC_ALL (såvida du inte överskuggar med en LC_CTYPE som
> inte har svenska tecken i sin teckenuppsättning)

Du blandar ihop symbolerna.  LC_ALL går före allt annat.  Den variabel
man normalt sätter är LANG.  Den ger ett standardvärde, som man kan
ändra i speciella kategorier med LC_<kategori>, typ LC_CTYPE, om man
vill.

Det känns som det kanske inte skulle skada lite med en förklaring till
vad som egentligen händer.  LC_MESSAGES väljer vilken
meddelandekatalog man skall använda.  Det är i princip språket.  Men
en meddelandekatalog är kodad i någon teckenuppsättning,
t.ex. ISO-8859-1 eller UTF-8.  Det vore ganska dumt att behöva ha en
meddelandekatalog för varje teckenuppsättning, det är ju samma
meddelanden i den.  Så därför har senare glibc infört att den
översätter meddelandena i katalogen till den aktuella
teckenuppsättningen "i farten" när de skall användas.

Haken är att då måste den veta vilken teckenuppsättning som används,
och det styrs av kategorin LC_CTYPE.  Så om applikationen väljer bara
meddelandekatalog (setlocale(LC_MESSAGES,...)) så gäller fortfarande
lokalen "C" för LC_CTYPE, d.v.s. US-ASCII.  Och när då libc-funktionen
skall översätta meddelandet från den teckenuppsättning det är lagrat i
till US-ASCII finns det ingen kod för "Å".  Då väljer den att skriva
ett frågetecken istället, i brist på bättre.

När det här infördes var det en hel del program som drabbades av samma
fel, men de har succesivt blivit rättade.  Jag hade själv nöjet att
felrapportera ett par program (zic tror jag det var) som ingår i
själva glibc-paketet, som alltså inte klarade sin egen nyhet! :-)  Nu
känns det som det mesta har ordnats, men enscript tycks vara ett som
är kvar.  Tänkte du felrapportera själv, eller vill du ha hjälp?

Arkiv genererat av hypermail 2.1.1.