function translate($text, $toVariant) { if ($toVariant == 'uz-cyrl') { $text = str_replace('ye', 'е', $text); $text = str_replace('Ye', 'Е', $text); $text = str_replace('YE', 'Е', $text); // "е" after consonants, otherwise "э" (see above) $text = preg_replace('/([BVGDJZYKLMNPRSTFXCWQʻ‘H])E/u', '$1Е', $text); $text = preg_replace('/([bvgdjzyklmnprstfxcwqʻ‘h])e/ui', '$1е', $text); } return parent::translate($text, $toVariant); }
/** * It translates text into variant, specials: * - ommiting roman numbers */ function translate($text, $toVariant) { $breaks = '[^\\w\\x80-\\xff]'; // regexp for roman numbers $roman = 'M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})'; $reg = '/^' . $roman . '$|^' . $roman . $breaks . '|' . $breaks . $roman . '$|' . $breaks . $roman . $breaks . '/'; $matches = preg_split($reg, $text, -1, PREG_SPLIT_OFFSET_CAPTURE); $m = array_shift($matches); $ret = $this->mTables[$toVariant]->replace($m[0]); $mstart = $m[1] + strlen($m[0]); foreach ($matches as $m) { $ret .= substr($text, $mstart, $m[1] - $mstart); $ret .= parent::translate($m[0], $toVariant); $mstart = $m[1] + strlen($m[0]); } return $ret; }
/** * It translates text into variant, specials: * - ommiting roman numbers * * @param string $text * @param bool $toVariant * * @throws MWException * @return string */ function translate($text, $toVariant) { $this->loadTables(); /* From Kazakh interface, maybe we need it later $breaks = '[^\w\x80-\xff]'; // regexp for roman numbers $roman = 'M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})'; $roman = ''; $reg = '/^'.$roman.'$|^'.$roman.$breaks.'|'.$breaks.$roman.'$|'.$breaks.$roman.$breaks.'/'; $matches = preg_split($reg, $text, -1, PREG_SPLIT_OFFSET_CAPTURE); $m = array_shift($matches); if( !isset( $this->mTables[$toVariant] ) ) { throw new MWException( "Broken variant table: " . implode( ',', array_keys( $this->mTables ) ) ); } $ret = $this->mTables[$toVariant]->replace( $m[0] ); $mstart = $m[1]+strlen($m[0]); foreach($matches as $m) { $ret .= substr($text, $mstart, $m[1]-$mstart); $ret .= parent::translate($m[0], $toVariant); $mstart = $m[1] + strlen($m[0]); } return $ret; */ if (!isset($this->mTables[$toVariant])) { throw new MWException("Broken variant table: " . implode(',', array_keys($this->mTables))); } return parent::translate($text, $toVariant); }
/** * It translates text into variant * * @param string $text * @param string $toVariant * * @return string */ function translate($text, $toVariant) { $text = parent::translate($text, $toVariant); switch ($toVariant) { case 'kk-cyrl': case 'kk-kz': $letters = KK_L_UC . KK_L_LC . 'ʺʹ#0123456789'; break; case 'kk-latn': case 'kk-tr': $letters = KK_C_UC . KK_C_LC . '№0123456789'; break; case 'kk-arab': case 'kk-cn': $letters = KK_C_UC . KK_C_LC . ',;\\?%\\*№0123456789'; break; default: return $text; } // disable conversion variables like $1, $2... $varsfix = '\\$[0-9]'; $matches = preg_split('/' . $varsfix . '[^' . $letters . ']+/u', $text, -1, PREG_SPLIT_OFFSET_CAPTURE); $mstart = 0; $ret = ''; foreach ($matches as $m) { $ret .= substr($text, $mstart, $m[1] - $mstart); $ret .= $this->regsConverter($m[0], $toVariant); $mstart = $m[1] + strlen($m[0]); } return $ret; }