mirror of
				https://github.com/avecms/AVE.cms.git
				synced 2025-11-03 22:56:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?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;
 | 
						|
	if (fmod($count, 1) != 0) return $forms[2];
 | 
						|
	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((int)$count);
 | 
						|
 | 
						|
    // Пытаемся выщемить термин из словаря
 | 
						|
    if (preg_match('/^(.*)\/(.*)$/', $forms, $termine))
 | 
						|
    {
 | 
						|
        if ($termine[1] && $termine[2])
 | 
						|
        {
 | 
						|
            $forms = $Language[$termine[1]][$termine[2]];
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    // Выделяем отдельные словоформы
 | 
						|
    $forms = explode(';', $forms);
 | 
						|
	 return smarty_modifier_declension_ru($forms, $count);
 | 
						|
 | 
						|
/*    $fn = 'smarty_modifier_declension_'.$language;
 | 
						|
    if (function_exists($fn))
 | 
						|
    {
 | 
						|
        // Есть персональная функция для текущего языка
 | 
						|
        return $fn($forms, $count);
 | 
						|
    } else {
 | 
						|
        // Действуем по образу и подобию английского языка
 | 
						|
        return smarty_modifier_declension_en($forms, $count);
 | 
						|
    }*/
 | 
						|
}
 | 
						|
?>
 |