IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lokalizácia aplikácií v C # .NET

V tomto tutoriále sa pokúsim niečo málo povedať o tom, ako som lokalizoval svoj program. Systém to je kvapku zložitejšie, ale vo výsledku sa oplatí.

Lokalizujeme

Ako prvý nás sa Satik-om napadlo, že si napíšeme vlastný lokalizačný knihovníčku, ktorá bude naším malým potrebám vyhovovať. Ale nakoniec sme sa vrhli na odskúšané a pomerne staršie riešenia - gettext. A pretože existuje aj implementácia aj pre C#, tak je pomerne jednoduché všetko použiť. A práve s ňou to spáchame.

Gettext

Na webe majú síce podrobný návod, ale ... je v ňom pomerne zásadná chyba a tak si postup popíšeme radšej aj tú. Ako základ použijeme obyčajnú konzolovú aplikáciu s jednoduchým a prostým kódom:

Console.WriteLine("Ahoj svete.");
Console.ReadLine();

A práve ten reťazec budeme chcieť prekladať. Fakticky môžeme použiť switch na viac prekladov, ale to nebude moc užitočné a práve s tým nám gettext pomôže. Najskôr vložíme referenciu na knižnicu gettext. Tú spolu so všetkým potrebným nájdeme v pripravenom balíčku v adresári Binaries. Ďalej budeme potrebovať šablónu. Ak sa pýtate, čo to je tá šablóna, tak z nej Visual Studio následne vygeneruje zdrojový kód. V menu pre pridanie sa volá Text Template. Pomenujeme si ju napr. String.tt. Zmažeme celý obsah a nahradíme ho nasledujúcim:

<#@ assembly name="System.Configuration" #>

<#
this.ClassName = "Strings";
this.ResourceName = "Strings";
this.NamespaceName = "Gettext.Samples.Console";
this.DefaultResourceDir = "Resources";
#>

<#@ include file="..\..\Core\Gettext.Cs\Templates\Strings.tt" #>

Tieto riadky sú len nejaké nastavenia šablóny. Jediné čo zmeníme je súčasný menný priestor. Zmeníme teda premennú NamespaceName na menný priestor našej aplikácie. V tomto prípade to bude ConsoleApplicationLocal.

this.NamespaceName = "ConsoleApplicationLocal";

Našu pozornosť ale určite upútal aj posledný riadok, kde sa odkazujeme na ďalší súbor. Ten tiež nájdeme v pripravenom archíve v priečinku Templates. Niekam do projektu si ho rozbalíme. Nesmieme zabudnúť upraviť si k nemu cestu. Ja som si ho dal priamo k zdrojovým kódom a tak moja cesta bude:

<#@ include file="Strings.tt" #>

A máme skoro hotovo. Akonáhle si súbor uložíte, tak sa ihneď vygeneruje príslušný súbor. Na to ako vyzerá a čo robí sa môžete pozrieť sami. Ešte nesmieme zabudnúť pridať referenciu na knižnicu System.Configuration. A máme fakticky hotovo. Teda skoro. Potrebujeme v zdrojovom kóde označiť reťazce, ktoré sa nám budú prekladať. To je však veľmi triviálne. Je na to určená táto metóda:

Console.WriteLine(Strings.T("Ahoj svete."));

Tá sa pokúsi nájsť podľa jazyka operačného systému súbor s prekladmi a pokúsi sa nájsť tento reťazec. Keď ho bude mať, tak ho vráti, inak dostaneme to čo sme odovzdali. Všetko funguje aj pre variant, kde by sme používali String.Format. Jednoducho odovzdáme vkladané súčasti ako parametre:

string vodacek = "Vodacku";
Console.WriteLine(Strings.T("A tebe {0} taky pozdravuju.", vodacek));

Vkladaný reťazec potom bude stále rovnaký a vloží sa na miesto označené v preklade. A sme fakticky hotoví. Programová časť určite, ďalej budeme potrebovať vydolovať reťazca pre preklad, aby ich bolo možné preložiť. Na to máme pribalený nástroj v našom balíku. Len je ho potrebné opäť nakonfigurovať.

Výcuc

V priečinku Gnu.Gettext.Win32 nájdeme všetko potrebné. Rozbaľte si túto zložku do hlavnej zložky vášho projektu. Ja som si ju navyše premenoval na gettext, aby sa mi lepšie pamätala. Do hlavnej zložky projektu si tiež pridáme bat súbor s konfiguráciou. Ja som si ho nazval extract.bat:

echo Setting up global variables...
SET path_xgettext=GetText\xgettext.exe
SET file_list=*.cs
SET path_output=Templates

echo Generating strings po file...
CALL GetText\ExtractStrings.bat Strings
pause

Nastavili sme v ňom základné parametre. Hlavné a dôležitá pre nás je tretia cesta a to do zložky Templates, kde budeme mať súbor s vydolovanými reťazcami. Túto zložku si musíme vytvoriť, inak nám to vôbec nepôjde. Ešte potrebujeme získať bat súbor, ktorý všetko obsluhuje. Ten nájdeme v balíčku v priečinku Scripts. Prekopíruje ho do zložky GetText. A sme aj tu hotoví. Spustíme si extract.bat a počkáme ako dopadneme. Ak úspešne nájdeme v adresári Templates súbor Strings.pot. A práve ten použijeme na preklad.

Prekladáme

Sme v poslednej fáze. Preklad. Pokiaľ si vygenerovaný súbor prehliadnete (je to obyčajný textový súbor), nájdete v ňom toto:

#: ConsoleApplicationLocal\ConsoleApplicationLocal\Program.cs:13
msgid "Ahoj svete."
msgstr ""

#: ConsoleApplicationLocal\ConsoleApplicationLocal\Program.cs:16
#, csharp-format
msgid "A tebe {0} taky pozdravuju."
msgstr ""

Všetko, čo je označené znakom #, je komentár, pre nás je dôležitý msgid, kde je náš pôvodný text v aplikácii. Ten tu ale nesmieme meniť, iba ak ho rovnako zmeníme aj v programe. Preložený text potom dáme do druhého riadku medzi úvodzovky. Vyplníme si krátky preklad, trebárs do slovenčiny. Vyzerať to bude asi takto:

#: ConsoleApplicationLocal\ConsoleApplicationLocal\Program.cs:13
msgid "Ahoj svete."
msgstr "Čuatě."

#: ConsoleApplicationLocal\ConsoleApplicationLocal\Program.cs:16
#, csharp-format
msgid "A tebe {0} taky pozdravuju."
msgstr "Aj tebe {0} pozdravujem."

Slováci prepáčia, snáď. Takto preložený text si uložíme do zložky Resources a do zložky SK-sk. Čo je identifikátor pre slovenčinu. Meno musí zostať Strings a prípona súboru bude po. Dohromady teda Strings.po. Túto zložku so súborom pridáme aj do Visual Studia a nezabudneme súboru nastaviť, aby sa nám skopírovali na výslednej zložky.

Keď teraz program spustíte, tak na českom systéme bude česky a na slovenský slovenský s naším prekladom. My si ale môžeme podstrčiť slovenčinu a to týmto jednoduchým príkazom:

System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("SK-sk");

A hneď sa nám ukáže text lokalizovaný. Existujú rôzne služby, kde môžete spravovať svoje preklady. Trebárs taký Pootle. Ale s tým ešte nemám žiadne skúsenosti, tak uvidíme treba to vydá na ďalší článok.


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 81x (1.23 MB)
Aplikácia je vrátane zdrojových kódov v jazyku C#

 

Všetky články v sekcii
C # - Pre pokročilých
Článok pre vás napísal vodacek
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Vodáček dělá že umí C#, naplno se již pět let angažuje v projektu ŽvB. Nyní studuje na FEI Upa informatiku, ikdyž si připadá spíš na ekonomice. Není mu také cizí PHP a SQL. Naopak cizí mu je Java a Python.
Aktivity