«Процитировано 3 раз». «Тры раз — нэ пидораз». «Этот надпис рэжет глаз».
Специально для тех, кто оформляет интерфейсы, не повторяйте оплошности ValeZ. Образовать множественное число очень просто. Вот для этого кусок кода на PHP:
code:
function ru_lang_plural ($num, $str0, $str1, $str2)
{
if ($num == 0 || ($num > 4 && $num < 21)) {
return $str0; // 0 цитат, 5 цитат
} else {
if ($num > 10) $n = $num % 10;
else $n = $num;
if ($n == 1) return $str1; // 1 цитата
if ($n > 1 && $n < 5) return $str2; // 2 цитаты
};
}
Если строки хранятся в отдельном файле или в БД (а они должны храниться отдельно в любом серьёзном проекте), можно работать с ними например так:
code:
$lang = array (
'str1' => 'В вашей корзине {%0, товар}, благослави вас Господь!',
'str2' => 'У нас есть {%0; отличная причина} чтобы выпить!'
);$plurals = array (
// ноль, одно, два
'товар' => array ('товаров', 'товар', 'товара'),
'отличная причина' => array ('отличных причин', 'отличная причина', 'отличные причины')
);function ru_lang_plural ($num, $plurals)
{
if ($num == 0 || ($num > 4 && $num < 21)) {
return $plurals[0]; // 0 цитат, 5 цитат
} else {
if ($num > 10) $n = $num % 10;
else $n = $num;
if ($n == 1) return $plurals[1]; // 1 цитата
if ($n > 1 && $n < 5) return $plurals[2]; // 2 цитаты
};
}function parse_lang_str ($strName, $vars = array ())
{
global $lang;
// всякие проверки, разделы и т. п. опущены для краткости
$str = $lang[$strName];
if ($vars) {
foreach ($vars as $N => $value) {
$GLOBALS['_value'] = $value;
$str = preg_replace_callback
(
"/\{%($N)[,;](.+?)\}/",
create_function(
'$matches',
'global $plurals, $_value;
return $_value . ' ' . ru_lang_plural($_value, $plurals[trim($matches[2])]);'
),
$str
);
};
};
return $str;
}
for ($n = 0; $n < 12; ++$n) {
echo $n . "<Br>";
echo parse_lang_str ('str1', array (0=> $n)) . '<Br>';
echo parse_lang_str ('str2', array (0=> $n)) . '<Br>';
echo "<br>";
};
Код упрощённый, но вполне рабочий.
Да пребудет с нами русский язык.
++ интересно, зачем здесь в текстовом редакторе стиль «code», если он всё равно на это чихает в итоговой публикации?