Automatizovaný preklad

Na mnohých web stránkach sa môžeme stretnúť s jazykovými mutáciami. Spracovanie a preklady textov od profesionálnych prekladateľov vyžadujú nie len čas, ale aj financie. Ak potrebujeme stránky priblížiť aj pre návštevníkov zo zahraničiam, pričom nepotrebujeme 100 % preklad a korektúru textu, najlepšie riešenie je použitie prekladača Google Translator. Kto má skúsenosti s automatizovaným prekladom pomocou Google, určite narazil na viaceré úskalia. Je to napr. horná lišta upozorňujúca na preklad a jeho možnosti - obr. 1:

translator

Ďalej to je vyskakujúce okno pôvodného textu, odkrytie elementov, ktoré boli pomocou CSS skryté, prípadne zaujímavý a chybný preklad mien, názvov a pod (obsah v rámcoch) - obr. 2.

translator

Nasledujúci kód sa postará o odstránenie spomenutých nedostatkov a automatizovaný preklad nadobudne trochu iný rozmer. Tento systém som použil na svojich stránkach, je im prisposobený, ale jeho úprava nebude vyžadovať veľa úsilia. Na začiatok bol definovaný div, ktorý obsahuje prepojenia pre preklad.
<div id="jazyky">
<a href="https://www.dkubinsky.sk">
<img src="translator/flag_sk.png" width="20" height="12" alt="sk"/>
</a>
<a href="translator/?jazyk=en&amp;preloz=uvod">
<img src="flag_en.png" width="20" height="12" alt="en"/>
</a>
<a href="translator/?jazyk=de&amp;preloz=uvod">
<img src="flag_de.png" width="20" height="12" alt="de"/>
</a>
<a href="translator/?jazyk=fr&amp;preloz=uvod">
<img src="flag_fr.png" width="20" height="12" alt="fr"/>
</a>
<a href="translator/?jazyk=hu&amp;preloz=uvod">
<img src="flag_hu.png" width="20" height="12" alt="hu"/>
</a>
<a href="translator/?jazyk=pl&amp;preloz=uvod">
<img src="flag_pl.png" width="20" height="12" alt="pl"/>
</a>
<a href="translator/?jazyk=zh-TW&amp;preloz=uvod">
<img src="flag_zh-CN.png" width="20" height="12" alt="zh-TW"/>
</a>
</div>
Nasleduje obsah súboru, ktorý spracuje automatizovaný preklad a upraví ho do prijateľnej podoby. Adresa pre automatizovaný preklad službou Google Translator vyzerá nasledovne:
http://translate.google.com/translate?js=y&prev=_t&hl=sk&ie=UTF-8&layout=1&eotf=1&u=http%3A%2F%2Fwww.dkubinsky.sk/%2F&sl=auto&tl=en
Vidíme dve dôležité premenné a to URL a uplne na konci kód jazyka. Z kódy kde sme definovali jazykové prepojenia je jasné, že premenná jazyk je definovaná napr. jazyk=de, pričom na ďalšie spracovanie k nej pomocou php pristupujeme cez $_GET['jazyk']. Upravené boli aj hypertextové odkazy po preklade na tvar napr. ?jazyk=pl&preloz=studium/diplomovapraca, kde je zrejmé o akú adresu na domené sa jedná a aký jazyk má byť použitý. Nalseduje zrdojový kód, ktorý preklad spracuje a upraví výstup:
<?php

if($_GET['jazyk']=="de" or $_GET['jazyk']=="en" or $_GET['jazyk']=="fr" or $_GET['jazyk']=="zh-TW" or $_GET['jazyk']=="hu" or $_GET['jazyk']=="pl")
{
$jazyk = $_GET['jazyk'];
}
elseif($_GET['jazyk']==NULL)
{
$jazyk = "en";
}
else
{
$jazyk = "en";
}

if($_GET['preloz']==NULL)
{
$_GET['preloz']="uvod";
}

$text = file_get_contents('http://translate.google.com/translate?js=y&prev=_t&hl=sk&ie=UTF-8&layout=1&eotf=1&u=http%3A%2F%2Fwww.dkubinsky.sk/'.$_GET['preloz'].'%2F&sl=auto&tl='.$jazyk.'');

$x = array();
$y = array();
$z = array();
$a = "/<frame.*src=[("|')]+([^("|')]+)[("|')].*>/i";
preg_match_all($a, $text, $x, PREG_SET_ORDER);
$a = 0;
foreach($x as $y)
{
$y[1]=str_replace("&amp;","&",$y[1]);

$z[$a] = "http://translate.google.com".$y[1];
$a++;
}
$vystup = implode("n<br />n",$z);

$text = file_get_contents(''.$vystup.'');

function bbcode($text)
{
$s = str_replace("]n", "]", $s);
$match = array(
'#<span onmouseover="_tipon(.*?)</span>#se',
'#<style type="text/css"(.*?)</style>#se',
'#<h1>(.*?)</h1>#se',
'#<iframe(.*?)</iframe>#se',
'#&amp;prev(.*?)>#se',
);
$replace = array(
"''",
"''",
"''",
"''",
"'">'",
);

return preg_replace($match, $replace, $text);
}     

$text = bbcode($text);

$text = str_replace("http://translate.googleusercontent.com/translate_c?hl=sk&amp;ie=UTF-8&amp;sl=auto&amp;tl=".$jazyk."&amp;u=","",$text);

$text = str_replace('<a href="https://www.dkubinsky.sk/','<a href="http://dkubinsky.sk/translator/?jazyk='.$jazyk.'&amp;preloz=',$text);

function orez($text)
{
$s = str_replace("]n", "]", $s);
$match = array(
'#<div id="jazyky">(.*?)</div>#se',
);
$replace = array(
"'<div id="jazyky">
<a href="http://www.dkubinsky.sk"><img src="flag_sk.png" width="20" height="12" alt="sk"/></a>
<a href="translator/?jazyk=en&amp;preloz=uvod"><img src="flag_en.png" width="20" height="12" alt="en"/></a>
<a href="translator/?jazyk=de&amp;preloz=uvod"><img src="flag_de.png" width="20" height="12" alt="de"/></a>
<a href="translator/?jazyk=fr&amp;preloz=uvod"><img src="flag_fr.png" width="20" height="12" alt="fr"/></a>
<a href="translator/?jazyk=hu&amp;preloz=uvod"><img src="flag_hu.png" width="20" height="12" alt="hu"/></a>
<a href="translator/?jazyk=pl&amp;preloz=uvod"><img src="flag_pl.png" width="20" height="12" alt="pl"/></a>
<a href="translator/?jazyk=zh-TW&amp;preloz=uvod"><img src="flag_zh-CN.png" width="20" height="12" alt="zh-TW"/></a>
</div>'",
);
return preg_replace($match, $replace, $text);
}
$text = orez($text);
echo $text;
?>
Prvá časť definuje podmienky, ak je jazyk zadaný, ak nie je a kontroluje sa rovnako premenná určujúca adresu prekladu. Ďalej funkciou file_get_contents načítame výstup z Google Translator a vyselektujeme z neho len rámec, ktorý obsahuje preložený text (informatívne rámce o preklade sa odstránia). Ďalšia funkcia - function bbcode() zabezpečuje odstránenie vyskakovacích okien z pôvdným textom, štýlov k tomu priradených a pod. Je možné doplniť si vlastné pravidlá. Php funkciou str_replace nahradíme defaultné hypertextové odkazy v tvare http://translate.googleusercontent.com/translate_c ...... za vlastné, ktoré využíva tento skript a pracuje s nimi. Ako poslednú vec na záver je potrebné ponechať odkazy vnorené do divu s id = jazyky nezmenené, aby boli odkazy použiteľné pri automatizovanom preklade do akéhokoľvek jazyka. Takéto vlastné upravenie prekladu získaného službou Google Translator je použiteľné na akejkoľvek domené s podporou php a je ľahko upraviteľné aj pre inú doménu. Toto by sa dalo považovať za jemné know-how pri úprave automatického prekladu na svoj obraz. Ide o prvú funkčnú verziu, ktorú mám v pláne ďalej zlepšovať pre jej širšie použitie. Tip na záver - ak nechceme prekladať niektoré slová - napr. mená, názvy a pod. použijeme triedu notranslate
<span class="notranslate">Daniel Kubinský</span>
Tabuľka kódov k jednotlivým jazykom je tu.

Pridať komentár k článku