mirror of
				https://github.com/avecms/AVE.cms.git
				synced 2025-10-30 21:26:40 +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);
 | |
|     }*/
 | |
| }
 | |
| ?>
 |