Ó bože môj! Zase tie preklady

Naspäť

Prekladanie aplikácií je nočnou morou každého developera v našom tíme.

Hľadanie textov, ktoré treba preložiť, vymýšľanie prekladových kľúčov, vytvorenie mapy kľúč : text zaberie strašne veľa času a na konci tohto procesu spravíte obrovský merge request, ktorý (pre koncového používateľa) nezmení vôbec nič.

Väčšinu aplikácií tvoríme na začiatku bez prekladov a väčšinou v slovenčine. Keď však príde klient, ktorý chce aplikáciu používať aj mimo Slovenska, začína sa nočná mora. Ak máte preložiť dve - tri aplikácie, je to hrozné, ale dá sa to prežiť. Ak ich však máte viac ako 30, je to “na guľku”.

Držíme sa hesla “nerob veci viackrát ako treba” a táto prekladová činnosť je navyše nezaujímavá a zdĺhavá. Preto sme sa snažili nájsť riešenie a (aspoň čiastočne) preklady zautomatizovať.

Vytvorili sme preto knižnicu, ktorá nám veľmi pomáha. Obsahuje niekoľko príkazov:

  1. Extractor - nájde nepreložené texty v aplikácii, nahradí ich novým textom, ktoré aplikácia vyhodnocuje ako “bude sa prekladať” (napr. {_’text’} v latte alebo $this->translator->translate('text'); v PHP súboroch Nette aplikácií) a uloží dvojice kľúč: hodnota do prekladovej databázy (napr. translations.sk_SK.neon ak používate kdyby/translation alebo contributte/translation)
  2. Translator - načíta texty z prekladovej databázy, preloží ich do iných jazykov a uloží. Aktuálne je implementovaný pomocou Bing prekladača, ale akékoľvek vylepšenia sú vítané :)
  3. CheckDictionaries - skontroluje, či sú všetky texty vo všetkých jazykových verziách

Extractor a CheckDictionaries sa navyše dajú použiť aj v CI, aby odhaľovali nepreložené texty vo vašich aplikáciách.

Čo sme zistili pri prekladaní našich aplikácii:

  1. Aplikácie, ktoré používali angličtinu v textoch sa prekladali ľahšie - extractor vytvoril prekladové kľúče ľahšie a presnejšie - bez potreby preložiť najprv text zo slovenčiny do angličtiny.
  2. Pravdepodobne nikdy sa vám nepodarí preložiť automaticky celú aplikáciu a už vôbec nie na prvý krát. Vždy zostane niekde nejaký text zabudnutý. Ten treba buď preložiť ručne alebo upraviť konfiguráciu.
  3. Ak je už aplikácia preložená, pri vzniku nových funkcií určite pribudnú ďalšie texty, ktoré treba tiež preložiť. Preto je potrebné mať možnosť púšťať automatické preklady aj viackrát za sebou.

Zjednodušená ukážka konfigurácie pre preklad textov v html tagoch vrámci latte šablón:

// latte files

$latteFileFinder = new FileFinder([$basePath . '/app'], ['*.latte']);

$latteTextFinder = new RegexTextFinder();

$latteTextFinder->addPattern('/\{\_(.*?)\}/', null); // ignoruj uz prelozene texty

$latteTextFinder->addPattern('/[^-]\>([\h]*[\p{L}]+[\p{L}0-9\h\.\,\!\?\/\_\-\$\>\{\}\(\)\']*)\</siu'); // text medzi klasickymi html tagmi > a <

$latteTokenizer = new Tokenizer($latteFileFinder, $latteTextFinder);

$latteTokenizer->addTokenModifier(new BingTranslateTokenModifier('sk', 'en'));

$latteTokenizer->addTokenModifier(new LatteTokenModifier());

$extractorConfig->addTokenizer($latteTokenizer);

return $extractorConfig;

Takáto konfigurácia zabezpečí zmenu z:

<h1>Nadpis</h1>

<p>text</p>

na:

<h1>{_'heading'}</h1>

<p>{_'text'}</p>

a popritom vytvorí prekladový súbor, v ktorom budú prekladové kľúče uložené spolu s pôvodnými hodnotami:

heading: Nadpis

text: text

A ako prekladáte aplikácie vy? Tešíme sa na vaše názory a pripomienky v komentároch pod článkom.

Komentáre

Kontaktujte nás

Neviete správne uchopiť online prezentáciu Vašej spoločnosti? Potrebujete konzultáciu alebo audit doterajších aktivít?