Trustmaster |
|
---|---|
/**
* Makes correct plural forms of words
*
* @global string $lang Current language
* @param int $digit Numeric value
* @param string $expr Word or expression
* @param bool $onlyword Return only words, without numbers
* @return string
*/
function sed_declension($digit, $expr, $onlyword = false)
{
if (!is_array($expr))
{
return trim(($onlyword ? '' : "$digit ") . $expr);
}
global $lang;
$i = preg_replace('#\D+#', '', $digit);
$plural = sed_get_plural($i, $lang);
$cnt = count($expr);
return trim(($onlyword ? '' : "$digit ") . (($cnt > 0 && $plural < $cnt) ? $expr[$plural] : ''));
}
/**
* Used in sed_declension to get rules for concrete languages
*
* @param int $plural Numeric value
* @param string $lang Target language code
* @return int
*/
function sed_get_plural($plural, $lang)
{
switch ($lang)
{
case 'en':
case 'de':
case 'nl':
case 'se':
return ($plural == 1) ? 1 : 0;
case 'fr':
case 'uk':
return (($plural == 0) || ($plural == 1)) ? 1 : 0;
case 'ru':
case 'ua':
$plural %= 100;
return (5 <= $plural && $plural <= 20) ? 2 : ((1 == ($plural %= 10)) ? 0 : ((2 <= $plural && $plural <= 4) ? 1 : 2));
default:
return 0;
}
} May the Source be with you!
|
Ratibor |
|
---|---|
Trustmaster
Спасибо. Можно в транк включить ? Не задавай глупых вопросов, не услышишь вранья.
|
Trustmaster |
|
---|---|
Извини, не заметил последнее сообщение. Но ты уже залил изменения в транк, и правильно сделал, так что поздравляю! Теперь бы статеечку написать, как все это великолепие использовать для облагораживания своих сайтов :) В смысле, в документации, а не на форуме.
May the Source be with you!
|
|
This post was edited by Trustmaster (2009-02-13 06:38, 15 years ago) |
esclkm |
|
---|---|
Да и поколдуй с текущими окончаниями чтобы были явные примеры работы функции
littledev.ru - мой маленький зарождающийся блог о котонти.
снижение стоимости программирования и снижение стоимости производства разные вещи. Первое можно скорее сравнить с раздачей работникам дешевых инструментов, чем со снижением зарплаты |
|
This post was edited by esclkm (2009-02-13 07:32, 15 years ago) |
Ratibor |
|
---|---|
# esclkm : Да и поколдуй с текущими окончаниями чтобы были явные примеры работы функцииПлагин поиска уже переделан для примера и залит в транк. Постараюсь еще что нибудь переделать. Кстати вот хороший пример как нельзя писать, смотрите function sed_build_timegap Особенно строка: $result = ($gap<2) ? '1 '.$L['Minute'] : $gap.' '.$L['Minutes']; Как минимум эгоизмом попахивает. В общем вся функция подлежит переделки. Вот переделал, посмотрите вроде все правильно: function sed_build_timegap($t1,$t2)
{
global $L;
$gap = $t2 - $t1;
if($gap<=0 || !$t2 || $gap>94608000)
{
$result = '';
}
elseif($gap<60)
{
$result = sed_declension($gap,$L['Seconds']);
}
elseif($gap<3600)
{
$gap = floor($gap/60);
$result = sed_declension($gap,$L['Minutes']);
}
elseif($gap<86400)
{
$gap1 = floor($gap/3600);
$gap2 = floor(($gap-$gap1*3600)/60);
$result = sed_declension($gap1,$L['Hours']).' ';
if ($gap2>0)
{
$result .= sed_declension($gap2,$L['Minutes']);
}
}
else
{
$gap = floor($gap/86400);
$result = sed_declension($gap,$L['Days']);
}
return $result;
} Остается переписать ланг файлы. Не задавай глупых вопросов, не услышишь вранья.
|
|
This post was edited by Trustmaster (2009-02-14 17:15, 15 years ago) |
Trustmaster |
|
---|---|
Да, займись такими исправлениями, пожалуйста. Изменения добавляй в trunk. Если надо перевести какие-то строчки для лангфайлов, выкладывай их здесь - переведем, добавишь. И используй, пожалуйста, подсветку для кода.
May the Source be with you!
|
Ratibor |
|
---|---|
Trustmaster
Проверил функцию, работает вездеотлично, и на форуме и в кто онлайн и т.п. Сейчас в транк добавлю для русских и английских файлов Все добавил, также удалил из русского и английского ланг файлов ненужные строки: $L['Day'] $L['Hour'] $L['Minute'] $L['Second'] Остались только исправленные: $L['Days'] $L['Hours'] $L['Minutes'] $L['Seconds'] Ктото тут сомневался про отрицательные значения чисел :) Функции sed_declension побарабану какие числа, также по барабану в какие тэги число обрамлено, к примеру входящее число может быть обрамлено к примеру тэгом Bold. Если у кого есть сомнения могут посмотрть переделанную функцию sed_build_timezone, Там прекрасно обрабатываются отрицательные значения времменных зон. Не задавай глупых вопросов, не услышишь вранья.
|
|
This post was edited by Ratibor (2009-02-14 18:07, 15 years ago) |
Trustmaster |
|
---|---|
Хорошо. Один только проблемный момент может быть из-за удаления языковых строк: эти строки могут использоваться не только в ядре и не только для множественного числа, но и сами по себе, так что лучше их оставить. Или даже для declensions использовать отдельные строки, вроде $L['Days_auto'].
May the Source be with you!
|
Ratibor |
|
---|---|
Trustmaster
Я проверил, эти слова больше нигде не используются в стандартной поставке. Ни в движке, ни в плагинах. А если ктото решит использовать эти строки в своих плагинах, то будет хороший повод сразу написать правильно P.S. Написал статью, утверди Не задавай глупых вопросов, не услышишь вранья.
|
Trustmaster |
|
---|---|
Ладно, посмотрим, будут ли жалобы.
May the Source be with you!
|
Ratibor |
|
---|---|
тут возникал еще один вопрос:
esclkm: Т.е. что будет если в функцию sed_declension подать отформатированное число, в общем число разделенное пробелами на группы. Будет то же самое что и с числами обрамленными тэгами, т.е. все обработается правильно. Специально провел эксперимент, тупо подал на вход этой функции это число, вернулось: Найдено 11 12 13 14 15 совпадений Смотрите в функции строку: $i = preg_replace('#\D+#', '', $digit);после этого число преобразуется в 1112131415 и уже после этого обрабатывается. Вот и до header.php добрался и тоже переделал, чтоб надпись о количестве новых личных сообщений правильная была Что бы еще переделать ? Не задавай глупых вопросов, не услышишь вранья.
|
|
This post was edited by Ratibor (2009-02-14 20:12, 15 years ago) |
Trustmaster |
|
---|---|
Вот только сейчас видел "зоопарк" в whosonline: в common.php и в плагине.
May the Source be with you!
|
Ratibor |
|
---|---|
# Trustmaster : Вот только сейчас видел "зоопарк" в whosonline:Если ты имеешь ввиду графу "Последний раз был замечен", то там должно быть уже все правильно. А если об этом: Сейчас на сайте 9 гостей и 7 зарегистрированных пользователей : то надо переделать :) Не задавай глупых вопросов, не услышишь вранья.
|
dervan |
|
---|---|
А при 11 12 13 14 уже будет неправильно. Как и при 11 12 13.
|
esclkm |
|
---|---|
а просто числа 11, 12, 13 обрабатываются правильно?
littledev.ru - мой маленький зарождающийся блог о котонти.
снижение стоимости программирования и снижение стоимости производства разные вещи. Первое можно скорее сравнить с раздачей работникам дешевых инструментов, чем со снижением зарплаты |