Настройка translit для поисковой системы яндекс
Для смены транслитерации нужно зайти в файл
core > components > translit > model > modx > tramslit > tables > russian.php.
и заменить данные на
Так же в файле core/components/translit/model/modx/translit/modtransliterate.class.php Поменять код на следующий
ц=cz заменено на ц=ts
й=j заменено на й=y
щ=shh заменено на щ=sch
x=x заменено на х=kh
ъ не пишется, кроме: ъе → ye
ы — y как исключение, в окончаниях ый → iy (аналогично окончанию ий → iy)
Для буквы е — е (после согласных), ye (в начале слова и после гласных)
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 (в начале слова и после гласных)
Комментарии: 10
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
github.com/biz87/Translitor/blob/master/core/components/translitor/model/translitor.class.php#L52
translit не грешит таким поведением?..
Одно из преимуществ translitor как указано на сайте пакета это:
— Улучшена фильтрация ненужных символов. В отличие от Translit, который пропускает скобки, подчеркивания, слеши, различные служебные символы, Translitor их не пропускает. В поле alias попадают только буквы, цифры. Все остальное заменяется разделителем-заменителем (дефисом).
В translit для этого нужно поставить значение alphanumeric в ключе friendly_alias_restrict_chars
Информация для составления транслитерации которую я выложил взята из Яндекса и отличается от translitor хоть и не сильно yandex.ru/support/nmaps/app_transliteration.html (Статья для карт).
Учитывая что с translitor могут быть определенные проблемы я решил что более разумно будет добавить необходимую мне транслитерацию в translit и для этого потребовалось довольно скромное количество кода.
И url у ресурсов получается четким без лишних символов, только тире между словами остаются. Все остальные настройки translit стандартные. Поисковики вроде норм индексируют страницы.
По поводу файлов тоже нет проблем при загрузке.