Chystáte se vytvářet vícejazyčné aplikace pomocí Delphi 6 Profesional a nevíte, jak na to? Následující článek vám přinese podrobný postup, vhodný i pro začátečníky, jak tuto aplikaci vytvořit. |
|
Při hledání informací o vícejazyčných aplikacích narazíte v nápovědě na odkaz k demonstrační aplikaci „RichEdit“. Bohužel při prvním spuštění v prostředí CZ-Windows XP mě tento příklad příliš nefungoval. Proto jsem se rozhodl vytvořit vlastní jednoduchou aplikaci, na které bych možnosti vícejazyčnosti vyzkoušel.Pro jednoduchost jsem začal jednoduchým formulářem s tlačítkem a několika popiskami. |
|
Vlastní vytvoření aplikace probíhá stejně jako ve všech ostatních případech. Pomocí menu File – New – Application. |
|
Pro rychlost nebudeme v tomto příkladu měnit automaticky vytvořené názvy komponent, přesto v závorce uvedu název a třídu právě vytvářených či měněných komponent.
Na automaticky vytvořený formulář předáme z palety Standart jedno klasické tlačítko (Button1: TButton), jeden ComboBox (ComboBox1: TComboBox) a jeden Label (Label1: TLabel). U posledně přidané komponenty změňte v design módu nastavení Caption na libovolný český text. V našem případě jsem použili řetězec „Vybraný jazyk: CZ“.
ComboBox1 nám bude sloužit k výběru vlastního jazyka. Naplníme tedy jeho položku Items řetězcem „CZ“ a „EN“. Pro dokonalost ještě změňte položku ItemIndex na hodnotu nula. Vlastnímu formuláři ještě změňte velikost na přijatelnou míru a první krok je hotov. Dosavadní výsledek naší práce by mohl vypadat např. následovně: |
|
V tuto chvíli doporučuji celý projekt uložit.
Vlastní logika okna bude fungovat asi následujícím způsobem. Pomocí komponenty ComboBox1 vyberete příslušný jazyk a pak kliknutím na tlačítko Button1 provedeme výsledné přepnutí do vybraného jazyka.
Do obsluhy události OnClick zavedeme tedy novou proceduru Button1Click. V této proceduře provedeme vlastní nahrání nové jazykové mutace pomocí následujícího kódu. |
procedure TForm1.Button1Click(Sender: TObject);
const
ENGLISH = (SUBLANG_ENGLISH_US shl 10) or LANG_ENGLISH;
CZECH = $0405;
begin
if ComboBox1.ItemIndex = 0 then
begin
if LoadNewResourceModule(CZECH) <> 0 then
begin
ReinitializeForms;
end;
end;
if ComboBox1.ItemIndex = 1 then
begin
if LoadNewResourceModule(ENGLISH) <> 0 then
begin
ReinitializeForms;
end;
end;
end; |
|
Zajisté jste si zde všimli dvou dosud neznámých procedur ReinitializeForms a LoadNewResourceModule. Tyto procedury pocházejí ze souboru reinit.pas, který naleznete v již zmiňovaném příkladu „RichEdit“ nebo si jej můžete stáhnout s naším příkladem. Aby byly překladači tyto procedury známy, nezapomeňte jej uvést v v hlavní (úplně až nahoře) sekci uses. V našem příkladu tedy uses vypadají takto : |
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ReInit; |
|
Opět proveďte uložení celého projektu a celkové přeložení. Doporučuji provést přeložení pomocí funkce „Build“ v menu „Project“. Pokud jste zatím postupovali podle pokynů měl by být druhý krok bez větších problému dokončen. |
|
Pro vlastní funkci přepínání jazykových mutací vlastního programu, nyní potřebujeme vygenerovat formuláře ostatních mutací. Pod pojmem mutace, si představte vytvoření souboru v němž jsou vybrané textové řetězce a formuláře vhodné pro překlad do jiného jazyka. Pro vlastní generování použijeme zabudovaného průvodce. Přejděte tedy do menu File – New – Other.. a na záložce New naleznete Resource DLL Wizard |
|
Po spuštění průvodce vás úvodní obrazovka informuje o třech následujících krocích: |
1. Vybrání projektu.
2. Výběr jazyka.
3. Automatické generování. |
Pokračujte tlačítkem Next a průvodce vám nabídne aktuální projekt. Pokud nechcete přidat cokoliv dalšího, pokračujte opět tlačítkem „Next“. Na následující obrazovce vyberte jazyky, ve kterých chcete vlastní aplikaci provozovat. V našem příkladu vybereme jazyky Čeština a Angličtina (Spojené státy). |
|
Dalším krokem je kontrola vybraných jazyků, přidání dalších vybraných souborů a výsledný přehled všech prováděných kroků. V našem příkladu není třeba v těchto třech krocích cokoliv měnit, proto vždy pokračujte tlačítkem „Next“. Jako poslední krok je úplný přehled a informace o tom, co průvodce bude dělat. Automatické generování se spustí po opuštění této poslední stránky stisknutím tlačítka „Finish“. V některých případech vás ještě průvodce může vyzvat k uložení projektu. V tomto případě doporučuji povolit uložení projektu a pokračovat stisknutím tlačítka „Yes“. Po skončení generování se zobrazí okno s výsledky vlastních akcí.
Při generování došlo v adresáři kde máte uloženou naši pokusnou aplikaci k vytvoření dalších dvou adresářů (ENU a CSY). V každém z těchto adresářů jsou uloženy vlastní formuláře pro danou jazykovou mutaci. V tuto chvíli opět proveďte uložení projektu a to tentokrát pomocí „save all“. Uložíte tím i ProjektGroup, do kterého byly předány všechny potřebné nově vzniklé soubory.
Z projektu „Project1.ENU“ vyberte formulář Form1 který v tuto chvíli vypadá úplně stejně jako původní formulář. |
|
U komponenty Label1 změňte v design módu nastavení Caption na libovolný anglický text. V našem případě jsem použili řetězec „Language USA“. U komponenty ComboBox1 ještě změňte položku ItemIndex na hodnotu jedna. Vlastní okno pak bude vypadat asi takto: |
|
V okně „ProjectManager“ se přepněte (aktivujte) na projekt se jménem „Project1.exe“. Znovu uložit pomocí „save all“ a všechno přeložit pomocí menu Project funkce Compile All Projects a Build All Projects. |
|
Nyní je vše připraveno pro první spuštění. Nepřeložené soubory testovací aplikace si můžete stáhnout z adresy http://www.provaz.cz/download_id.php?id=42. Výsledná aplikace není žádným zázrakem ani nepředvádí žádnou efektní grafickou podívanou. Hlavním účelem bylo co nejpodrobněji popsat základní možnost tvorby vícejazyčné aplikace. Tento efekt však může v rukou zkušenějšího programátora proměnit i jednoduchou aplikaci v jazykově nezávislý software. A to se dnes žádá. |
|
Hodně zdaru při vašem programování. |
Jiří Provazník |
|