1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-07-01 05:55:02 +03:00
This commit is contained in:
Mzhelskiy Maxim 2009-09-06 11:37:20 +00:00
parent ca870bcd3c
commit 42aa1f9072

View 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);
}
}
?>