SHARE
TWEET

Untitled

a guest Dec 19th, 2018 55 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3. namespace pdima88\UzTranslit;
  4.  
  5. use Nette\Utils\Strings;
  6.  
  7. class UzCyrToLat
  8. {
  9.     static protected $_r = null;
  10.  
  11.     static function init()
  12.     {
  13.         self::$_r = [
  14.             'а' => 'a', 'А' => 'A',
  15.             'б' => 'b', 'Б' => 'B',
  16.             'в' => 'v', 'В' => 'V',
  17.             'г' => 'g', 'Г' => 'G',
  18.             'д' => 'd', 'Д' => 'D',
  19.             'е' => ['e', 'ye'], 'Е' => ['E', 'Ye'],
  20.             'ё' => 'yo', 'Ё' => 'Yo',
  21.             'ж' => 'j', 'Ж' => 'J',
  22.             'з' => 'z', 'З' => 'Z',
  23.             'и' => 'i', 'И' => 'I',
  24.             'й' => 'y', 'Й' => 'Y',
  25.             'к' => 'k', 'К' => 'K',
  26.             'л' => 'l', 'Л' => 'L',
  27.             'м' => 'm', 'М' => 'M',
  28.             'н' => 'n', 'Н' => 'N',
  29.             'о' => 'o', 'О' => 'O',
  30.             'п' => 'p', 'П' => 'P',
  31.             'р' => 'r', 'Р' => 'R',
  32.             'с' => 's', 'С' => 'S',
  33.             'т' => 't', 'Т' => 'T',
  34.             'у' => 'u', 'У' => 'U',
  35.             'ф' => 'f', 'Ф' => 'F',
  36.             'x' => 'x', 'Х' => 'X',
  37.             'ц' => ['ts', 's'], 'Ц' => ['Ts', 'S'],
  38.             'ч' => 'ch', 'Ч' => 'Ch',
  39.             'ш' => 'sh', 'Ш' => 'Sh',
  40.             'щ' => 'shch', 'Щ' => 'Shch',
  41.             'ъ' => '’', 'Ъ' => '’',
  42.             'ы' => 'i', 'Ы' => 'I',
  43.             'ь' => '', 'Ь' => '',
  44.             'э' => 'e', 'Э' => 'E',
  45.             'ю' => 'yu', 'Ю' => 'Yu',
  46.             'я' => 'ya', 'Я' => 'Ya',
  47.             'ў' => 'oʻ', 'Ў' => 'Oʻ',
  48.             'қ' => 'q', 'Қ' => 'Q',
  49.             'ғ' => 'gʻ', 'Ғ' => 'Gʻ',
  50.             'ҳ' => 'h', 'Ҳ' => 'H'
  51.         ];
  52.     }
  53.  
  54.     const VOWELS = 'аеёиоуъыьэюяў';
  55.     const CONSONANTS = 'бвгджзйклмнпрстфхцчшщқғҳ';
  56.  
  57.     static function translit($s)
  58.     {
  59.         if (self::$_r == null) {
  60.             self::init();
  61.         }
  62.  
  63.         $res = '';
  64.         $prev = '';
  65.         $strLen = Strings::length($s);
  66.  
  67.         for ($i = 0; $i < $strLen; $i++) {
  68.             $c = Strings::substring($s, $i, 1);
  69.  
  70.             if (!isset(self::$_r[$c])) {
  71.                 $res .= $c;
  72.             } elseif (is_array(self::$_r[$c])) {
  73.                 if ($c == 'е' || $c == 'Е') {
  74.                     if ($prev != '' && Strings::indexOf(self::CONSONANTS, Strings::lower($prev)) >= 0) {
  75.                         $res .= self::$_r[$c][0];
  76.                     } else {
  77.                         $res .= self::$_r[$c][1];
  78.                     }
  79.                 } elseif ($c == 'ц' || $c == 'Ц') {
  80.                     if ($prev != '' && Strings::indexOf(self::VOWELS, Strings::lower($prev)) >= 0) {
  81.                         $res .= self::$_r[$c][0];
  82.                     } else {
  83.                         $res .= self::$_r[$c][1];
  84.                     }
  85.                 }
  86.             } else {
  87.                 if (($c == 'ҳ' || $c == 'Ҳ') && ($prev == 'с' || $prev == 'С')) {
  88.                     $res .= "’"; //s’h
  89.                 }
  90.                 $res .= self::$_r[$c];
  91.             }
  92.             $prev = $c;
  93.         }
  94.         return $res;
  95.     }
  96. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top