Vše o lokalizaci

Když se v listopadu roku 1992 objevila nová verze operačního systému Workbench 2.1, přinesla sebou na svou dobu doposud nevídanou možnost lokalizace programů pomocí knihovny locale.library. Původní nápad byl vcelku geniální. Programátoři mohli i nadále tvořit své programy jako byli zvyklí doposud, ovšem veškeré texty mohli umístit do externích souborů, tzv. katalogů. Tyto katalogy jsou zcela nezávislé na samotném programu. Pro vytvoření dalšího překladu tak stačí pouze vytvořit nový lokalizační katalog (bez nutnosti jakéhokoli zásahu do samotného programu).

V době největšího rozkvětu existovalo pro Amigu téměř třicet různých českých a slovenských kódování. Mezi nejznámější patřily hlavně CS/Moje3, KOI8, Ami, Viza, WPTF, PBX ,  CZ nebo E2... Několik norem značně znesnadňovalo samotnou tvorbu lokalizačních katalogů.

Postupem času se více prosadila hlavně dvě kódování - KOI8 a E2. Mnohem rozšířenější byla norma KOI8, kterou původně při svých překladech používali také členové české sekce organizace ATO. Během překladů náročnějších projektů, zejména síťových a s textem pracujících programů, které by měly uživatelům umožnit snadnou komunikaci se zahraničím či bezproblémové formátování textu, se však překladatelé ATO stále častěji setkávali s omezeními normy KOI8. Význam této normy dále poklesl s nástupem nových konvertovacích programű, které umožnily snadný převod textů či katalogů mezi jednotlivými normami češtiny, zejména mezi KOI8 a stále oblíbenější, technicky mnohem propracovanější normou E2. I proto se ATO-CZ po důkladné diskuzi rozhodlo plně přejít na kódování ATO-E2. Tato norma zanikla až s příchodem systému AmigaOS 4.x, kdy došlo ke změně standardu na ISO-8859-2.


Pokud daný program podporuje lokalizaci, pak při spouštění hledá svůj katalog v příslušném adresáři podle zvoleného jazyka. Pokud ho nenalezne pokračuje plynule dál a používá texty integrované (většinou anglické). Pokud však daný katalog nalezne, pak začne používat při výstupu na obrazovku speciálních funkcí, které preferují texty z katalogu oproti originálu obsaženému v programu.

Při práci s lokalizačními katalogy a jejich zdroji budeme pracovat se třemi typy souborů. Proto hned na začátku si vysvětlíme o jaké soubory se jedná a jakou mají funkci. V tomto článku budeme pro ilustraci používat soubory z AHI, v tomto případě se bude jednat o následující soubory:

  • ahi.cd
    • zdrojový soubor, tzv. Catalog Description. Tento soubor vytvářejí samotní programátoři pro potřeby lokalizace svých programů. Slouží jako zdroj lokalizovatelných výrazů pro soubor ahi.ct.
  • ahi.ct
    • překladový soubor, tzv. Catalog Translation. Tento soubor obsahuje samotnou lokalizaci daného programu. Svým obsahem je velice podobný souboru ahi.cd, ale narozdíl od něj neobsahuje příkazy, informace o ID textového řetězce ani jeho délce (tyto informace se následně získávájí právě ze souboru ahi.cd).
  • ahi.catalog
    • Samotný lokalizační katalog, který je výsledkem kompilace souborů ahi.cd a ahi.ct.

Existují však některé programy (např. WordWorth a PersonalPaint), které mají lokalizaci řešenu zcela odlišně. Tyto programy mají všechny své texty, zprávy, nabídky atd. uloženy ve speciálním formátu v externím souboru a lokalizace docílíte pouze jeho přeložením (přepsáním). Tento druh lokalizace lze však používat i na systémech, které systém lokalizace nepodporují, tedy i na staré A500 s Workbenchem 1.2/1.3.

Ačkoli nemusíme soubor ahi.cd nijak upravovat, je nutné z něj získat číslo jeho verze. Tu je nutné znát při tvorbě verze souboru ahi.ct. V opačném případě lze očekávat problémy. Otevřeme tedy soubor ahi.cd v libovolném textovém editoru a podíváme se na druhý řádek, který by měl vypadat následovně:

Začátek zdrojového souboru:

#language english
#version 4

Pro nás je nejzajímavější právě druhý řádek, obsahující direktivu #version. Zde si musíme vysvětlit jednu věc. Pokud je v souboru ahi.cd uvedena verze 4, musí první řádek v souboru ahi.ct (obsahující direktivu ## version) obsahovat verzi 0.xx nebo 4.xx.

Začátek překladového souboru:

## version $VER: ahi.catalog 4.8 (24.4.2007)
## language czech
## codeset 5
;
;    AHI - Hardware independent audio subsystem
;    Copyright (C) 1996-2005 Martin Blom
;     
;    This library is free software; you can redistribute it and/or
;    modify it under the terms of the GNU Library General Public
;    License as published by the Free Software Foundation; either
;    version 2 of the License, or (at your option) any later version.
;     
;    This library is distributed in the hope that it will be useful,
;    but WITHOUT ANY WARRANTY; without even the implied warranty of
;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
;    Library General Public License for more details.
;     
;    You should have received a copy of the GNU Library General Public
;    License along with this library; if not, write to the
;    Free Software Foundation, Inc., 59 Temple Place - Suite 330, Cambridge,
;    MA 02139, USA.
;
; Input and Output connector name
;
msgDefault
Výchozí
; Default

První řádek vždy tvoří informace o verzi daného katalogu. K tomu je určen příkaz ## version, který zobrazí informace o jeho verzi při použití AmigaDOS příkazu Version.

Příklad:

## version $VER: ahi.catalog 4.8 (24.4.2007)

Verze tohoto katalogu je 4. Proto verze souboru ahi.cd musí být 0 nebo 4. Následuje informaci o datu vytvoření katalogu (24.04.2007). Druhým řádkem je informace o jazyku lokalizace. K tomu je určen příkaz ## language, kterým se nastavuje cílová lokalizace. Příkazy## version a ## language se musejí nacházet v každém lokalizačním souboru.

Příklad:

## language czech

Dalším velice důležitým příkazem je ## codeset, kterým se definuje potřebné kódování.Pro naše potřeby je dobré vědět, že u systémů AmigaOS 2.1, AmigaOS 3.x, Morphos a AROS je možné nechat nastavenu výchozí hodnotu 0. Pro systém AmigaOS 4.x je jí však nutné změnit na hodnotu 5.

Příklad pro AmigaOS 2.1, AmigaOS 3.x, Morphos a AROS:

## codeset 0

Příklad pro AmigaOS 4.x:

## codeset 5

Řádky začínající středníkem jsou považovány za komentáře a nejsou při samotné kompilaci katalogu nijak využívány. Pro překladatele jsou však nejdůležitější následující řádky:

msgDefault
Výchozí
; Default

Zde slovo msgDefault označuje funkci, pro kterou je určen následující překlad Výchozí. Na konci se nachází původní anglický význam slova nebo věty ; Default, který je označen středníkem jako komentář. Potom co přeložíte celý soubor ahi.ct, můžete přejít ke kompilaci samotného lokalizačního katalogu.


Dřív než přejdeme k samotné kompilaci lokalizačních katalogů, tak si ověříme jestli jsme neudělali někde v překladu chybu. I když si můžete být sebejistější, že je vše v pořádku, může být v lokalizaci mnohem více chyb než by vás napadlo. Není sice nutné odstranit úplně všechny nalezené chyby, ale přecijen čím méně jich bude, tím lépe.

K dispozici jsou dvě metody, které je vhodné provádět postupně za sebou. První metodou je základní kontrola pomocí programu FlexCat, jenž oznámí oznámí např. nesrovnalosti ve verzích, direktivách z hlavičky, chybějící a přebývající texty ve zdroji a překladu.

Standardní test:

FlexCat wookiechat.cd wookiechat.ct

Pokud FlexCat narazí na nějakou chybu, zobrazí jí v následujícícm formátu:

wookiechat.ct, řádek č.1 - CHYBA: znaky navíc na konci řádku

Jak vidíte, jedna nalezená chyba nevypadá zle. Ale abychom měli opravdu jistotu, provedeme ještě druhý, trochu tvdrší test pomocí programu CatCheck, který v roce 1999 vytvořil Sönke Tesch.

Tento program kromně výše uvedeného kontroluje také strikně správnost syntaxe, pořadí a počet parametrů v odpovídajících textech zdroje i překladu a mnoho dalších věcí. Navíc je k tomu schopen přibrat také vygenerovaný katalog a ten proveří vůči zdrojům. V případě neodladěného překladu je výsledkem obvykle obludně dlouhý výpis nalezených. Proto je lepší tento test provádět až po opravách provedených první metodou. 

Ideální bude spouštět tento program z místa, kde máte uloženy veškeré soubory. V našem případě tedy soubory wookiechat.cd, wookiechat.ct a wookiechat.catalog. Poté již stačí spustit CatCheck a zjistit, jestli se v překladu nacháejí chyby:

Kontrola zdrojů:

CatCheck ahi.ct

V průběhu kontroly jsou informace o nalezených chybách zobrazovány přímo v okně CLI. Pokud bude (a to bude často) nalezeno více chyb, bude mnohem lepší přesměrovat výstup z okna do souboru.

Kontrola zdrojů s výstupem do souboru error.txt:

CatCheck ahi.ct >error.txt

Tento textový soubor lze následně otevřít jakýmkoli editorem, v kterém lze v našem případě vidět následující chyby:

ahi.cd                 2224  11-Nov-2010 11:25:35 - english, 4 (date unknown)
ahi.ct                 2680  11-Nov-2010 11:25:35 - czech, 4.8, 24-Apr-2007
ahi.catalog             692  11-Nov-2010 11:26:49 - czech, 4.8, 24-Apr-2007
ahi.cd, line 2, pos 10: Version string should start with '$VER:'.
ahi.cd, line 24, pos 16: end of line expected - read word: `msgDefault (//)
ahi.ct, string msgDefault
: A string of that name is not defined in description.
ahi.ct, string msgMenuControl
: A string of that name is not defined in description.
ahi.ct, string msgMenuLastMode
: A string of that name is not defined in description.
ahi.ct, string msgMenuNextMode
: A string of that name is not defined in description.
ahi.ct, string msgMenuPropertyList
: A string of that name is not defined in description.
ahi.ct, string msgMenuRestore
: A string of that name is not defined in description.
ahi.ct, string msgMenuOK
: A string of that name is not defined in description.
ahi.ct, string msgMenuCancel
: A string of that name is not defined in description.
ahi.ct, string msgUnknown
: A string of that name is not defined in description.
ahi.ct, string msgReqOK
: A string of that name is not defined in description.
ahi.ct, string msgReqCancel
: A string of that name is not defined in description.
ahi.ct, string msgReqFrequency
: A string of that name is not defined in description.
ahi.ct, string msgDefaultMode
: A string of that name is not defined in description.
ahi.ct, string msgReqInfoTitle
: A string of that name is not defined in description.
ahi.ct, string msgReqInfoAudioID
: A string of that name is not defined in description.
ahi.ct, string msgReqInfoResolution
: A string of that name is not defined in description.
ahi.ct, string msgReqInfoMono
: A string of that name is not defined in description.
ahi.ct, string msgReqInfoStereo
: A string of that name is not defined in description.
ahi.ct, string msgReqInfoStereoPan
: A string of that name is not defined in description.
ahi.ct, string msgReqInfoChannels
: A string of that name is not defined in description.
ahi.ct, string msgReqInfoMixrate
: A string of that name is not defined in description.
ahi.ct, string msgReqInfoHiFi
: A string of that name is not defined in description.
ahi.ct, string msgReqInfoRecordHalf
: A string of that name is not defined in description.
ahi.ct, string msgReqInfoRecordFull
: A string of that name is not defined in description.
ahi.ct, string msgReqInfoMultiChannel
: A string of that name is not defined in description.
ahi.ct, string msgFreqFmt
: A string of that name is not defined in description.
ahi.catalog: Language of catalog and translation are not the same.
ahi (czech): Description 1 warnings, 1 errors. Translation 52 errors. Catalog 1 errors.

První tři řádky obsahují informace o verzích jednotlivých souborech. Následují nalezené chyby v souboru ahi.cd, následně v souboru ahi.ct a nakonec v samotném katalogu ahi.catalog. U káždé nalezené chyby se nachází i informace, na kterém řádku v daném souboru se chyba nachází a co přesně je špatně. Seznam všech chyb včetně jejich přesného popisu a možnostech opravy naleznete v dokumentaci programu CatCheck. Poslední řádek pak obsahuje souhrn počtu všech nalezených chyb v jednotlivých souborech.

V této fázi nám nezbývá nic jiného, než postupně znovu projít zdrojové soubory a postupně opravit nalezené chyby. Pokud tedy opravíte vše, bude zapotřebí znovu zkompilovat soubor ahi.catalog pomocí programu FlexCat a znovu provést kontrolu. Když se vám podaří opravit většinu nalezených chyb, můžete svůj překlad s klidným svědomím umístit ke stažení.


Pokud máme dokončen kompletní překlad původního .ct souboru, musíme z něj ještě zkompilovat samotný lokalizační katalog, který už bude možné použít v samotném programu pro který je určen.

K tomu je nejlepší použít program FlexCat (Flexible Catalogs) od Jense Langnera, který si lze zdarma stáhnout z Aminetu. K dispozici je samozřejmě pro všechny Amiga systémy, dokonce i pro Linux. Jedná se o jednoduchý nástoj spouštěný z CLI, který není nikterak složitý na používání. Z archivu stačí přemístit verzi programu určenou pro svůj systém do složky C: a následně s ním lze již libovolně pracovat.

Pokud tedy máme již hotový překlad, můžeme zkusit vytvořit konečný lokalizační katalog. K tomu nám bude stačit zadat v CLI následující příkaz:

Kompilace lokalizačního katalogu:

FlexCat ahi.cd ahi.ct CATALOG ahi.catalog

Pokud však ještě překládáte a chcete svůj překlad průběžně zkoušet, můžete využít kompilaci katalogu s přepínačem FLUSH. AmigaOS totiž při spuštění daného programu načítá lokalizační katalogy (stejně jako knihovny, fonty atd...) do vyrovnávací paměti. Proto aby se dané změny projevily musíte tuto paměť pokaždé nejdříve vyčistit (např. příkazem C:AVAIL FLUSH), aby došlo k načtení změněného katalogu z disku (jinak dojde k jeho načtení z vyrovnávací paměti).

Pokud tedy při kompilaci použite zároveň tento přepínač, tak FlexCat automaticky odstraní z paměti všechny nepotřebné věci. V tomto případě bude příkaz pro tvorbu katalogu vypadat následovně:

Kompilace lokalizačního katalogu s vyčištěním paměti:

FlexCat ahi.cd ahi.ct CATALOG ahi.catalog FLUSH

Program FlexCat toho samozřejmě umí daleko více, ovšem pro naše potřeby plně postačí tyto dva příkazy. Výsledkem bude nový soubor ahi.catalog, který stačí přesunout do složky Locale:Catalogs/Czech. Pokud je vše v pořádku, pak po spuštění daného programu by s námi již měl komunikovat v rodném jazyce.


Jistě vás napadla otázka, co nastane ve chvíli, když se objeví nová verze vámi lokalizovaného programu. Vše od začátku by se vám určitě dělat nechtělo. A naštěstí to taky nebudete muset dělat.

K aktualizaci překladového souboru (wookiechat.ct) bude stačit nová verze zdroje (wookiechat.cd). Vše ostatní za nás udělá program FlexCat.

  • wookiechat.cd - nová verze zdrojového souboru
  • wookiechat.ct - původní verze překladového souboru

Nyní budeme potřebovat doplnit původní překladový soubor a nové texty, které se mohly objevit v nové verzi zdrojového souboru. V CLI tedy zadáme příkaz:

Vytvoření aktualizované verze souboru wookiechat.ct

FlexCat wookiechat.cd wookiechat.ct NEWCTFILE wookiechat_new.ct COPYMSGNEW

Tímto získáme aktualizovaný soubor wookiechat_new.ct, v kterém nalezneme všechny nové výrazy k překladu. Jelikož jsme v předchozím příkaze použili také parametr COPYMSGNEW, budou veškeré doplněné informace označeny komentářem NEW. I přesto je však lepší provést porovnání obou souborů s překladem a zjistit změny. Kromě nových textů se totiž autor mohl také rozhodnout změnit formulaci nebo nedejbože pořadí a počet parametrů v původních textech. A to není při aktualizaci nikterak zaznačeno.


   Jak jsme se již několikrát v tomto článku zmínili, budete potřebovat hlavně následující programy:

  • FlexCat 2.18 - program pro tvorbu lokalizačních katalogů ze zdrojových souborů, určený pro systémy AmigaOS 2.0+, AmigaOS 4.x, MorphOS, AROS a Linux.
  • CatCheck 1.4 - program pro kontrolu zdrojových souborů, určený pro systém AmigaOS 2.0+ (ale funguje bez problémů i pod ostatními).

Pokud se rozhodnete pracovat na lokalizacích na PC, bude potřebovat jeden z dostupných textových editorů schopných pracovat s kódováním ISO-8859-2.

  • PSPad - vynikající freeware editor.