Antar |
|
---|---|
Ни у кого не возникает мысли, что этот функционал излишен?
|
Ratibor |
|
---|---|
# dervan : а для case 'xbr': - другоеДа зоопарк с этими языками Для en и многих друих будет так: 0 matches 1 match 2 matches 3 matches etc..... А для uk, fr и других: 0 match 1 match 2 matches 3 matches etc..... en - читай американский(международный английский) uk - читай английский(Великобритания) Не задавай глупых вопросов, не услышишь вранья.
|
dervan |
|
---|---|
Тогда ещё неприкаянными остались 'au', 'us' - это навскидку, может ещё что есть. Выходит, их тоже надо приткнуть в одну из этих 2-х веток.
|
Ratibor |
|
---|---|
# dervan : Тогда ещё неприкаянными остались 'au', 'us' - это навскидку, может ещё что есть. Выходит, их тоже надо приткнуть в одну из этих 2-х веток.Вот пусть они сами и решают в какую им ветку входить Может вообще оставим только языки, для которых есть ланг файлы в транке, а остальные сами пусть добавляют вместе с локализацией ? Главное основу зделали и добавить новый язык теперь не составит труда. Тогда бы получилось так:
function declension($digit, $expr, $onlyword = false)
{
if (!is_array($expr))
{
return trim(($onlyword ? '' : "$digit ") . $expr);
}
global $lang;
$i = preg_replace('#[^0-9]+#', '', $digit);
$plural = get_plural($i, $lang);
$cnt = count($expr);
return trim(($onlyword ? '' : "$digit ") . (($cnt > 0 && $plural < $cnt) ? $expr[$plural] : ''));
}
function get_plural($plural, $locale)
{
switch ($locale)
{
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;
}
} Не задавай глупых вопросов, не услышишь вранья.
|
|
This post was edited by Ratibor (2009-02-10 03:55, 15 years ago) |
dervan |
|
---|---|
# Ratibor : Может вообще оставим только языки, для которых есть ланг файлы в транке,Правильное решениееееее... (c) # Ratibor : Главное основу зделали и добавить новый язык теперь не составит труда.Ага, спасибо тебе большое. :) Мне тоже не нравятся корявые фразы. |
Ratibor |
|
---|---|
Trustmaster тебя ждем
Выскажи свое весткое мнение ? Будем менять функцию на новую и если да, то на какой вариант ? Под все языки или под те, для которых есть ланг файлы в транке ? Не задавай глупых вопросов, не услышишь вранья.
|
medar |
|
---|---|
Сделайте голосование в Ideas.
Поясните только, если эта фича будет внедрена - надо лэнги обязательно переписывать или можно юзать старые (без склонения в этом случае)? rangjungyeshe.ru
|
Trustmaster |
|
---|---|
Если честно, пребываю практически в таком же неведении о сути этих дебатов, как и все остальные, поэтому согласен с постом medar'а, о том, что неплохо бы хорошенько объяснить, что это такое, с чем едят и как дополнять локализации.
С точки зрения дизайна замечания: [list=1] May the Source be with you!
|
Sergey |
|
---|---|
Что тут объяснять:
вот свеженькое: 12 пользователь(ей), 7 гость(ей) : а хочется: 12 пользователей и 7 гостей www.cotonti.mobi
|
Ratibor |
|
---|---|
# medar : Поясните только, если эта фича будет внедрена - надо лэнги обязательно переписывать или можно юзать старые (без склонения в этом случае)?Объясняю на пальцах. Тем кто не уважает свой язык, или язык не поддерживающий склонения, ничего в ланг файлах переделывать не надо. А для тех людей, кто уважает свой язык, переделка сводится к следующему(на примере плагина search): для русского языка ищем в ланг файле строку: $L['plu_match'] = "совпадений"; и меняем ее на: $L['plu_match'] = array('совпадение','совпадения','совпадений'); т.е. создаем массив array для трех склонений, первое это для значения 1, второе для значения 2 и третье для значения 5 и 0. Все на этом переделка русского ланг файла закончена. для английского языка ищем в ланг файле строку: $L['plu_match'] = "match(es)"; и меняем ее на: $L['plu_match'] = array('matches','match'); т.е. создаем массив array для двух склонений, первое это для значений 0, 2 и т.д., второе для значения 1 . Все на этом переделка английского ланг файла закончена. Теперь переходим к самому плагину: Ищем где в нем вызывается эта фраза, в данном случае в search.php ищем: ".$items." ".$L['plu_match']." она там находится в 4 местах. Меняем ее на : ".declension($items,$L['plu_match'])." Все. Повторю еще раз для любителей крупной бронитехники. Эта переделка никак не влияет на другие языковые файлы. Если к примеру к переделанному плагину вы добавите другой языковой файл, без доработки, то он будет работать как и раньше. # Trustmaster : Мне кажется, логичнее переопределение get_plural в ленгфайлах, либо использование группировки правил по языковым группам.Дак и так зделана группировка по языковым группам. Длинный свитч получился из-за того что туда практически были включены все языки. Но мы маленько урезали и включили, только те, на которые есть ланг файлы в репозитарии(см. вариант чуть выше, там всего 38 строк). Правила для других языков можно посмотреть к примеру тут: http://translate.sourceforge.net/wiki/l10n/pluralforms P.S. Надеюсь теперь все доступно объяснил ? Не задавай глупых вопросов, не услышишь вранья.
|
|
This post was edited by Ratibor (2009-02-10 05:02, 15 years ago) |
Trustmaster |
|
---|---|
Звучит неплохо, очень даже. Теперь найти бы кого-то кто это переведет на английский и выставит на обсуждение в Идеи (я пока пас, над нововведениями некогда работать).
May the Source be with you!
|
Ratibor |
|
---|---|
# Trustmaster : Звучит неплохо, очень даже. Теперь найти бы кого-то кто это переведет на английский и выставит на обсуждение в Идеи (я пока пас, над нововведениями некогда работать).А кроме тебя некому Мне тут на русском-то пришлось пол года объяснять Да и смысла то в голосовании по данному вопросу нет. Мы всеголишь исправляем ошибки в языковых файлах. Просто некоторые наслушались на неокроме.ру флудера Antony. Вместо того чтобы помочь, он там флуд развел. Предлагаю включить следуюющую функцию(поправь если не нравятся какие то названия функций):
function declension($digit, $expr, $onlyword = false)
{
if (!is_array($expr))
{
return trim(($onlyword ? '' : "$digit ") . $expr);
}
global $lang;
$i = preg_replace('#[^0-9]+#', '', $digit);
$plural = get_plural($i, $lang);
$cnt = count($expr);
return trim(($onlyword ? '' : "$digit ") . (($cnt > 0 && $plural < $cnt) ? $expr[$plural] : ''));
}
function get_plural($plural, $locale)
{
switch ($locale)
{
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;
}
} Не задавай глупых вопросов, не услышишь вранья.
|
Trustmaster |
|
---|---|
Обсуждение на 3 страницы не надо переводить, достаточно перевести твой предыдущий пост, чтобы народ знал, что это такое и как это использовать. Документация нужна в первую очередь!
После этого можно будет этот код включить в trunk для тестирования. Функции желательно все-таки назвать sed_declension и sed_get_plural, дополнив их также в коде комментарием PHPDoc. May the Source be with you!
|
dervan |
|
---|---|
Ratibor, и ещё может есть смысл в функцище sed_get_plural() поменять имя параметра $locale на что-то более подходящее - на $lang, например? А то $locale немного сбивает с толку.
|
Ratibor |
|
---|---|
Насчет комментариев, не знаю что даже и писать, скажите напишу
А остальное поправил:
function sed_declension($digit, $expr, $onlyword = false)
{
if (!is_array($expr))
{
return trim(($onlyword ? '' : "$digit ") . $expr);
}
global $lang;
$i = preg_replace('#[^0-9]+#', '', $digit);
$plural = sed_get_plural($i, $lang);
$cnt = count($expr);
return trim(($onlyword ? '' : "$digit ") . (($cnt > 0 && $plural < $cnt) ? $expr[$plural] : ''));
}
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;
}
} Не задавай глупых вопросов, не услышишь вранья.
|