Lokalizační komponenty LangMan

vložil Radek Červinka 29. října 2010 22:17

Byl jsem upozorněn na zajímavou možnost lokalizace za pomocí komponent LangMan a jelikož mne produkt opravdu zaujal tak na něho upozorňuji.

Autorem je Ing. Tomáš Halabala ze serveru regulace.org. Komponenty jsou pro nekomerční použití zdarma, jinak za 89 Kč pro jednu aplikaci, což je velmi příznivá cena a za to co umí je to celkem směšné. Navíc na stránkách je video ukazující použití komponent, což je ale také jedna z nejlepších ukázek jak v Delphi udělat aplikaci. Nevím jak dlouho to autor nacvičoval, ale celkem mne rychlostí a délkou prezentace dostal (a to si myslím, že jsem už něco zvládl). Podívejte se sami.

Podrobnější informace od autora: Balíček komponent LangMan slouží pro velice jednoduchou tvorbu multijazyčných aplikací v Delphi. Tyto komponenty vás doslova zprostí od všech starostí s programováním překladů, přepínání jazyků a zachovává plnou přehlednost ve zdrojovém kódu.

Svou aplikaci tvoříte v libovolném základním jazyce bez ohledu na nutnost budoucího překladu do dalších jazyků. Pouze u řetězců přiřazovaných za běhu programu je nutné se odvolávat na lexikony, jež jsou součástí této série komponent. Při návrhu formulářů je také dobré dbát na proměnnou délku řetězců. Všechno ostatní je plně automatické.

Výsledné jazykové soubory lze distribuovat jednak současně s aplikací, ale hlavně i samostatně, čímž lze jednoduše opravit nebo přidat nový jazyk v cílové aplikaci u uživatele. Další výhodou LangManu je schopnost jazyky dědit a to bez omezení hloubky. Lze dědit jazyk z jazyka a ten z jiného jazyka a tak dále, dokonce to vřele doporučuji. Má to tu výhodu, že při opomenutí přeložení nějaké komponenty může například slovenská verze vycházet z české či naopak, nebo americká z britské, rakouská z německé apod. Zároveň to dovoluje překládat některé jazyky pouze částečně, čímž lze zase ušetřit spoustu času.

LangMan sám automaticky vytvoří funkční odkazy ve zvoleném menu pro výběr jazyka. Nebo lze pro uživatelskou volbu jazyka do aplikace vložit vizuální komponentu TLangCombo případně TLangFlagsCombo. To vše je absolutně bez práce a bez složitého nastavování. Jednotlivým jazykům lze přiřadit i grafický symbol či vlajku, která se automaticky zobrazí v menu s výběrem jazyka.

LangMan podporuje znakovou sadu UNICODE a umí do libovolného jazyka automaticky překládat všechny standardní komponenty, které jsou obsaženy v Delphi do verze 2009 (včetně). Toto platí i pro zděděné vlastnosti od standardních komponent Delphi, tj. pokud vývojář použije pro svou komponentu standardní prvek Delphi, budou automaticky překládány i zděděné vlastnosti jeho komponenty. Cizí nebo vlastní komponenty, které nevychází ze standardních komponent lze překládat ručně v události OnChangeLanguage pomocí lexikonů nebo lze v jednotce LMAdditions s minimální obtížností doprogramovat automatický překlad libovolných jiných komponent.

Pokud je překlad některých vlastností nežádoucí, existuje samozřejmě i několik možností, jak překládání zakázat. Nejdříve bych ještě podotknul, že je LangMan dost inteligentní a nezahrnuje do překladu žádné zbytečnosti, nýbrž pouze ty vlastnosti komponent, jejichž překlad je v 99% žádoucí. Do překladů nejsou zahrnovány žádné řetězce, které neobsahují text. Dále nejsou překládány řetězce shodné s názvem příslušné komponenty. Překlad konkrétních vlastností lze navíc v nastavení jednoduše zakázat. Každý formulář může mít jiné nastavení.

Podle mne moc pěkné.

Tagy:

Delphi | Komponenty

Komentáře

29.10.2010 22:55:27 #

pingback

Pingback from topsy.com

Twitter Trackbacks for
        
        Delphi.cz | LokalizaÄŤnĂ­ komponenty LangMan
        [delphi.cz]
        on Topsy.com

topsy.com

30.10.2010 13:41:06 #

<z>

ja pouzivam DKLang, open-source
http://www.dk-soft.org/products/dklang/

zkousel jsem ruzny - SiComponents TsiLang, gettext i LangMan, ale DKLang jsem si oblibil ...
ale nevypada to spatne ;)

<z>

30.10.2010 20:53:28 #

Radim

Neviem kde si to moyem stiahnut, som u autora registrovany, pridal som si do kosika a nic!

Radim

30.10.2010 20:56:13 #

Radim

A, uz som to nasiel.

Radim

30.10.2010 20:57:13 #

pepak

Já používám DxGetText, Delphovskou implementaci GetTextu. Vzhledem k tomu, že se mi nepodařilo bez registrace a bez Flashe najít žádný kód podle LangManu, tak to nemohu srovnat, ale na DxGetText oceňuji velmi širokou podporu ze strany třetích stran - přeci jenom GetText je de-facto standard.
http://dxgettext.po.dk/

pepak

30.10.2010 21:59:56 #

radekc

Škoda, že ses nepodíval na to video (asi používá flash) ukazující použití. Mi to přijde jako opravdu velmi zajímavé. Ale je dobře, že je tu uvedena i jiná možnost. Díky za odkaz.

radekc

1.11.2010 8:32:44 #

pepak

Už jsem se podíval na to video. Určitě je to zajímavé, ale pro moje potřeby bohužel málo vhodné - co jsem viděl, zdálo se mi, že to je určené hlavně pro případy, kdy programuju vizuálně a celkem mě nezajímá, jak velký bude výsledný soubor nebo jakou bude mít strukturu. V takovém případě je ale z uživatelského hlediska super, že mám všechno, co potřebuju pro překlad, přímo v programu.

pepak

6.11.2010 17:02:05 #

Tomáš Halabala

radekc: Děkuji za článek. LangMan jsem psal především pro sebe, ne s cílem na tom vydělat, proto je cena za komerční využití vlastně jen symbolická. Ano ta ukázka je ve flashi, vytvořená pomocí CamStudia a to co je zveřejněno je snad desátý pokus - nechtěl jsem se za to video stydět, tak jsem si dal záležet :-) Především má hlavně znázorňovat jak je práce s LangManem jednoduchá a nezatěžuje programátora.
V mých programech je často žádoucí, aby si mohl uživatel snadno udělat vlastní lokalizaci do dalšího jazyka, třeba pro různé jazyky tiskových sestav apod. takže je tvorba jazykových knihoven vlastně runtimovou záležitostí s tím, že se dá editor v případě potřeby u finálního vydání aplikace snadno zakázat.

pepak: Výsledný jazykový soubor má jednoduchou textovou strukturu, takovou, aby se dal snadno editovat a přitom bylo zřejmé, ke které komponentě a vlastnosti, který text patří. Kdo nechce, aby šlo jazyk snadno editovat, umí jej LangMan udržovat pouze v "resources" exáče a v tom už se uživatel laik tak snadno hrabat nebude.

Pro vícejazyčné NEvizuální komponenty a pro univerzálnější použití slouží komponenty TDesignedLexicon a TProgrammableLexicon. V prvním případě definujete řetězce v referenčním jazyce pomocí editoru v object inspectoru a u programovatelného lexikonu řetězce definujete ve zdrojáku pomocí DefineItem. Oba lexikony pak fungují tak, že si z nich v programu berete požadovaný řetězec už v tom zvoleném jazyce pomocí vlastnosti Item[]. Takže když mám pak v programu třeba nějakou hlášku, tak to vypadá takto:

ShowMessage(Lex.Item[1]);

Lex je název příslušného lexikonu, který v uvedeném případě vrátí řetězec pod indexem 1 v právě aktivním jazyce.
Vy jako tvůrce vaší aplikace si zvolíte jeden jazyk jako referenční "DesignedLanguage". V tomto jazyce napíšete celý program nebo část spadající pod příslušný TLangManEngine - jazykových enginů můžete mít v aplikaci klidně několik, já například používám jeden engine pro samotnou aplikaci a další pro tiskové výstupy, exporty apod. - každý engine má pak svou oddělenou databázi jazyků a řetězců. No a pak už si další jazyky jen libovolně a snadno přidáváte a upravujete v zabudovaném editoru.
Pokud jde o lexikony, chtěl jsem ještě doprogramovat lexikon, který by uměl použití řetězce skloubit s referenčním řetězcem, názorná ukázka:

ShowMessage(Lex.Item('LangMan is the best'));

takže by se dosáhlo lepší přehlednosti zdrojáku, protože by byl referenční jazyk řetězce definován na stejném místě, kde je i použit. Bohužel tento způsob trochu odporuje filozofii LangMana, který potřebuje pro schopnost převodu všech řetězců programu, které mají být vícejazyčné, je znát v okamžiku vytváření nové lokalizace, což by se tímto postupem snadno udělat nedalo, protože by se například tento řetězec objevil v databázi editoru až po zavolání metody Item. Zatím je tedy nutné používat číselné indexy a k nim např. v OnCreate přiřazovat referenční řetězce, nicméně podpora pro nevizuální programování u LangMana jistě je.

Kdyby měl někdo ze zdejších nějaký námět na vylepšení nebo námět na přidání nějakých komponent pro automatický překlad, pište mi na e-mail uvedený v hlavičkách zdrojáků komponent LangMan. Brzy budu například přidávat komponenty od TMS.

Jo a k tomu stahování LangMana z www.regulace.org, uznávám, že je to trochu nepřehledné. Po vložení do košíku a vlastně jakoby objednání (i u té verze za 0Kč) se ihned po dokončení objednávky objeví v pravé liště stránek pod okýnkem košík, okno pro stažení komponenty. Po zpracování objednávky administrátorem se navíc objeví možnost stažení po přihlášení v historii objednávek.

Tomáš Halabala

6.11.2010 18:01:12 #

Tomáš Halabala

pepak: Ještě bych dodal, že LangMan umí i překlad složitějších dynamicky generovaných textů. Další info k této funkci viz článek: http://www.regulace.org/article_info.php?articles_id=12

Tomáš Halabala

13.10.2011 13:20:10 #

bullhead

Jen pro info:

- TSILang je již pro XE2
- DKLang se snad již ani nevyvíjí (2008 poslední verze)
- LangMan již půl roku taky nic.

B.

bullhead

15.10.2011 9:56:18 #

Tomáš Halabala

LangMan je živý. Žádná aktualizace za posledního půl roku nebyla, protože nebylo potřeba. U poslední verze nebyla hlášena ani si nejsem vědom žádné chyby. Delphi XE bohužel nemám, takže FireMonkey zatím není podporována. Protože LangMan sám používám a používat nadále budu, jsou zajištěny i budoucí aktualizace. Delphi budu upgradovat asi po vydání příští verze.

Tomáš Halabala

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců