IPB

Здравствуйте, Гость ( Вход | Регистрация )

 
Ответить в этой темеОткрыть новую тему
> ХАК: коментарии по-русски, с парвильными окончаниями
dodger
сообщение Dec 13 2006, 11:58 AM
Сообщение #1


Advanced Member
***

Группа: User
Сообщений: 38
Регистрация:
26-September 06
Пользователь №: 954



Хак, для комментариев.
Т.к. в русском языке числительные делятся условно не на две, как в английском, категории (один или много), а на три (один, от 2 до 4, и 5 и более).
Я решил модифицировать Нуклеус этим хаком в области комменатриев, чтобы писалось по-русски:
1 комментарий
2, 3, 4 комментария
5 и более комментариев
Вот собственно хак:
Открываем /nucleus/libs/ADMIN.PHP
(строка ~ 3550):
Код

$this->_templateEditRow($template, _TEMPLATE_CMANY, 'COMMENTS_MANY', 'commentwords', 80);

После нее добавляем:
Код

//russian comments' start
    $this->_templateEditRow($template, _TEMPLATE_CMANYMORE, 'COMMENTS_MANYMORE', 'commentwords', 300);
//russian comments' end

(строка ~ 3667):
Код

$this->addToTemplate($templateid, 'COMMENTS_MANY', postVar('COMMENTS_MANY'));

После нее добавляем:
Код

//russian comments' start
$this->addToTemplate($templateid, 'COMMENTS_MANYMORE', postVar('COMMENTS_MANYMORE'));
//russian comments' end          

Открываем /nucleus/libs/COMMENTS.PHP
(строка ~ 361):
Код

function parse_commentword() {
        if ($this->commentsObj->commentcount == 1)
            echo $this->template['COMMENTS_ONE'];
        else
            echo $this->template['COMMENTS_MANY'];
    }    

Заменяем на:
Код

//russian comments' start
function parse_commentword() {
        if(strlen($this->commentsObj->commentcount)==1){
            if ($this->commentsObj->commentcount == 1)
                echo $this->template['COMMENTS_ONE'];//1 комментарий
            if ($this->commentsObj->commentcount == 2 OR $this->commentsObj->commentcount == 3 OR $this->commentsObj->commentcount == 4)
                echo $this->template['COMMENTS_MANY'];//2,3,4 комметария
            if ($this->commentsObj->commentcount >= 5 AND $this->commentsObj->commentcount <= 20)
                echo $this->template['COMMENTS_MANYMORE'];// 5 - 9 комментариев
        }//end if 1 digit
        if(strlen($this->commentsObj->commentcount)==2 AND $this->commentsObj->commentcount <= 20){
            echo $this->template['COMMENTS_MANYMORE'];// 10 - 20 комментариев
        }
        if(strlen($this->commentsObj->commentcount)>=2 AND $this->commentsObj->commentcount >= 21){
            if (substr($this->commentsObj->commentcount,-1,1) == 1)
                echo $this->template['COMMENTS_ONE'];//1 комментарий
            if (substr($this->commentsObj->commentcount,-1,1) == 2 OR substr($this->commentsObj->commentcount,-1,1) == 3 OR substr($this->commentsObj->commentcount,-1,1) == 4)
                echo $this->template['COMMENTS_MANY'];//2,3,4 комметария
            if (substr($this->commentsObj->commentcount,-1,1) >= 5 OR substr($this->commentsObj->commentcount,-1,1) == 0)
                echo $this->template['COMMENTS_MANYMORE'];// 5 - 20 комментариев
        }//end if 2 or more digits
    }
//russian comments' end          

Открываем /nucleus/language/russian.php
(строка ~697):
Код

define('_TEMPLATE_CMANY',            '2 или более комментариев')

Заменяем на:
Код

//russian comments' start
define('_TEMPLATE_CMANY',            '2, 3 или 4 комментария');
define('_TEMPLATE_CMANYMORE',        '5 или больше комментариев');
//russian comments' end          

Наслаждаемся русским языком smile.gif
К началу страницы
 
+Цитировать Сообщение
saj
сообщение Dec 13 2006, 02:26 PM
Сообщение #2


Advanced Member
***

Группа: User
Сообщений: 126
Регистрация:
20-December 05
Пользователь №: 38



Классно. Но
Цитата
1 комментарий2, 3, 4 комментария5 и более комментариев

И так до 20, а потом 21 комментарИЙ, 22 комментарИЯ и т.д.
О грейтовый, труфульный, пауэрфульный, фревый рашенский ленгвич!


--------------------
Изображение
К началу страницы
 
+Цитировать Сообщение
dodger
сообщение Dec 13 2006, 04:44 PM
Сообщение #3


Advanced Member
***

Группа: User
Сообщений: 38
Регистрация:
26-September 06
Пользователь №: 954



Цитата(saj @ Dec 13 2006, 03:26 PM) [snapback]1846[/snapback]

Классно. Но

И так до 20, а потом 21 комментарИЙ, 22 комментарИЯ и т.д.
О грейтовый, труфульный, пауэрфульный, фревый рашенский ленгвич!

Точно, это как раз у меня из головы вылетело...Но это не проблема...нужно просто будет добавить проверку на последнюю цифру в числе...
К началу страницы
 
+Цитировать Сообщение
dodger
сообщение Dec 14 2006, 01:00 PM
Сообщение #4


Advanced Member
***

Группа: User
Сообщений: 38
Регистрация:
26-September 06
Пользователь №: 954



В первом посту внес изменения. Теперь все работает правильно!
К началу страницы
 
+Цитировать Сообщение
maxirmx
сообщение Aug 5 2007, 02:47 PM
Сообщение #5


Newbie
*

Группа: User
Сообщений: 3
Регистрация:
29-July 07
Из: StPe
Пользователь №: 1,547



А почему не так ?

[codebox]<?php

class NP_WordCommentsRU extends NucleusPlugin
{
// name of plugin
function getName()
{
return 'WordCommentsRU';
}

// author of plugin
function getAuthor()
{
return 'maxirmx';
}

// an URL to the plugin website
// can also be of the form mailto:[email protected]
function getURL()
{
return '[email protected]';
}

// version of the plugin
function getVersion()
{
return '0.1';
}

// a description to be shown on the installed plugins listing
function getDescription()
{
return 'This plugin provides correct Russian grammar form for COMMENT_ONE/COMMENTS_MANY word';
}

function doTemplateCommentsVar(&$item, &$comment)
{
$query = 'SELECT count(*) FROM '.sql_table('comment').' WHERE '.'citem='.$item->itemid;
$numComments = mysql_result(sql_query($query), 0);

$numComments = $numComments % 100;

if ($numComments > 10 and $numComments < 20) $numKey = 5;
else $numKey = $numComments % 10;

if ($numKey == 1) echo 'комментарий';
else
{
if ($numKey == 0 or $numKey > 4) echo 'комментариев';
else echo 'комментария';
}
}

function supportsFeature ($what)
{
switch ($what)
{
case 'SqlTablePrefix':
return 1;
default:
return 0;
}
}

}
?>
[/codebox]

Свинство, конечно, что к COMMENTS доступа нет ...
К началу страницы
 
+Цитировать Сообщение

Ответить в этой темеОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 17th September 2019 - 07:42 AM
Рецепты - Скачать программы - Scripts