Настройка translit для поисковой системы яндекс

Для смены транслитерации нужно зайти в файл
core > components > translit > model > modx > tramslit > tables > russian.php
.

и заменить данные на

<?php
/**
 * Russian transliteration table
 */
return array (
'ЪЕ'=>'ye','Ъе'=>'ye','ъЕ'=>'ye','ъе'=>'ye','ЫЙ'=>'iy','Ый'=>'iy','ыЙ'=>'iy','ый'=>'iy','ИЙ'=>'iy','Ий'=>'iy','иЙ'=>'iy','ий'=>'iy',
'&'=>'and','%'=>'','\''=>'','À'=>'A','À'=>'A','Á'=>'A','Á'=>'A','Â'=>'A','Â'=>'A','Ã'=>'A',
'Ã'=>'A','Ä'=>'e','Ä'=>'A','Å'=>'A','Å'=>'A','Æ'=>'e','Æ'=>'E','Ā'=>'A','Ą'=>'A','Ă'=>'A',
'Ç'=>'C','Ç'=>'C','Ć'=>'C','Č'=>'C','Ĉ'=>'C','Ċ'=>'C','Ď'=>'D','Đ'=>'D','È'=>'E','È'=>'E',
'É'=>'E','É'=>'E','Ê'=>'E','Ê'=>'E','Ë'=>'E','Ë'=>'E','Ē'=>'E','Ę'=>'E','Ě'=>'E','Ĕ'=>'E',
'Ė'=>'E','Ĝ'=>'G','Ğ'=>'G','Ġ'=>'G','Ģ'=>'G','Ĥ'=>'H','Ħ'=>'H','Ì'=>'I','Ì'=>'I','Í'=>'I',
'Í'=>'I','Î'=>'I','Î'=>'I','Ï'=>'I','Ï'=>'I','Ī'=>'I','Ĩ'=>'I','Ĭ'=>'I','Į'=>'I','İ'=>'I',
'IJ'=>'J','Ĵ'=>'J','Ķ'=>'K','Ľ'=>'K','Ĺ'=>'K','Ļ'=>'K','Ŀ'=>'K','Ñ'=>'N','Ñ'=>'N','Ń'=>'N',
'Ň'=>'N','Ņ'=>'N','Ŋ'=>'N','Ò'=>'O','Ò'=>'O','Ó'=>'O','Ó'=>'O','Ô'=>'O','Ô'=>'O','Õ'=>'O',
'Õ'=>'O','Ö'=>'e','Ö'=>'e','Ø'=>'O','Ø'=>'O','Ō'=>'O','Ő'=>'O','Ŏ'=>'O','Œ'=>'E','Ŕ'=>'R',
'Ř'=>'R','Ŗ'=>'R','Ś'=>'S','Ş'=>'S','Ŝ'=>'S','Ș'=>'S','Ť'=>'T','Ţ'=>'T','Ŧ'=>'T','Ț'=>'T',
'Ù'=>'U','Ù'=>'U','Ú'=>'U','Ú'=>'U','Û'=>'U','Û'=>'U','Ü'=>'e','Ū'=>'U','Ü'=>'e','Ů'=>'U',
'Ű'=>'U','Ŭ'=>'U','Ũ'=>'U','Ų'=>'U','Ŵ'=>'W','Ŷ'=>'Y','Ÿ'=>'Y','Ź'=>'Z','Ż'=>'Z','à'=>'a',
'á'=>'a','â'=>'a','ã'=>'a','ä'=>'e','ä'=>'e','å'=>'a','ā'=>'a','ą'=>'a','ă'=>'a','å'=>'a',
'æ'=>'e','ç'=>'c','ć'=>'c','č'=>'c','ĉ'=>'c','ċ'=>'c','ď'=>'d','đ'=>'d','è'=>'e','é'=>'e',
'ê'=>'e','ë'=>'e','ē'=>'e','ę'=>'e','ě'=>'e','ĕ'=>'e','ė'=>'e','ƒ'=>'f','ĝ'=>'g','ğ'=>'g',
'ġ'=>'g','ģ'=>'g','ĥ'=>'h','ħ'=>'h','ì'=>'i','í'=>'i','î'=>'i','ï'=>'i','ī'=>'i','ĩ'=>'i',
'ĭ'=>'i','į'=>'i','ı'=>'i','ij'=>'j','ĵ'=>'j','ķ'=>'k','ĸ'=>'k','ł'=>'l','ľ'=>'l','ĺ'=>'l',
'ļ'=>'l','ŀ'=>'l','ñ'=>'n','ń'=>'n','ň'=>'n','ņ'=>'n','ʼn'=>'n','ŋ'=>'n','ò'=>'o','ó'=>'o',
'ô'=>'o','õ'=>'o','ö'=>'e','ö'=>'e','ø'=>'o','ō'=>'o','ő'=>'o','ŏ'=>'o','œ'=>'e','ŕ'=>'r',
'ř'=>'r','ŗ'=>'r','ù'=>'u','ú'=>'u','û'=>'u','ü'=>'e','ū'=>'u','ü'=>'e','ů'=>'u','ű'=>'u',
'ŭ'=>'u','ũ'=>'u','ų'=>'u','ŵ'=>'w','ÿ'=>'y','ŷ'=>'y','ż'=>'z','ź'=>'z','ß'=>'s','ſ'=>'s',
'Α'=>'A','Ά'=>'A','Β'=>'B','Γ'=>'G','Δ'=>'D','Ε'=>'E','Έ'=>'E','Ζ'=>'Z','Η'=>'I','Ή'=>'I',
'Θ'=>'TH','Ι'=>'I','Ί'=>'I','Ϊ'=>'I','Κ'=>'K','Λ'=>'L','Μ'=>'M','Ν'=>'N','Ξ'=>'KS','Ο'=>'O',
'Ό'=>'O','Π'=>'P','Ρ'=>'R','Σ'=>'S','Τ'=>'T','Υ'=>'Y','Ύ'=>'Y','Ϋ'=>'Y','Φ'=>'F','Χ'=>'X',
'Ψ'=>'PS','Ω'=>'O','Ώ'=>'O','α'=>'a','ά'=>'a','β'=>'b','γ'=>'g','δ'=>'d','ε'=>'e','έ'=>'e',
'ζ'=>'z','η'=>'i','ή'=>'i','θ'=>'th','ι'=>'i','ί'=>'i','ϊ'=>'i','ΐ'=>'i','κ'=>'k','λ'=>'l',
'μ'=>'m','ν'=>'n','ξ'=>'ks','ο'=>'o','ό'=>'o','π'=>'p','ρ'=>'r','σ'=>'s','τ'=>'t','υ'=>'y',
'ύ'=>'y','ϋ'=>'y','ΰ'=>'y','φ'=>'f','χ'=>'x','ψ'=>'ps','ω'=>'o','ώ'=>'o','А'=>'a','Б'=>'b',
'В'=>'v','Г'=>'g','Д'=>'d','Е'=>'e','Ё'=>'yo','Ж'=>'zh','З'=>'z','И'=>'i','Й'=>'y','К'=>'k',
'Л'=>'l','М'=>'m','Н'=>'n','О'=>'o','П'=>'p','Р'=>'r','С'=>'s','Т'=>'t','У'=>'u','Ф'=>'f',
'Х'=>'kh','Ц'=>'ts','Ч'=>'ch','Ш'=>'sh','Щ'=>'sch','Ъ'=>'','Ы'=>'y','Ь'=>'','Э'=>'e','Ю'=>'yu',
'Я'=>'ya','а'=>'a','б'=>'b','в'=>'v','г'=>'g','д'=>'d','е'=>'e','ё'=>'yo','ж'=>'zh','з'=>'z',
'и'=>'i','й'=>'y','к'=>'k','л'=>'l','м'=>'m','н'=>'n','о'=>'o','п'=>'p','р'=>'r','с'=>'s',
'т'=>'t','у'=>'u','ф'=>'f','х'=>'kh','ц'=>'ts','ч'=>'ch','ш'=>'sh','щ'=>'sch','ъ'=>'','ы'=>'y',
'ь'=>'','э'=>'e','ю'=>'yu','я'=>'ya'
);

Так же в файле core/components/translit/model/modx/translit/modtransliterate.class.php Поменять код на следующий

<?php
/*
 * translit
 *
 * Copyright 2010 by MODx, LLC
 *
 * translit is free software; you can redistribute it and/or modify it under the
 * terms of the GNU General Public License as published by the Free Software
 * Foundation; either version 2 of the License, or (at your option) any later
 * version.
 *
 * translit is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with
 * translit; if not, write to the Free Software Foundation, Inc., 59 Temple
 * Place, Suite 330, Boston, MA 02111-1307 USA
 *
 */

/**
 * A transliteration service implementation class for MODx Revolution.
 *
 * @package modx
 * @subpackage translit
 */
class modTransliterate {

    /**
     * A reference to the modX instance communicating with this service instance.
     * @var modX
     */
    public $modx = null;
    /**
     * A collection of options.
     * @var array
     */
    public $options = array();

    /**
     * Constructs a new instance of the modTransliterate class.
     *
     * Use modX::getService() to get an instance of the translit service; do not manually construct this class.
     *
     * @param modX &$modx A reference to a modX instance.
     * @param array $options An array of options for configuring the modTransliterate instance.
     */
    public function __construct(modX &$modx, array $options = array()) {
        $this->modx = & $modx;
        $this->options = $options;
    }

    /**
     * Translate a string using a named transliteration table.
     *
     * @param string $string The string to transliterate.
     * @param string $table A named transliteration table to use.
     * @return string The translated string.
     */
    public function translate($string, $table) {
        $ret = $string;
        $filePath = dirname(__FILE__) . '/tables/' . $table . '.php';
        if (is_file($filePath)) {
            $table = include $filePath;
            if (is_array($table) && !empty($table)) {
                // Обработка буквы "е"
                $string = $this->handleSpecialE($string);

                $ret = strtr($string, $table);
            }
        }
        return $ret;
    }
    protected function handleSpecialE($string) {
        $pattern = '/(?<=^|[аеёиоуыэюя])е/u'; // Буква "е" в начале слова или после гласных
        $replacement = 'ye';
        $string = preg_replace($pattern, $replacement, $string);

        return $string;
    }
}
Что заменено или добавлено:
ц=cz заменено на ц=ts
й=j заменено на й=y
щ=shh заменено на щ=sch
x=x заменено на х=kh
ъ не пишется, кроме: ъе → ye
ы — y как исключение, в окончаниях ый → iy (аналогично окончанию ий → iy)
Для буквы е — е (после согласных), ye (в начале слова и после гласных)
Арман
01 июля 2024, 20:11
modx.pro
2
637
+3

Комментарии: 10

Арман
01 июля 2024, 20:13
0
Заменено не так много но может кому пригодиться. Если есть какие-либо предложения/правки прошу написать, возможно что-то упустил
    Евгений Webinmd
    01 июля 2024, 20:18
    0
      Арман
      01 июля 2024, 20:21
      +1
      У меня с ним были проблемы (совместимость с другими плагинами) и он насколько я помню так же точки вырезает когда загружаешь файл.
        Наумов Алексей
        03 июля 2024, 09:52
        0
        он насколько я помню так же точки вырезает когда загружаешь файл
        а разве это зависит не от системной настройки, которая включает транслит названий файлов?
        translit не грешит таким поведением?..
          Арман
          03 июля 2024, 16:42
          +1
          С translit у меня файлы транслитерируются но с точками проблем нет при этом никакие дополнительные настройки я для этого не использовал. В translitor наверняка это можно исправить но есть другая проблема с совместимостью с другими пакетами поэтому я не стал разбираться.

          Одно из преимуществ translitor как указано на сайте пакета это:
          — Улучшена фильтрация ненужных символов. В отличие от Translit, который пропускает скобки, подчеркивания, слеши, различные служебные символы, Translitor их не пропускает. В поле alias попадают только буквы, цифры. Все остальное заменяется разделителем-заменителем (дефисом).

          В translit для этого нужно поставить значение alphanumeric в ключе friendly_alias_restrict_chars

          Информация для составления транслитерации которую я выложил взята из Яндекса и отличается от translitor хоть и не сильно yandex.ru/support/nmaps/app_transliteration.html (Статья для карт).

          Учитывая что с translitor могут быть определенные проблемы я решил что более разумно будет добавить необходимую мне транслитерацию в translit и для этого потребовалось довольно скромное количество кода.
            Андрей Шевяков
            03 июля 2024, 17:01
            +1
            Всегда выставляю параметр friendly_alias_restrict_chars_pattern равным
            /[\0\x0B\t\n\r\f\a&=+°%#«»…<>—№!",.()\/\~:`@\?\[\]\{\}\|\^\'\\\\]/
            И url у ресурсов получается четким без лишних символов, только тире между словами остаются. Все остальные настройки translit стандартные. Поисковики вроде норм индексируют страницы.

            По поводу файлов тоже нет проблем при загрузке.
              Арман
              03 июля 2024, 19:19
              0
              Тоже пользовался стандартной транслитерацией translit всё нормально индексировалось так что в принципе эти настройки необязательны. На новом сайте хотел использовать именно транслитерацию Яндекс но все онлайн сервисы в которых написано что у них всё по стандарту Яндекса делают это по-разному
        Арман
        01 июля 2024, 20:25
        0
        Посмотрел файл в translitor следующие 2 буквы отличаются из тех что я менял 'Shch' => ['Щ'], 'H' => ['Х'],. В общем и целом в стандартном файле translit я заменил только 4 буквы
          Арман
          03 июля 2024, 02:30
          0
          Добавил ещё несколько изменений в транслитерацию. Теперь отличий чуть больше)
          Алексей Соин
          03 июля 2024, 11:05
          0
          для себя использую следующие настройки
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            10