Užitečné komponenty pro Delphi a C++ Builder, díl 17.

Potřebujete přeložit vaši aplikaci do více jazyků a proniknout tak do zahraničí ? Dnes si představíme komponentu, se kterou to bude hračka a výsledek bude rychle hotov téměř bez jediného řádku dalšího programování. Připravte si slovník a vzhůru do překládání.
Nejprve mi dovolte poněkud delší úvod, než se dostaneme k recenzi dnešní komponenty. Následující situaci možná dobře znáte – dokončíte nějakou aplikaci a je čas se o ni podělit s ostatními uživateli (ať už zdarma či za poplatek). Dostupnost vaší aplikace by neměl být v dnešní době Internetu žádný problém a každý si ji tak může stáhnout. Avšak pro Internet také neplatí hranice, takže je dnes nutné počítat s tím, že o vaši aplikaci mohou projevit zájem i uživatelé z ostatních států (a často je to také cílem). Těžko však po nich můžete požadovat znalost českého jazyka. A proto se vlastně ještě v počátcích vývoje aplikace musíte rozhodnout, jak uvedený "problém" vyřešit. Jedno z řešení je prostě rovnou aplikaci naprogramovat v některém ze světových jazyků – zpravidla v angličtině. To je sice jednodušší řešení z programátorského hlediska (jazykové schopnosti programátora a míra jeho "utrpení" při překladu je samozřejmě jiná věc), ale přesto jej nepovažuji za ideální. Přece jen ne každý umí anglicky a navíc jsem toho názoru, že programátor by měl vždy vytvořit také verzi dané aplikace ve svém mateřském jazyce, protože je to prostě "slušnost" vůči jeho krajanům.

Složitá a útrpná práce (mluvíme-li alespoň o mírně rozsáhlejší aplikaci a ne jen o formuláři s dvěma tlačítky) je po dokončení aplikace vše překládat na úrovni zdrojového kódu, ten vždy rekompilovat a distribuovat pro každý jazyk samostatný spustitelný soubor (či instalaci).

Mnohem lepší a dnes zřejmě nejrozšířenější variantou (hovoříme-li o freeware či shareware projektech střední velikosti; operační systém bychom takto zřejmě těžko překládali) je pouze jedna verze aplikace, kdy si uživatel sám v menu vybere požadovaný jazyk a ten je poté ihned (nebo případně po restartu aplikace) nastaven a změní se popisky všech tlačítek, menu a dalších prvků. Samotné jazyky bývají obvykle uloženy ve formě textových souborů různých formátů (např. INI soubory a další), aby byly snadno editovatelné a rychle se daly přidávat další jazyky. Jako dokonalého zástupce této kategorie si můžeme uvést například populární Windows Commander, který se může pyšnit celkem slušným počtem jazykových verzí. Výhoda je právě v tom, že programátor obvykle vytvoří základní verzi například v angličtině a angličtinu ovládající "nadšenci" v konkrétních zemích sami vytvoří vlastní jazykové verze. Ty pak může autor snadno přidat na své stránky či přímo do základní instalace.

Dnes si představíme komponentu, jejíž funkcí je právě co nejvíce programátorovi usnadnit překlad aplikace do různých jazyků. Dnešní komponenta však neřeší problém překladu ani prvním ani druhým způsobem, ale jistou formou kombinuje obě výše zmíněné varianty.

TTranslator

Komponenta pochází z dílen týmu Polycon, je distribuována zdarma se zdrojovými kódy jako open source pod licencí GPL a v nekomerčních aplikacích ji lze použít zdarma.

Bylo řečeno, že komponenta kombinuje výše zmíněné varianty přístupu k překladu. V čem tedy ona kombinace obou postupů spočívá ? První zásadní věcí je to, že jednotlivé jazyky nejsou ukládány do externích textových souborů, a jsou tím pádem přímo součástí souboru aplikace. Přesto je však aplikace distribuována pouze v jedné verzi, není nutné kompilovat pro každý jazyk zvláštní verzi a není problém mezi jazyky za běhu programu libovolně přepínat. Jelikož se jednotlivé jazyky neukládají do zvláštních souborů a jazyky jsou do aplikace přidány při kompilaci, veškerou překladatelskou práci tak musí udělat sám programátor. To je největší nevýhoda tohoto postupu, ale na druhou stranu tak má autor všechny součásti aplikace včetně jazyků plně pod kontrolou. Při troše dobré vůle by se však dal i tento menší problém vyřešit, protože jazyky jsou přece jen ukládány do textového souboru, a sice do souboru DFM, což je textový soubor, ve kterém jsou – jak víte – uloženy parametry příslušného formuláře. Kdyby tedy autor tento soubor na webu zpřístupnil, mohli by programování znalí uživatelé z cizích zemí tento soubor přeložit a zaslat autorovi zpět. Ten by poté projekt znovu zkompiloval a jazyk by byl přidán. Byl by to sice poněkud komplikovanější způsob, ale možnost by to byla.

Pojďme však zpět k popisu naší komponenty. Jakým způsobem tedy celý překlad funguje? Nejprve běžným postupem naprogramujete aplikaci v libovolném původním jazyce. Poté na každý z formulářů, jehož prvky mají být přeloženy, umístíme komponentu TTranslator. Netřeba se starat o jejich synchronizaci, protože všemu „velí“ první komponenta, umístěná na hlavní formulář. Komponenta má jen velmi málo parametrů, protože její hlavní těžiště je jinde (viz dále). Mezi parametry tak patří v podstatě jen jméno aktuálního jazyka a samotné překládané řetězce ve vlastnosti Strings. Vlastní překlad začne tak, že kliknete v Object Inspectoru právě na parametr Strings a otevře se něco jako jazykový editor. Je to okno, které má tři hlavní záložky. Na jedné z nich definujete, které třídy a vlastnosti budou překládány (tedy hlavně všechny textové parametry komponenty, jako jsou Caption, Hint a další). To uděláte velmi snadno, neboť se vám zobrazí hierarchický strom jednotlivých objektů (tedy postupně TComponent -> TControl atd..) na základě komponent použitých na formuláři. Jedním kliknutím tak můžete nadefinovat, že se například budou překládat všechny parametry Caption u všech komponent TButton, a třeba na druhou stranu zakázat překlad parametru Hint. Ve všem máte volnou ruku.

Když máte takto hrubě vytvořen návrh, co všechno bude překládáno, můžete přejít na druhou záložku editoru, kde se v přehledné tabulce mezitím vytvořil seznam všech překládaných objektů (na základě vámi definovaného seznamu, který jste vytvořili před chvílí) s jejich překládanými parametry. Zde se již jedná o přímo konkrétní prvky z formuláře, kdy je v tabulce přehledně uvedeno jejich jméno a ty parametry, které se budou překládat. Další sloupečky tabulky tvoří přímo konkrétní jazyky, jejich počet tedy odpovídá počtu vámi definovaných jazyků (implicitně dva, ale z hlavního menu editoru můžete přidat libovolný počet), a vy pěkně řádek po řádku vyplníte u jednotlivých prvků formuláře vaší aplikace jednotlivé překlady do příslušných sloupců. Vše je krásně přehledné, jednotlivé překlady jsou hezky vedle sebe jako ve slovníku, takže se vám nemůže stát, že zapomenete něco přeložit, protože by prostě u daného jazyka byla nepřehlédnutelná prázdná kolonka.

Třetí záložka tohoto jazykového editoru má na starosti přímo řetězce textu, obsažené ve zdrojovém kódu vaší aplikace. Zde si můžete vytvořit seznam položek (proměnných typu string), které budou rovněž přeloženy, ale nejsou přitom součástí vlastností nějaké komponenty. Je to tedy ideální pro různé dialogy, které se budou uživateli zobrazovat (např. ShowMessage atd..).

Když je všechno hotovo a uloženo, můžete si ihned otestovat, jak překlad funguje. Stačí si přímo v Object Inspectoru vybrat požadovaný jazyk ve vlastnostech komponenty a ten bude hned aplikován i v době návrhu (design-time). Stejně snadné je přepínání jazyků i za běhu programu (run-time), což je pochopitelně primární cíl naší celé dřiny a je to jen otázka velmi jednoduchého volání. Využít můžete i dvě události volané komponentou. Jedná se o události BeforeTranslate (tedy před aplikací překladu) a logicky AfterTranslated (volané po překladu).

A to je vlastně celé. Překlad je hotov. Jak vidíte, postup je poměrně snadný a přímočarý. Je zaměřen na překlad jako takový a samotné programátorské práce je v něm obsaženo naprosté minimum. Díky integrovanému editoru je práce přehledná, bezproblémová a řekl bych i rychlá. Komponenta vám značně usnadní práci, a proto její jedinou nevýhodou je právě nemožnost uložit jazykový překlad do externího textového souboru. Pokud se spokojíte jen s několika málo jazykovými verzemi, tedy přesněji řečeno tolika verzemi, kolik jazyků sami znáte, a zároveň chcete mít vývoj vaší aplikace zcela pod kontrolou, pak je tato komponenta pro vás ideální.

www
verze: 2.0
Delphi: nutno testovat individuálně, pravděpodobně funkční od verze 3 (testoval jsem na verzi 5)
C++ Builder: ?

Diskuze (2) Další článek: Interkamera 2002

Témata článku: Software, Programování, Díl, Jazykový překlad, Libovolný kód, Hlavní nevýhoda, Druhá varianta, Jednotlivé komponenty, Jednotlivé verze, DEL, Komp, Jednotlivý uživatel, Komponenta, Jednotlivý soubor, Největší nevýhoda, Textový řetězec, Jednotlivé prvky, Libovolná aplikace, Primární projekt


Určitě si přečtěte

Dalším gigabitovým hráčem bude ČEZ. Internet již poskytuje prvním zákazníkům
Lukáš Václavík
Poskytovatelé internetuPřipojení k internetu
Microsoft pořád myslí i na odpůrce předplatného. Letos vydá Office 2021
Lukáš Václavík
Microsoft OfficeMicrosoft
Platby kartou se můžou rozšířit úplně všude. Jako terminál poslouží mobil
Lukáš Václavík
BankaPlacení mobilemNFC
Jak najít hranice území obcí a okresů, abyste věděli, kde se můžete pohybovat
Filip KůželJakub Čížek
KoronavirusMapy
Elon Musk podpořil Signal jako náhradu WhatsAppu. Aplikaci okamžitě zavalili uživatelé
Markéta Mikešová
WhatsAppElon MuskFacebook