mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-07-01 05:55:02 +03:00
This commit is contained in:
parent
ca870bcd3c
commit
42aa1f9072
95
engine/modules/viewer/plugs/modifier.declension.php
Normal file
95
engine/modules/viewer/plugs/modifier.declension.php
Normal file
|
@ -0,0 +1,95 @@
|
|||
<?php
|
||||
/**
|
||||
* Smarty plugin - declension modifier
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Модификатор declension: склонение существительных по правилам английского языка
|
||||
*
|
||||
* @param array $forms (напр: 0 => article, 1 => articles)
|
||||
* @param int $count
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_declension_en($forms, $count)
|
||||
{
|
||||
if ($count==1)
|
||||
return $forms[0];
|
||||
else
|
||||
return $forms[1];
|
||||
}
|
||||
|
||||
/**
|
||||
* Модификатор declension: склонение существительных по правилам русского языка
|
||||
*
|
||||
* @param array $forms (напр: 0 => пень, 1 => пня, 2 => пней)
|
||||
* @param int $count
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_declension_ru($forms, $count)
|
||||
{
|
||||
$mod100 = $count % 100;
|
||||
switch ($count%10) {
|
||||
case 1:
|
||||
if ($mod100 == 11)
|
||||
return $forms[2];
|
||||
else
|
||||
return $forms[0];
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
if (($mod100 > 10) && ($mod100 < 20))
|
||||
return $forms[2];
|
||||
else
|
||||
return $forms[1];
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
case 8:
|
||||
case 9:
|
||||
case 0:
|
||||
return $forms[2];
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Модификатор declension: склонение существительных
|
||||
*
|
||||
* @param int $count
|
||||
* @param string $forms
|
||||
* @param string $language
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_declension($count, $forms, $language='')
|
||||
{
|
||||
global $currentLanguage, $Language;
|
||||
if (!$language)
|
||||
$language = $currentLanguage;
|
||||
|
||||
$count = abs($count);
|
||||
|
||||
// Пытаемся выщемить термин из словаря
|
||||
if (preg_match('/^(.*)\/(.*)$/', $forms, $termine))
|
||||
{
|
||||
if ($termine[1] && $termine[2])
|
||||
{
|
||||
$forms = $Language[$termine[1]][$termine[2]];
|
||||
}
|
||||
}
|
||||
|
||||
// Выделяем отдельные словоформы
|
||||
$forms = explode(';', $forms);
|
||||
|
||||
$fn = 'smarty_modifier_declension_'.$language;
|
||||
if (function_exists($fn))
|
||||
{
|
||||
// Есть персональная функция для текущего языка
|
||||
return $fn($forms, $count);
|
||||
} else {
|
||||
// Действуем по образу и подобию английского языка
|
||||
return smarty_modifier_declension_en($forms, $count);
|
||||
}
|
||||
}
|
||||
?>
|
Loading…
Reference in a new issue