Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
/**
* Возвращает единицу измерения с правильным окончанием
*
* @param {Number} num Число
* @param {Object} cases Варианты слова {nom: 'час', gen: 'часа', plu: 'часов'}
* @return {String}
*/
function units(num, cases) {
num = Math.abs(num);
var word = '';
if (num.toString().indexOf('.') > -1) {
word = cases.gen;
} else {
word = (
num % 10 == 1 && num % 100 != 11
? cases.nom
: num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
? cases.gen
: cases.plu
);
}
return word;
}
*Бендер заходит в чат *Человеки покидает чат
<?php
function smarty_function_ending($params, &$smarty)
{
$base = !isset($params['base']) ? '' : $params['base'];
$e0 = $params['e0'];
$e1 = $params['e1'];
$e2 = $params['e2'];
$number = $params['number'];
if ($number % 100 > 10 && $number % 100 < 20) return $base . $e0;
if ($number % 10 == 1) return $base . $e1;
if ($number % 10 >= 2 && $number % 10 <= 4) return $base . $e2;
return $base . $e0;
}
к комментарию
{if $comments == 0}
не добавлено плюсов
{elseif $comments == 1}
добавлен плюс
{else}
добавлены {$comments} {ending number=$comments base="плюс" e0="ов" e1="" e2="а"}
{/if}
{$item.comments} комментар{$item.comments|russify:'иев':'ий':'ия'}Всего пользователей: {$usersTotal} {$usersTotal|russify:'человек':'человека'} function declOfNum($number, $titles)
{
$cases = array (2, 0, 1, 1, 1, 2);
return $number." ".$titles[ ($number%100 > 4 && $number %100 < 20) ? 2 : $cases[min($number%10, 5)] ];
}
Russian::pluralize
Russian::p
Russian.p(1, "вещь", "вещи", "вещей")
=> "вещь"
Russian.p(2, "вещь", "вещи", "вещей")
=> "вещи"
Russian.p(10, "вещь", "вещи", "вещей")
=> "вещей"
Russian.p(3.14, "вещь", "вещи", "вещей", "вещи") # последний вариант используется для дробных величин
=> "вещи"
<!-- Склонение после числительных -->
<xsl:template name="declension">
<!-- Число -->
<xsl:param name="number" select="number"/>
<!-- "Комментарий" -->
<xsl:param name="f0" select="f0" />
<!-- "Комментария" -->
<xsl:param name="f1" select="f1" />
<!-- "Комментариев" -->
<xsl:param name="f2" select="f2" />
<xsl:variable name="absnum">
<xsl:choose>
<xsl:when test="$number < 0"><xsl:value-of select="0 - $number" /></xsl:when>
<xsl:otherwise><xsl:value-of select="$number" /></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:choose>
<xsl:when test="($absnum mod 10) = 1 and ($absnum mod 100) != 11">
<xsl:value-of select="$f0"/>
</xsl:when>
<xsl:when test="(($absnum mod 10) >= 2) and (($absnum mod 10) <= 4) and (($absnum mod 100 < 10) or ($absnum mod 100 >= 20))">
<xsl:value-of select="$f1"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$f2"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template><xsl:call-template name="declension">
<xsl:with-param name="number" select="value-of-your-counter-or-number" />
<xsl:with-param name="f0" select="'комментарий'" />
<xsl:with-param name="f1" select="'комментария'" />
<xsl:with-param name="f2" select="'комментариев'" />
</xsl:call-template>private static string GetDaysWithCase(int daysCount)
{
if (daysCount < 0)
throw new ArgumentException("daysCount");
string days = daysCount.ToString();
string daysCase = "дней";
char lastChar = days[days.Length - 1];
if (days.Length >= 2 && days[days.Length - 2] == '1')
{
// 10-19 дней
}
else if (lastChar == '1')
{
// 1, 21, 31 день
daysCase = "день";
}
else if (lastChar == '2' || lastChar == '3' || lastChar == '4')
{
// 2, 3, 4, 22, 33, 44 дня
daysCase = "дня";
}
return string.Format("{0} {1}", days, daysCase);
}
private static string GetDaysWithCase(int daysCount)
{
if (daysCount < 0)
throw new ArgumentException("daysCount");
string days = daysCount.ToString();
string daysCase = "дней";
char lastChar = days[days.Length - 1];
if (days.Length >= 2 && days[days.Length - 2] == '1')
{
// 10-19 дней
}
else if (lastChar == '1')
{
// 1, 21, 31 день
daysCase = "день";
}
else if (lastChar == '2' || lastChar == '3' || lastChar == '4')
{
// 2, 3, 4, 22, 33, 44 дня
daysCase = "дня";
}
return string.Format("{0} {1}", days, daysCase);
}
* This source code was highlighted with Source Code Highlighter.function declOfNum( $number, $titles ) {
$cases = array( 2, 0, 1, 1, 1, 2 );
return $titles[ ( $number % 100 > 4 && $number % 100 < 20 ) ? 2 : $cases[ mi
n( $number % 10, 5 ) ] ];
}
Не забудьте отдельно обработать случай, для числа 0. Просто написать, например, «0 записей» не достаточно. Нужно как минимум написать «Записей нет» или изменить дизайн, скрыв вообще пустой блок с записями.
Ext.util.Format.wformat = function(number,forms){
var n = parseInt(number,10);
var nplurals=3;
var plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);
plural = (n==0)?0:plural + 1;
if(forms.length > plural) return forms[plural].replace("$",n);
return "";
}
var tpl = new Ext.XTemplate('{year:(["нет","Один год","$ года","$ лет"])}');
/**
* Функция склонения числительных в русском языке
*
* @param int $number Число которое нужно просклонять
* @param array $titles Массив слов для склонения
* @return string
**/
function DigitCase($number, $titles)
{
//отсекаем минусовые значения
$number = str_replace("-","",$number);
$cases = array (2, 0, 1, 1, 1, 2);
return $titles[ ($number%100>4 && $number%100<20)? 2 : $cases[min($number%10, 5)] ];
}
public class Misc {
public static String getDayText (int numberOfDays) {
int x;
x = numberOfDays % 100;
if (x > 20) {
x = x % 10;
}
if (x > 4) {
return "дней";
} else {
switch (x) {
case 1: return "день";
case 0: return "дней";
default: return "дня";
}
}
}
-(NSString *)units:(int)num cases:(NSArray *)cases {
num = abs(num);
NSString *word = @"";
word = (
num % 10 == 1 && num % 100 != 11
? [cases objectAtIndex:0]
: num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
? [cases objectAtIndex:1]
: [cases objectAtIndex:2]
);
return word;
}
number = 129
word = ["комментарий", "комментария", "комментариев"]
def get_com(x, y):
inumber = x % 100
if inumber >= 11 and inumber <=19:
y = y[2]
else:
iinumber = inumber % 10
if iinumber == 1:
y = y[0]
elif iinumber == 2 or iinumber == 3 or iinumber == 4:
y = y[1]
else:
y = y[2]
print(x, y)
get_com(number, word)
def get_com(x, y):
if x == 0:
return "нет комментариев"
else:
inumber = x % 100
if inumber >= 11 and inumber <=19:
y = y[2]
else:
iinumber = inumber % 10
if iinumber == 1:
y = y[0]
elif iinumber == 2 or iinumber == 3 or iinumber == 4:
y = y[1]
else:
y = y[2]
return str(x) + " " + y
Война с роботами: склонение существительных после числительных