Как создать свою таблицу транслитерации для алиасов(слагов)?

Добрый день. Буду благодарен за помощь в таком вопросе.

Делаю slug для урлов. Для генерации алиасов использую
$model->alias_name = \yii\helpers\BaseInflector::slug($model->name, $replacement = '-', $lowercase = false);

Но правила, по которым идет замена букв кириллицы на латиницу довольно странные. Хочу сделать свою таблицу соответствий.

В классе BaseInflector

написано,
* @var array fallback map for transliteration used by [[transliterate()]] when intl isn't available.
     */
    public static $transliteration = [
        'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'AE', 'Ç' => 'C',
        'È' => 'E', 'É' => 'E', 'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I',
        'Ð' => 'D', 'Ñ' => 'N', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O', 'Õ' => 'O', 'Ö' => 'O', 'Ő' => 'O',
        'Ø' => 'O', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ű' => 'U', 'Ý' => 'Y', 'Þ' => 'TH',
        'ß' => 'ss',
        'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'ae', 'ç' => 'c',
        'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i',
        'ð' => 'd', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ő' => 'o',
        'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'u', 'ű' => 'u', 'ý' => 'y', 'þ' => 'th',
        'ÿ' => 'y',


Мне непонятно, что это за символы в этой таблице + что это за расширение intl и как сделать свою таблицу соответствий и заставить BaseInflector::slug заменять символы на основе этой таблицы.

Спасибо.
  • Вопрос задан
  • 122 просмотра
Решения вопроса 1
@Pogran
Могу предположить что данные символы - это соответствие что на что будет заменено. Т.е строка 'ÿ' => 'y', означает что символ ÿ будет заменён на y . Сделайте свой хелпер и наследуйте его от BaseInflector . В нём переопределите $transliteration на свой вариант.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы