Pro lokalizaci některých programů národní klávesnice, fonty a lokalizace knihovny libc nestačí. Tato kapitola popisuje, co je potřeba dále udělat, aby jednotlivé programy správně pracovaly v českém (případně slovenském) prostředí. Část programů není ochotna ani s nastavenými locales zpracovávat osmibitové znaky bez zvláštního nastavení. Většina poštovních a newsových programů vyžaduje informaci o explicitně kódování apod..
Většina popisů v této kapitole předpokládá, že na počítači už je nainstalovaná národní klávesnice, ISO-8859-2 fonty a české nebo slovenské locales.
Aby bylo možné v příkazových řádcích shellu bash zadávat a používat
ne-ASCII znaky, je třeba v souboru $HOME/.inputrc
nebo
v /etc/profile
uvést první tři z následujících příkazů:
set meta-flag on
set convert-meta off
set output-meta on
"\e[1~": beginning-of-line
"\e[3~": delete-char
"\e[4~": end-of-line
Další tři řádky slouží ke zprovoznění kláves Home, Delete a End při editaci příkazových řádků.
Pro vstup ne-ASCII znaků je nutné, aby byl tcsh přeložen s volbami
8b
a nls
(lze zjistit příkazem echo $version
).
Bohužel tcsh ignoruje nastavení proměnné prostředí LC_ALL
,
a řídí se pouze proměnnými LC_CTYPE
a LANG
. Ve
starších verzích tcsh akceptoval osmibitové znaky při jakémkoli
nastavení těchto proměnných (takže stačilo pouhé setenv LANG
nebo setenv LC_CTYPE
bez udání hodnoty), ve verzi 6.08.00 se
tyto proměnné skutečně používají pro nastavování locales, takže při dosti
častém nastavení LC_ALL=cs_CZ
a LANG=cs
tcsh považuje
ne-ASCII znaky za netisknutelné a nenačítá je, protože kategorie
LC_CTYPE
je definována pouze v locale cs_CZ
.
Řešením je nastavit
setenv LC_CTYPE cs_CZ
Aby fungovaly při editaci příkazových řádků klávesy Home, End a Delete,
je nutné do souboru /etc/csh.cshrc
přidat řádky
if ("$term" == "xterm" || "$term" == "vt100" \ || "$term" == "vt102" || "$term" !~ "con*") then # bind keypad keys for console, vt100, vt102, xterm bindkey "\e[1~" beginning-of-line # Home # bindkey "\e[2~" overwrite-mode # Ins bindkey "\e[3~" delete-char # Delete bindkey "\e[4~" end-of-line # End endif
--- Tato informace sice nesouvisí s lokalizací, ale je natolik praktická, že stojí za to ji uvést na tomto místě.
Pokud se někomu nepodaří zprovoznit klávesnice v X11, je možné alespoň pomocí translations v app-defaults nastavit požadované rozložení kláves pro program xterm.
Programy, které si otevírají vlastní okna, tato klávesnice neovlivní. Nouzově lze do těchto programů vlepovat český text z okna xtermu pomocí operace Copy-and-paste, ale pro rozumnou práci je nutné provést lokalizaci celých X.
Vcelku spolehlivě funguje počeštění programu xterm pomocí app-defaults
z adresáře X11/xterm
z balíku cs-tools. Mělo by fungovat i pro různé
X-servery. Bohužel například u XFree86 (nebo je to záležitost verze X?)
došlo někde mezi verzemi 3.1.2 a 3.3.2 ke změně, kvůli které je nutné
v souborech XTerm* nahradit ve všech řádcích obsahujících
Shift <Key>velké_písmeno
toto velké_písmeno
příslušným malým písmenem. Takto upravené soubory fungují na nových
i starších verzích; původní soubory pouze na starších verzích.
V Rxvt funguje česká klávesnice od verze 2.4.9. Poslední verzi rxvt lze sehnat na http://mason.primenet.com.au/pub/rxvt/.
V čem byl problém? Následující text lze použít jako návod na úpravu dalších vzdorných programů:
Rxvt dostupný v RedHatu i Debianu s češtinou korektně nefunguje (a ani nemůže) a je potřeba jej upravit a znovu přeložit. Při použití "developer" verze 2.4.6, která je k mání na http://babayaga.math.fu-berlin.de/~rxvt/ lze použít následující patche:
*** configure.OLD Wed May 6 13:37:12 1998 --- configure Wed May 6 14:20:34 1998 *************** *** 3108,3114 **** cat > conftest.$ac_ext <<EOF #line 3110 "configure" #include "confdefs.h" - #define X_LOCALE 1 #include <X11/Xlocale.h> int main() { setlocale(LC_CTYPE, ""); --- 3108,3113 ----
*** command.c.OLD Wed May 6 15:50:01 1998 --- command.c Thu May 7 09:03:30 1998 *************** *** 44,50 **** # if (XtSpecificationRelease < 6) # define NO_XLOCALE # else - # define X_LOCALE # include <X11/Xlocale.h> # endif #endif /* NO_XLOCALE */ --- 44,49 ---- *************** *** 1103,1111 **** Input_Context = NULL; ! # ifdef MULTICHAR_SET ! setlocale(LC_CTYPE, ""); ! # endif if (rs_inputMethod == NULL # ifndef KANJI --- 1102,1108 ---- Input_Context = NULL; ! setlocale(LC_ALL, ""); if (rs_inputMethod == NULL # ifndef KANJI-------------------------------------------------------------------------------
Jak je vidět, základní problém je v tom, že se volání funkce
setlocale()
zakompiluje pouze je-li při překladu definován
symbol MULTICHAR_SET
. Bez této funkce si o češtině můžeme
nechat jen zdát...
Po aplikaci záplaty stačí standardní cyklus
configure; make; make install
. Pak
už jen mít správně nastavené české locale...
Problém s tím, že se na začátku nevolá setlocale()
, nemá jen
rxvt. Stejně "ne-internacionálně" se chová i nxterm, xjed a další. Pouhé
přidání setlocale(LC_CTYPE, "")
však obvykle postačuje pouze u
programů, které neotvírají vlastní okna v prostředí X11 a které nepracují
s vícebajtovými znaky.
Pro opravy programů určených pro prostředí X11 je možné se
inspirovat například ve zdrojových textech programu xterm na
ftp://ftp.x.org/pub/R6.4/xc/programs/xterm/ (volání funkce
XtSetLanguageProc (NULL, NULL, NULL)
v main.c
a tělo
funkce VTInitI18N()
v charproc.c
) nebo ve zdrojových
textech editoru fte upravených Zdeňkem Kabeláčem pro použití IM z
http://decibel.fi.muni.cz/debian/fte_0.49.2.src.tag.gz, soubor
src/con_i18n.cpp
.
Aby příkaz ls
nevypisoval místo ne-ASCII znaků ve jménech souborů
otazníky, je nutné používat ls -N
nebo ls --8bit
.
Program less implicitně zobrazuje znaky s kódy >= 128 jako šestnáctkové
kódy uzavřené mezi znaky <>
(např. znak Č
jako
<C8>
) a řídící znaky ve formě ^x
(například znak
control-A (s kódem 1) zobrazí jako ^A
).
Novější verze zobrazují osmibitové znaky, pokud jsou nastaveny locales
(LC_CTYPE
nebo LANG
). Pro starší verze je možné
použít parametr -r
, nastavit proměnnou prostředí LESS
na -r
, nastavit proměnnou prostředí LESSCHARSET
na
latin1
(v tomto případě zcela vyhovuje i pro ostatní kódy
ISO-8859-x), nebo nastavit proměnnou LESSCHARDEF
podle popisu
na manuálové stránce. Místo nastavování proměnných prostředí je možné
zadat požadované hodnoty v sekci #env
souboru
$HOME/.lesskey
:
#env
LESSCHARSET = latin1
a příkazem lesskey tento soubor přeložit na konfigurační soubor pro
less --- $HOME/.less
.
Pozor: Pokud zobrazovaný soubor obsahuje řídící znaky, pak při nastavení pomocí -r program less neví, jak opravdu vypadá výsledek na obrazovce, a může například špatně zalamovat řádky.
Pro lokalizaci balíku groff je nutné, aby podporoval kódování ISO-8859-2.
Úprava groff-latin2 vytvořená Henrykem Paluchem a Janem Kasprzakem je
k dispozici na
ftp://ftp.fi.muni.cz/pub/localization/groff/ pod
názvem groff-latin2. Aby groff používal správnou znakovou sadu, je nutné
nastavit proměnnou prostředí GROFF_TYPESETTER
na hodnotu
latin2
. Postscriptový tisk v kódu ISO-8859-2 z groffu není
pravděpodobně dosud vyřešen.
Dále je třeba nastavit české dělení slov. Program groff používá TeXové
vzory dělení. Následující příkaz zkopíruje soubor, který tyto vzory dělení
obsahuje a odstraní vše kromě obsahu příkazu \patterns
(za
posledním vzorem vypustí vše počínaje uzavírací složenou závorkou):
awk '/\\patterns{/, /}/' /usr/share/texmf/tex/generic/hyphen/czhyph2e.tex \
| sed -e 's/^.*\\patterns{//' -e 's/}.*//' -e '/^$/d' \
> /usr/lib/groff/tmac/hyphen.cs
Pak je nutné v souboru /usr/lib/groff/tmac/troffrc
změnit řádek .do hla us
na .do hla cs
a řádek
.do hpf hyphen.us
na .do hpf hyphen.cs
.
Na adrese
ftp://ftp.vslib.cz/pub/unix/linux/localization/ je
patch, který zajistí, že editor joe bude používat locales. Upravený
joe umí se správně nastavenými locales pracovat s osmibitovými znaky
i bez nastaveného parametru -asis
a navíc správně rozeznává
hranice slov s diakritikou. Pro češtinu je vhodné spouštět editor
s parametrem -french
nebo odstranit mezeru před touto volbou
v souboru /usr/lib/joe/joerc
nebo $HOME/.joerc
, aby
joe při přeformátovávání textu dával za interpunkci na konci věty pouze
jednu mezeru.
Bez zmíněného patche je nutné nastavit volbu -asis
(tak jak je
popsáno u -french
), aby bylo možné pracovat se znaky s kódy
většími než 127. Potom však joe písmena s diakritikou nepokládá za
písmena, takže například slovo uživatel považuje za tři slova.
Midnight Commander používá rámečky, které jsou v českých fontech na jiném místě, proto vypadá, tak jak vypadá. Tento problém je možno vyřešit malou úpravou některého českého fontu (ale potom to už doopravdy NEBUDE český font, protože bychom museli upravit i znaky na místě písmenek Ú a dalších). Jeden takto upravený font pro linuxovou konzolu je k dispozici někde na ftp.inet.cz.
Aby Midnight Commander (dále jen MC), správně zobrazoval české fonty,
je nutné spustit MC s parametrem -m
, a nastavit
v "Options/Display bits" volbu "(*) Full 8 bits" (platí pro starší
verze MC). Spouštění mc -m
lze
automatizovat dopsáním alias mc='mc -m'
do souboru
~/.bashrc
nebo ~/.cshrc
, podle toho,
jaký shell používáte.
V případě novějšího MC (testována verze 4.1) se musí nastavit v "Options/Display bits" volba "(*) Full 8 bits output". K tomu, aby šlo psát české znaky, je také nutno zapnout volbu "[x] Full 8 bits input".
Poznámka: MC používá editor, jehož jméno je uvedeno v proměnné prostředí
EDITOR
, implicitně vi. Pokud tedy chcete používat například editor
joe bez úpravy pro podporu locales, přidejte do svého
$HOME/.bash_profile
řádek export EDITOR='joe -asis'
.
V nových verzích je obsažena tabulka s českým tříděním od Jana Pazdziory.
Má-li být použita, je nutné spustit ./configure
s volbou
--with-charset=czech
.
U starších verzí (testováno s verzí 3.20.31e) bylo nutné souborem
z
http://www.fi.muni.cz/~adelton/l10n/mysql-ctype-czech.c
nahradit soubor strings/ctype-latin2.c
v rozbalené distribuci
a příkaz ./configure
spustit s volbou --with-charset=latin2
.
Je také k dispozici překlad souboru chybových hlášení
http://www.fi.muni.cz/~adelton/l10n/mysql-sql-share-czech-errmsg.txt.
Zkopírujte ho do sql/share/czech/errmsg.txt
a přegenerujte
binární soubor sql/share/czech/errmsg.sys
příkazem
extra/comp_err sql/share/czech/errmsg.txt sql/share/czech/errmsg.sys
Používání českých chybových hlášení se pak zapne při startu serveru
mysqld parametrem --language=czech
.
Upozornění: tato třídicí tabulka implementuje posloupnost, ve které záleží na velikosti písmen (case sensitivity). Vzhledem k tomu, že manuál MySQL říká, že třídění na velikosti písmen nezávisí, byly by výsledky (byť správné pro češtinu) nekompatibilní se zbytkem MySQL. Proto tato tabulka nebyla poslána do oficiální distribuce. Na nalezení řešení problému se pracuje, pokud k němu máte nějaký komentář, napište autorovi počeštění.
Podle všeho pokud má Perl používat locales, je nutné mít verzi 5.004. Pro nastavení locales podle hodnot proměnných prostředí musí skript obsahovat příkaz
use locale;
nebo musí být perl spuštěn příkazem
perl -Mlocale další parametry
Pro ověření, zda podpora locales funguje, lze použít následující skript:
perl -Mlocale -e '$_="maličký ježeček"; s/\W/-/g; print "$_\n";'
který má správně vytisknout maličký-ježeček
. Bez fungujících
locales budou nahrazeny pomlčkou i další znaky, které nejsou považovány
za písmena.
Mělo by stačit mít nainstalované locales a proměnnou prostředí
LC_CTYPE
(nebo LANG
) nastavenou na cs_CZ
.
Pro používání osmibitových znaků je nutné buď přepnout
telnet do binárního režimu nebo použít následující řádek
v $HOME/.telnetrc
:
localhost set outbinary true stroj.domena.cz set outbinary true jiny.jinde.cz set outbinary true
Pro umožnění osmibitového přenosu v programu rlogin slouží
volba -8
.
stty cs8 -istrip -parenb
Pro používání národních znaků ve jménech souborů (pro spolupráci
s Windows-95 nezbytně nutné, protože už při vytvoření nové složky
je v jejím jméně použita diakritika) je nutné mít Sambu verze
nejméně 1.9.18 (vzhledem k bezpečnostním dírám je vhodné mít
vždy poslední verzi) a uvést v konfiguračním souboru
/etc/smb.conf
řádky
client code page = 852 character set = iso8859-2
Od verze 2.5 umí pracovat se stránkami v kódování ISO-8859-2. Změnu
kódování lze provést ručně pomocí volby
O)ptions -> display (C)haracter set
, nebo v konfiguračním
souboru $HOME/.lynxrc
(soubor lze získat zadáním >
po výběru volby O)ptions
) změnou řádku character_set
na
character_set=ISO Latin 2
nebo pro všechny uživatele v souboru /usr/local/lib/lynx.cfg
respektive /etc/lynx.cfg
změnit řádek CHARACTER_SET
na
CHARACTER_SET:ISO Latin 2
případně ještě
ASSUME_CHARSET:iso8859-2 ASSUME_LOCAL_CHARSET:iso8859-2
Od verze 2.8 by měl být schopen korektně zobrazovat jak stránky
v kódování ISO-8859-2, tak Windows-1250 (pokud mají správně uvedené
kódování v hlavičce Content-Type:
).
Další nastavení už nesouvisejí s lokalizací:
Pro zkrácení doby výpisu hlášení lze dále změnit:
INFOSECS:1 MESSAGESECS:1 ALERTSECS:1
Pro prohlížení obrázků pomocí lynxu je třeba nastavit
MAKE_LINKS_FOR_ALL_IMAGES:TRUE
a pro spouštění na konzole zkopírovat /etc/mailcap.vga
do
$HOME/.mailcap
. Lynx pak bude používat prohlížeč zgv.
Fvwm95 je virtuální manažer oken, který se vzhledově podobá M$ Win95.
Pro zobrazování českých znaků je nutno upravit konfigurační soubor fvwm95.
Má-li být úprava provedena pouze pro jednoho uživatele zkopírujeme
konfigurační soubor do jeho domácího adresáře jako
~/.fvwm2rc95
a provedeme potřebné úpravy:
cp /etc/X11/fvwm95-2/fvwm2rc95 ~/.fvwm2rc95
Předpokládá se, že máte nainstalovanou podporu češtiny pro X11, včetně českých fontů. (viz popis 2.2. XFREE 3.2)
Úprava souboru $HOME/.fvwm2rc95
spočívá v:
WindowFont -adobe-helvetica-*-r-*-*-*-120-*-*-*-*-iso8859-2 IconFont -misc-fixed-*-r-*-*-*-120-*-*-*-*-iso8859-2 MenuFont -adobe-helvetica-*-r-*-*-*-120-*-*-*-*-iso8859-2
AddToMenu "Window-Ops2" "&Obnovit%mini-ray.xpm%" Iconify -1 + "&Přesunout%mini-move.xpm%" Move-or-Raise + "&Velikost%mini-resize.xpm%" Resize-or-Raise + "Mi&nimalizovat%mini-lower.xpm%" Iconify 1 + "Ma&ximalizovat%mini-max1.xpm%" Maximize 100 100 + "" Nop + "&Zabít%mini-bomb.xpm%" Destroy + "&Ukončit Alt+F4%mini-stop.xpm%" Delete
*FvwmPagerFont -adobe-helvetica-bold-r-*-*-10-*-*-*-*-*-iso8859-2
*FvwmButtonsFont -adobe-helvetica-bold-r-*-*-10-*-*-*-*-*-iso8859-2
*FvwmIdentFont -adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-iso8859-2
*FvwmWinListFont -adobe-helvetica-bold-r-*-*-10-*-*-*-*-*-iso8859-2
### Font tlačítka na TaskBaru bez výběru (vystouplý) *FvwmTaskBarFont -adobe-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-2 ### Font tlačítka na TaskBaru vybraného (zamáčknutý) *FvwmTaskBarSelFont -adobe-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-2
Ukázkové menu je možno najít na URL http://linux-cz.inecnet.cz/ftp/fvwm/
Window manažer Afterstep používá pro konfiguraci svého menu program
wmconfig (viz man wmconfig
).
V souboru menu /etc/X11/wmconfig/xterm-color
upravíme volání
xterm-color:
xterm-color exec "xterm -fn -misc-fixed-medium-r-semicondensed-sans-13-120-75-75-c-60-iso8859-2 &"
Obdobně je třeba upravit řádek pro vyvolání Emacsu
v /etc/X11/wmconfig/emacs
(místo xterm
a
xterm-color
bude emacs
).
Protože menu Afterstepu se skládá ze dvou částí, je třeba také
upravit v souboru /usr/share/afterstep/wmconfig.conf
řádek
obsahující volání
exec xterm -fn <jméno fontu iso-latin-2> &
.
Totéž (ovšem bez úvodního exec) je třeba udělat v konfiguraci Wharfu
a Zharfu v souborech /usr/share/afterstep/wharf
a
/usr/share/afterstep/zharf
.
Protože klávesová kombinace Alt-Q používaná v Afterstepu pro přepínání
mezi okny koliduje s funkcí přeformátování odstavce v Emacsu, je třeba
změnit kombinaci pro přepínání oken například na Alt-Shift-Q takto: ve
všech souborech v adresáři /use/share/afterstep/feels
v části
Windows-alike keys uděláme tuto změnu:
#alt + shift + q = return to window Key q A SM WarpBack
Potom je ještě třeba donutit Afterstep, aby vytvořil kompletní nový
obsah adresáře GNUstep
. To lze zajistit smazáním adresáře
$HOME/GNUstep
, který bude při příštím startu Afterstepu
automaticky znovuvytvořen se správným obsahem.
Návod na úpravu Star Office verze 3.1, 4.0 a 5.0 pro češtinu je na http://www.intersoft.cz/linux/soffice/.
Zprovoznění české klávesnice v Applixware je trochu magie. Následující postup byl vyzkoušen na RedHat 5.2 s XKB-czsk-forcedIM a s applix-4.3-2 (funguje-li někomu i s jinými verzemi, dejte mi prosím vědět):
Přes ujišťování, že nastavování proměnné _XKB_CHARSET
nemá
pro novou verzi XKB význam, pro Applixware je nezbytné nastavit tuto
proměnnou na hodnotu iso8859-2
. Je vhodné to udělat ve
spouštěcím skriptu /opt/bin/applix
. Je též nutné nastavení
XLIB_FORCE_I18N=2
a LC_CTYPE
nebo LC_ALL
(nejlépe na hodnotu cs_CZ
nebo czech
).
Pro zprovoznění mrtvých kláves je nutné spustit například Word, otevřít menu File --- Save As a v položce File: napsat libovolné písmeno s mrtvou klávesou. Pak už by měly mrtvé klávesy fungovat v celém Applixu.
Pokud jenom potřebujete poštovní program s podporou MIME, zkuste program mutt.
Aby bylo možné odesílat dopisy obsahující národní znaky, je nutné vytvořit
soubor $HOME/.elm/elmheaders
, ve kterém jsou definovány hlavičky,
které mají být přidávány do dopisů:
Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 8bit
Pro plnou podporu MIME je třeba nainstalovat elm ve verzi ME, kterou lze získat na ftp://ftp.muni.cz/pub/linux/distributions/redhat/contrib/i386/elm-2.4ME+pl32-1.i386.rpm nebo ftp://ftp.muni.cz/pub/linux/distributions/redhat/contrib/hurricane/i386/elm-2.4.ME+-37.i386.rpm.
V některých verzích programu elm lze zadat volby přímo v souboru
$HOME/.elm/elmrc
:
charset = iso-8859-2 displaycharset = iso-8859-2 textencoding = 8bit
Metamail je program pro zobrazování MIME zpráv, který je vyvoláván
z poštovních programů. Není to samostatný poštovní program. Pro jeho
používání je nutné nastavit proměnnou prostředí MM_CHARSET
na ISO-8859-2
.
Poštovní program mutt podporuje MIME a znakové sady ISO-8859-x.
V konfiguračním souboru $HOME/.muttrc
je nutné pouze
uvést používané kódování:
set charset="iso-8859-2"
V konfiguračním souboru /usr/local/lib/pine.conf
,
/etc/pine.conf
nebo $HOME/.pinerc
je třeba
uvést používané kódování:
character-set=ISO-8859-2
Pro odesílání osmibitových zpráv je nutné uvést následující volby
v konfiguračním souboru $HOME/.tin/headers
:
Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-2 Content-Transfer-Encoding: 8bit
V konfiguračním souboru /usr/lib/slrn/slrn.rc
nebo
$HOME/.slrnrc
nastavte
set use_mime 1 set mime_charset "iso-8859-2"
V souboru $HOME/.nn/init
je nutné uvést:
set data-bits 8
Program nn pravděpodobně negeneruje správné MIME hlavičky - nevyzkoušeno.
Ma-li být v Linuxu správně vidět diakritika v dlouhých jménech
souborů na partition s Windows-95, je třeba v souboru
/etc/fstab
uvést:
/dev/hda1 /dos/c vfat codepage=852,posix,iocharset=iso8859-2,quiet,umask=000 0 0
Nebo příslušné volby zadat přímo v příkazu mount. Je nutné mít jádro, které podporuje vfat (aspoň 2.0.35).
Wget je program na stahování WWW stránek nebo celých webových serverů na lokální disk. Při jeho používání se můžete setkat s tím, že některé servery samy rozhodují o tom, v jakém kódování mají poslat dokument klientovi, takže dokumenty, které jste si Netscapem bez problémů prohlíželi v ISO-8859-2, wget stáhne bez háčků a čárek v ASCII. V tomto případě obvykle pomůže řádek
header=Accept-Charset: iso-8859-2
v souboru $HOME/.wgetrc
.