Skip to content

Commit

Permalink
Fix geo russian names
Browse files Browse the repository at this point in the history
  • Loading branch information
wapmorgan committed Nov 17, 2017
1 parent e4e1f7e commit 190d7e1
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 3 deletions.
9 changes: 7 additions & 2 deletions src/Russian/GeographicalNamesInflection.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ class GeographicalNamesInflection extends \morphos\BaseInflection implements Cas
'-на-'
);

protected static $ovAbnormalExceptions = [
'осташков',
];

/**
* Проверяет, склоняемо ли название
* @param string $name Название
Expand Down Expand Up @@ -88,6 +92,7 @@ public static function getCases($name)
]);
}

// Сложное название через пробел или через '-на-'
foreach (self::$delimiters as $delimiter) {
if (strpos($name, $delimiter) !== false) {
$parts = explode($delimiter, $name);
Expand All @@ -100,7 +105,7 @@ public static function getCases($name)
}

// Сложное название города из нескольких слов через тире.
// Ростов-на-Дону, Переславль-Залесский
// Ростов-на-Дону, Переславль-Залесский и т.д.
if (strpos($name, '-') !== false) {
$parts = explode('-', $name);
$result = array(
Expand Down Expand Up @@ -179,7 +184,7 @@ public static function getCases($name)
self::TVORIT => $prefix.'ем',
self::PREDLOJ => $prefix.'е',
);
} elseif (self::isConsonant(S::slice($name, -1)) && S::slice($name, -2) != 'ов') {
} elseif (self::isConsonant(S::slice($name, -1)) && !in_array($name, self::$ovAbnormalExceptions)) {
// Париж, Валаам, Киев
$prefix = S::name($name);
return array(
Expand Down
3 changes: 2 additions & 1 deletion tests/Russian/GeographicalNamesInflectionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,14 @@ public function wordsProvider()
['Осташков', 'Осташкова', 'Осташкову', 'Осташков', 'Осташковым', 'Осташкове'],
['Грозный', 'Грозного', 'Грозному', 'Грозный', 'Грозным', 'Грозном'],
['Благодарный', 'Благодарного', 'Благодарному', 'Благодарный', 'Благодарным', 'Благодарном'],
['Псков', 'Пскова', 'Пскову', 'Псков', 'Псковом', 'Пскове'],
['Киров', 'Кирова', 'Кирову', 'Киров', 'Кировом', 'Кирове'],

// сложные названия
['Санкт-Петербург', 'Санкт-Петербурга', 'Санкт-Петербургу', 'Санкт-Петербург', 'Санкт-Петербургом', 'Санкт-Петербурге'],
['Ростов-на-Дону', 'Ростова-на-Дону', 'Ростову-на-Дону', 'Ростов-на-Дону', 'Ростовом-на-Дону', 'Ростове-на-Дону'],
['Нижний Новгород', 'Нижнего Новгорода', 'Нижнему Новгороду', 'Нижний Новгород', 'Нижним Новгородом', 'Нижнем Новгороде'],
['Набережные Челны', 'Набережных Челнов', 'Набережным Челнам', 'Набережные Челны', 'Набережными Челнами', 'Набережных Челнах'],
['Ростов-на-Дону', 'Ростова-на-Дону', 'Ростову-на-Дону', 'Ростов-на-Дону', 'Ростовом-на-Дону', 'Ростове-на-Дону'],

// N край
['Краснодарский край', 'Краснодарского края', 'Краснодарскому краю', 'Краснодарский край', 'Краснодарским краем', 'Краснодарском крае'],
Expand Down

0 comments on commit 190d7e1

Please sign in to comment.