
Dnes je: 8.2.2012, meniny má:
Zoja
Blog
Blog » Html, php » Automatizovaný preklad
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:

Ď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.

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="http://www.dkubinsky.sk">
<img src="translator/flag_sk.png" width="20" height="12" alt="sk"/>
</a>
<a href="translator/?jazyk=en&preloz=uvod">
<img src="flag_en.png" width="20" height="12" alt="en"/>
</a>
<a href="translator/?jazyk=de&preloz=uvod">
<img src="flag_de.png" width="20" height="12" alt="de"/>
</a>
<a href="translator/?jazyk=fr&preloz=uvod">
<img src="flag_fr.png" width="20" height="12" alt="fr"/>
</a>
<a href="translator/?jazyk=hu&preloz=uvod">
<img src="flag_hu.png" width="20" height="12" alt="hu"/>
</a>
<a href="translator/?jazyk=pl&preloz=uvod">
<img src="flag_pl.png" width="20" height="12" alt="pl"/>
</a>
<a href="translator/?jazyk=zh-TW&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("&","&",$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',
'#&prev(.*?)>#se',
);
$replace = array(
"''",
"''",
"''",
"''",
"'\">'",
);
return preg_replace($match, $replace, $text);
}
$text = bbcode($text);
$text =
str_replace("http://translate.googleusercontent.com/translate_c?hl=sk&ie=UTF-8&sl=auto&tl=".$jazyk."&u=","",$text);
$text = str_replace('<a href="http://www.dkubinsky.sk/','<a
href="http://dkubinsky.sk/translator/?jazyk='.$jazyk.'&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&preloz=uvod\"><img
src=\"flag_en.png\" width=\"20\" height=\"12\" alt=\"en\"/></a>
<a href=\"translator/?jazyk=de&preloz=uvod\"><img
src=\"flag_de.png\" width=\"20\" height=\"12\" alt=\"de\"/></a>
<a href=\"translator/?jazyk=fr&preloz=uvod\"><img
src=\"flag_fr.png\" width=\"20\" height=\"12\" alt=\"fr\"/></a>
<a href=\"translator/?jazyk=hu&preloz=uvod\"><img
src=\"flag_hu.png\" width=\"20\" height=\"12\" alt=\"hu\"/></a>
<a href=\"translator/?jazyk=pl&preloz=uvod\"><img
src=\"flag_pl.png\" width=\"20\" height=\"12\" alt=\"pl\"/></a>
<a href=\"translator/?jazyk=zh-TW&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.
KOMENTÁRE