Форум сетевых администраторов
Показаны 15 сообщений на этой странице

Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- Хаки от Netadmin или "Сделай сам" (http://netadmin.ws/forum/forumdisplay.php?forumid=65)
-- Учим VBulletin правильно говорить по русски! (http://netadmin.ws/forum/showthread.php?threadid=1067)


Помещено polo 12-04-2002 в 17:18:

Учим VBulletin правильно говорить по русски!

Наверное многие из вас заметили неправильное отображение оканчания слова пользователь/гость при отображение их колличества на форумах переведенных на русский язык. Ð_то касаеться в частности следующих отрывкаов:
На данный момент на форуме прсудствуют 3 пользователей.
или
На форуме присудствуют 4 пользователей и 2 гостей
Я при переводе форума часто задумывался над этой проблемой, но всегда решал оставить все как есть и не забивать себе голову пустяками и везде где это возможно старался предварять количество двоиточием (Пользователей: 2).
На днях Total спросил у меня решения этой проблемы. Вот какое решения я предлагаю:

В файле admin/functions.php в самом конце перед ?> нужно добавить функцию:

PHP:


function termination ($number){
$s=$number;
if (
strlen($number)>1){ $s=substr($number, strlen($number)-2); }
if (
$s < 11 and $s > 14) { $s=substr($number, strlen($number)-1); }

if(
$s=="1"){ $term = "ь";}
elseif(
$s>"1" and $s < 5) { $term = "я"; }
else { 
$term = "ей"; }
return 
$term;
}


Ð_та функция принимает число и в зависимости от числа возвращяет окончание. Также учитываються числа 11, 12, 13, 14.

Пример использования:
Присвоение правильных окочаний на главной странице форума в блоке Кто в онлайне.
В файле index.php перед

PHP:

eval("\$loggedinusers = \"".gettemplate('forumhome_loggedinusers')."\";");


добавить:

PHP:

$userterm 
= termination($numberregistered);
  
$guestterm = termination($numberguest);


В шаблоне forumhome_loggedinusers нужно изменить пользователей на пользовател$userterm и гостей на гост$guestterm.

В общем эту функцию можно применить везде где окончания ь, я, ей в зависимости от количества.

__________________
Всегда есть решение.


Помещено Total 12-04-2002 в 17:27:

Было бы не плохо, если бы ты написал то же самое про приватные сообщения

__________________
Интернет форум для всех Ты тут еще не был? ...
рейтинг форумов Админы форумов - сюда!!!


Помещено polo 12-04-2002 в 17:34:

Для приватных сообщений все аналогично только нужно оканчания поменять.

__________________
Всегда есть решение.


Помещено Vanish 20-04-2002 в 15:31:

Оптимизация вроде

Предлагаю следующую модификацию функции:


PHP:


// -------------------------------------------------------------------------------------------------------------------
 // First version of termination function by Polo     
 // Modification & Comments by Vanish                
 // Now it's work with the numbers more then 100    
 // Was added different terms for different cases.
 // -------------------------------------------------------------------------------------------------------------------
 // You may contact with me by email: vanish@novgorod.net
 // -------------------------------------------------------------------------------------------------------------------
 // Первая версия функции разработанна Polo        
 // Модифицированна Vanish'ем. Комментарии тоже мои.            
 // Добавлено: возможность работы с числами за 100;
 //            различные варианты окончаний для разных случаев
 //            таких как "Ð_екорд посещаемости"; "Новые ПМ сообщения"; "Непрочитанные ПМ сообщения"; "Всего ПМ сообщений"    
 // -------------------------------------------------------------------------------------------------------------------
 // Вы можете связаться со мной по email: vanish@novgorod.net
 // -------------------------------------------------------------------------------------------------------------------

/* Выбор маски - $mask
    $mask == 1 отвечает за склонение слова "пользователь или гость"
    $mask == 2 ---||--- за склонение слова "человек"
    $mask == 3 ---||--- за склонение слова "новое"
    $mask == 4 ---||--- за склонение слова "сообщение"
*/

function termination ($number, $mask=1){
    
$s=$number;

    
### Посмотрим а не многозначно ли число? ###
    
if (strlen($number)>1) { 
        
        
### Если два последние цифры попали в интервал [10,20), оставляем от числа эти 2-е последние цифиры ###
        
if (substr($number, strlen($number)-2, 1) == 1) { $s=substr($number, strlen($number)-2);} 
        
### Иначе нам от числа больше последней цифры и ненадо ###
        
else {$s=substr($number, strlen($number)-1);}                           
    }

    
### Выбираем окончания ###
    
switch($mask) {
    case 
1: ### Для активных пользователей - слово "пользователь/гость" ###
            
if($s=="1") { $term = "ь";}
            elseif (
$s>"1" and $s < 5) { $term = "я"; }
            
### А здесь корректно будут обработаны, помимо обыкновенных чисел, и 11,12,13,14 ###
            
else { $term = "ей"; }
            break;
    case 
2: ### Для рекорда посещаемости - слово "человек" ###
            
if ($s>"1" and $s < 5) { $term = "ка"; }
            else { 
$term = "к"; }
            break;
    case 
3:    ### Для ПМ сообщений - слово "новое" ###
            
if($s=="1") { $term = "ое";}
            else { 
$term = "ых";}
            break;
    case 
4:    ### Для ПМ сообщений - слово "сообщение" ###
            
if($s=="1") { $term = "ие";}
            elseif (
$s>"1" and $s < 5) { $term = "ия"; }
            else { 
$term = "ий"; }
            break;
    default: 
### Если ничего не вышло ###
            
echo "<b>Ошибка:</b> неправильно задан параметр <i>mask</i> функции <i>termination</i>.";
            exit;
    }
    
    return 
$term;
}



Алгоритм немного изменен, правда не знаю в лучшую ли сторону. Если что то не работает... Пофиксите сами ))

Замеченные преимущетва и недостатки:
+ по требованию трудящихся введены случаи работы с ПС;
+ еще комментарии по мере сил накарябал, на тот случай если кто захочет разобраться/модифицировать;
- заточено под определенную русификацию;
- при словосочетанях вроде 'n новых сообщений' функцию приходится использовать неоднократно: отдельно для слова 'новых' и отдельно для - 'сообщений'.

Еще всем кто хочет проверить правильность работы скрипта - использовать следующий код:


PHP:

### Тестирование функции ###

for ($something=100; $something<=130; $something++) { 
    
$tmp1=termination($something, 3);
    
$tmp2=termination($something, 4);
    echo 
"$something нов<i>$tmp1</i> сообщен<i>$tmp2</i> <br>";
}



По использованию все остается так же как у polo. Однако рекомендую ознакомится с правильностью выбора параметра $mask (см. комментарии)

За сим позвольте откланятся.
--- Всем GL from Vanish aka Jesus


Помещено Denisak 21-04-2002 в 05:40:

класс!

__________________
С уважением, Денис
-----------------------
Ð_ХЛ - модификация для ЕА НХЛ 2004.
http://www.rhl-mod.ru


Помещено Tagore 01-06-2003 в 00:02:

Vanish
Astalavista baby!

__________________
Международное брачное агенство в Сибири.


Помещено MCTarakan 01-06-2003 в 01:52:

дык, финал релиз давайте!

__________________
yMC.ru - хомяк музыканта


Помещено Tagore 04-06-2003 в 20:41:

Wink Моя версия хака "Транслитерации"

Добавил твердый знак и щ.
Ð_азбил на три колонки. Пока все.

__________________
Международное брачное агенство в Сибири.


Помещено MCTarakan 04-06-2003 в 23:41:

Tagore, это ты к чему?

__________________
yMC.ru - хомяк музыканта


Помещено Tagore 05-06-2003 в 17:12:

MCTarakan
К теме русский язык.
Не буде же специально тему создавать?
Вот и прицепил свои три килобайта.

__________________
Международное брачное агенство в Сибири.


Помещено MCTarakan 06-06-2003 в 00:51:

Tagore дык, описание можно поточнее сделать, а то это же совсем НЕ то, что все ТУТ делают?! Или я неправ?

__________________
yMC.ru - хомяк музыканта


Помещено Igor 06-06-2003 в 08:56:

MCTarakan
Про то как установить транслит тут есть тема, и хак в дампе. Я сам описание установки делал больше года назад. Ð_то тагор доделал джава скрипт, чтоб лучше работал.

__________________
C уважением, Игорь
cblog.ru


Помещено MCTarakan 06-06-2003 в 23:31:

Igor да нет... я и имел ввиду, что именно это за хак?! Теперь понятно, что это улучшенный транслит... просто сразу не врубился - тема про одно, а хак про другое...

__________________
yMC.ru - хомяк музыканта


Помещено qwerty000 10-06-2003 в 22:59:

Как сделать, чтобы можно было использовать $userterm в showthread.php, то есть на страницах, когда смотришь тему.

__________________
Было бы о чем промолчать, а уж что сказать - всегда найдется.


Помещено Tagore 03-02-2004 в 21:13:

polo
А для вБ3 это выглядело бы немножко иначе?

__________________
Международное брачное агенство в Сибири.


Формат времени GMT. Текущее время 08:04.
Показаны 15 сообщений на этой странице

Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.