JeliSamohlaska(MB_SubStr($jmeno,-3,1))) return false; switch (MB_StrToLower(MB_SubStr($jmeno,-3,1))) { case 'd': case 'l': case 'r': if (!$this->JeliSamohlaska(MB_SubStr($jmeno,-4,1)) && MB_SubStr($jmeno,-4,1) != 'j') return false; //Kadlec => Kadleci, Motejlek => Motejlku break; case 'h': case 'm': if (MB_SubStr($jmeno,-1) == 'l') return false; //Suchomel, Vrhel break; case 'ř': if (!$this->JeliSamohlaska(MB_SubStr($jmeno,-4,1)) && MB_SubStr($jmeno,-4,1) != 'p') return false; //Vepřek => Vepřku break; } for ($pozice=0; $pozice < (MB_StrLen($jmeno)-2); $pozice++) { //musi byt i jina samohlaska if ($this->JeliSamohlaska(MB_SubStr($jmeno,$pozice,1))) break 2; } for ($pozice=1; $pozice < (MB_StrLen($jmeno)-3); $pozice++) { //nebo slabikotvorne r,l if (MB_StrToLower(MB_SubStr($jmeno,$pozice,1)) == 'r' || MB_StrToLower(MB_SubStr($jmeno,$pozice,1)) == 'l') break 2; } return false; } while(false); $jmeno=MB_SubStr($jmeno,0,-2).MB_SubStr($jmeno,-1); return true; case 'ě': $nove_jmeno = MB_SubStr($jmeno,0,-2).'e'.MB_SubStr($jmeno,-1); //nahradím ě za e if ($this->VypustE($nove_jmeno)) { //tedy jestli bylo 'e' vypuštěno $jmeno = MB_SubStr($nove_jmeno,0,-2).StrTr(MB_SubStr($nove_jmeno,-2,1),Array('d' => 'ď','t' => 'ť','n' => 'ň', 'D' => 'Ď','T' => 'Ť','N' => 'Ň')).MB_SubStr($nove_jmeno,-1); return true; } else return false; default: break; } return true; } private function Vrat4Pad1Slova($jmeno) { if (MB_StrLen($jmeno) < 2) return $jmeno; //kratke jmeno (0 nebo 1 znak) $prposlznak=''; $poslznak=''; $jmeno_male=MB_StrToLower($jmeno); $posl3znaky=MB_SubStr($jmeno_male,-3); do { //cyklus, aby bylo z ceho vyskocit if (MB_StrLen($jmeno) >= 2) { //3 znaky a vic if ($posl3znaky == 'tel') { $poslznak='e'; break; } if ($posl3znaky == 'del') { $poslznak='a'; break; } if ($posl3znaky == 'cel') { $poslznak='a'; break; } if ($posl3znaky == 'zen') { $poslznak='a'; break; } } if (MB_SubStr($jmeno_male,-3) == 'vůl') { $jmeno=MB_SubStr($jmeno,0,1).'ola'; break; } if (MB_SubStr($jmeno_male,-6) == 'dagmar') break; if ($jmeno_male == 'ingrid') break; if (MB_SubStr($jmeno_male,-6) == 'miriam') break; if ($jmeno_male == 'ester') break; if ($jmeno_male == 'rút') break; if (MB_SubStr($jmeno_male,-4) == 'král') { $poslznak='i'; break; } if ($jmeno_male == 'pes') { $jmeno = 'psa'; break; } if ($jmeno_male == 'bůh') { $jmeno=MB_SubStr($jmeno,0,1).'oha'; break; } if ($jmeno_male == 'kůň') { $jmeno=MB_SubStr($jmeno,0,1).'oně'; break; } if ($jmeno_male == 'pán') { $jmeno=MB_SubStr($jmeno,0,1).'ana'; break; } switch(MB_SubStr($jmeno_male,-1)) { case 'a': $prposlznak='u'; break; case 'á': $prposlznak='ou'; break; case 'b': case 'd': case 'f': case 'm': case 'p': case 't': case 'v': case 'w': $poslznak='a'; break; case 'c': case 'č': $this->VypustE($jmeno); $poslznak='e'; break; case 'g': case 'k': if (!$this->VypustE($jmeno)) $poslznak='u'; //Vicherek => Vicherku else $poslznak='a'; break; case 'h': $poslznak='a'; break; case 'i': case 'í': case 'y': case 'ý': $jmeno.='ho'; break; case 'j': case 'ř': case 's': case 'š': case 'x': case 'z': case 'ž': $poslznak='e'; break; case 'l': case 'n': case 'q': $poslznak='a'; break; case 'r': $poslznak='a'; break; case 'ď': $prposlznak='d'; $poslznak='ě'; break; case 'ň': $prposlznak='n'; $poslznak='ě'; break; case 'ť': $prposlznak='t'; $poslznak='ě'; break; } } while(false); if ($prposlznak != '') $jmeno=MB_SubStr($jmeno,0,-1).$prposlznak; $jmeno.=$poslznak; return $jmeno; } private function Vrat5Pad1Slova($jmeno, &$pohlavi) { if (MB_StrLen($jmeno) < 2) return $jmeno; //kratke jmeno (0 nebo 1 znak) $prposlznak=''; $poslznak=''; $jmeno_male=MB_StrToLower($jmeno); $posl3znaky=MB_SubStr($jmeno_male,-3); do { //cyklus, aby bylo z ceho vyskocit if (MB_StrLen($jmeno) >= 2) { //3 znaky a vic if ($posl3znaky == 'tel') { $poslznak='i'; break; } if ($posl3znaky == 'del') { $poslznak='i'; break; } if ($posl3znaky == 'cel') { $poslznak='i'; break; } if ($posl3znaky == 'zen') { $poslznak='e'; break; } } if ($pohlavi !== 'zena') { if (MB_SubStr($jmeno_male,-3) == 'vůl') { $jmeno=MB_SubStr($jmeno,0,1).'ole'; $pohlavi='muz'; break; } if (MB_SubStr($jmeno_male,-4) == 'král') { $poslznak='i'; $pohlavi='muz'; break; } if ($jmeno_male == 'pes') { $jmeno = 'pse'; $pohlavi='muz'; break; } if ($jmeno_male == 'bůh') { $jmeno=MB_SubStr($jmeno,0,1).'ože'; $pohlavi='muz'; break; } if ($jmeno_male == 'kůň') { $jmeno=MB_SubStr($jmeno,0,1).'oni'; $pohlavi='muz'; break; } if ($jmeno_male == 'pán') { $jmeno=MB_SubStr($jmeno,0,1).'ane'; $pohlavi='muz'; break; } } if ($pohlavi !== 'muz') { if (MB_SubStr($jmeno_male,-6) == 'dagmar') { $pohlavi='zena'; break; } if ($jmeno_male == 'ingrid') { $pohlavi='zena'; break; } if (MB_SubStr($jmeno_male,-6) == 'miriam') { $pohlavi='zena'; break; } if ($jmeno_male == 'ester') { $pohlavi='zena'; break; } if ($jmeno_male == 'rút') { $pohlavi='zena'; break; } } switch(MB_SubStr($jmeno_male,-1)) { case 'á': if ($pohlavi === null || $pohlavi === 'konflikt') $pohlavi='zena'; break; case 'a': $prposlznak='o'; if ($pohlavi === null) { switch (MB_SubStr($jmeno_male,-2,1)) { case 'ď': case 'ť': break; //Láďa, Sváťa default: $pohlavi='zena'; break; } } break; case 'b': case 'd': case 'f': case 'm': case 'p': case 't': case 'v': case 'w': if ($pohlavi === 'zena') break; if ($pohlavi === null) $pohlavi = 'muz'; $poslznak='e'; break; case 'c': case 'č': if ($pohlavi === 'zena') break; if ($pohlavi === null) $pohlavi = 'muz'; $puvdelka=MB_StrLen($jmeno); $this->VypustE($jmeno); if ($puvdelka != MB_StrLen($jmeno)) { //jestli se E vynecha $prposlznak = 'č'; $poslznak='e'; } else $poslznak='i'; break; case 'e': if ($pohlavi === null && MB_SubStr($jmeno_male,-2,1) == 'i') $pohlavi='zena'; break; case 'g': case 'k': if ($pohlavi === 'zena') break; if ($pohlavi === null) $pohlavi = 'muz'; $this->VypustE($jmeno); $poslznak='u'; break; case 'h': if ($pohlavi === 'zena') break; if (MB_SubStr($jmeno_male,-5) == 'abeth') { //Elizabeth if ($pohlavi === null) $pohlavi = 'zena'; break; } if ($pohlavi === null) $pohlavi = 'muz'; if (MB_SubStr($jmeno_male,-2,1) == 'p' || MB_SubStr($jmeno_male,-2,1) == 't') $poslznak='e'; //Meph, Demuth => Demuthe else if (MB_SubStr($jmeno_male,-5) == 'ových') $poslznak=''; //Jankových => Jankových else $poslznak='u'; break; case 'j': case 'ř': case 's': case 'š': case 'x': case 'z': case 'ž': if ($pohlavi === 'zena') break; if ($pohlavi === null) $pohlavi = 'muz'; $poslznak='i'; break; case 'l': case 'n': case 'q': if ($pohlavi === 'zena') break; if ($pohlavi === null) $pohlavi = 'muz'; if (MB_SubStr($jmeno_male,-3,2) != 'le' && MB_SubStr($jmeno_male,-3,2) != 'že' && MB_SubStr($jmeno_male,-3,2) != 'pe' //jelen, Doležel, Pupen && !$this->VypustE($jmeno)) $poslznak='i'; else $poslznak='e'; break; case 'r': if ($pohlavi === 'zena') break; if ($pohlavi === null) $pohlavi = 'muz'; if (!$this->JeliSamohlaska(MB_SubStr($jmeno,-2,1))) $prposlznak='ř'; //bratře, ale ogare $poslznak='e'; break; case 'ď': if ($pohlavi === 'zena') break; if ($pohlavi === null) $pohlavi = 'muz'; $prposlznak='d'; $poslznak='i'; break; case 'ň': if ($pohlavi === 'zena') break; if ($pohlavi === null) $pohlavi = 'muz'; $prposlznak='n'; $poslznak='i'; break; case 'ť': if ($pohlavi === 'zena') break; if ($pohlavi === null) $pohlavi = 'muz'; $prposlznak='t'; $poslznak='i'; break; } } while(false); if ($prposlznak != '') $jmeno=MB_SubStr($jmeno,0,-1).$prposlznak; $jmeno.=$poslznak; return $jmeno; } static function Preved($retezec, &$pohlavi = null) { //HLAVNI FUNKCE $prevod = new Cestina5Pad(); $puvodni_kodovani = mb_internal_encoding(); mb_internal_encoding('utf-8'); $vysledek=''; $slova=Explode(' ',$retezec); foreach($slova as $index => $slovo) { //rozdelene po mezerach $slova2=Explode(',',$slovo); foreach($slova2 as $index2 => $slovo2) { //rozdelene i po carkach $vysledek.=$prevod->Vrat5Pad1Slova($slovo2, $pohlavi).','; } $vysledek=MB_SubStr($vysledek,0,-1).' '; //smazani posledni carky a pridani mezery } mb_internal_encoding($puvodni_kodovani); return(Trim($vysledek)); } } ?>