Plural rules в языковых файлах

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
Аватара пользователя
Stepan Selyuk
Сообщения: 198
Зарегистрирован: 2010.02.03, 05:51
Откуда: Cyprus, Limassol
Контактная информация:

Plural rules в языковых файлах

Сообщение Stepan Selyuk »

В некоторых языковых файлах нет секции Plural rules (видимо потому что язык не содержит таких правил), и в этом случае Yii выкатывает всю строку var1|var2|var3. Предлагаю добавить в код фреймворка, проверку, что если нет элемента массива "pluralRules", то:

Код: Выделить всё

'pluralRules' =>
  array (
          0 => 'true',
  ), 
Мне пришлось поправлять для вьетнамского, китайского, корейского языков сами языковые файлы, что не есть гуд. При обновлении фреймворка, все теряется) и приходится вручную копировать файлы.
Сначала невидимое, затем видимое. И так у всех программистов :)
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Plural rules в языковых файлах

Сообщение samdark »

Сделайте pull-request с подправленными файлами, не потеряется.
Аватара пользователя
Stepan Selyuk
Сообщения: 198
Зарегистрирован: 2010.02.03, 05:51
Откуда: Cyprus, Limassol
Контактная информация:

Re: Plural rules в языковых файлах

Сообщение Stepan Selyuk »

Дело не в подправленных файлах. Я не языковой специалист чтобы знать в каких их сотни языков нет правил склонений числительных :) Но так как вы импортируете информацию из CLDR, и в каких-то файлах не оказывается указанного элемента массива (а значит и в языке нет), то нужно программно выключать эту опцию, точнее выдавать только первое правило из case1|case2|case3.
Сначала невидимое, затем видимое. И так у всех программистов :)
Аватара пользователя
Stepan Selyuk
Сообщения: 198
Зарегистрирован: 2010.02.03, 05:51
Откуда: Cyprus, Limassol
Контактная информация:

Re: Plural rules в языковых файлах

Сообщение Stepan Selyuk »

Конкретно в файле CLocale.php надо поправить:

Код: Выделить всё

public function getPluralRules()
    {
        return isset($this->_data['pluralRules']) ? $this->_data['pluralRules'] : array();
    }
на

Код: Выделить всё

public function getPluralRules()
    {
        return isset($this->_data['pluralRules']) ? $this->_data['pluralRules'] : array(0=>'true');
    }
И тогда в YiiBase::t будет правильно срабатывать конструкция:

Код: Выделить всё

$expressions=self::$_app->getLocale($language)->getPluralRules();
    if($n=min(count($chunks),count($expressions))) // $n=0 и if не работает.
       {
           for($i=0;$i<$n;$i++)
              $chunks[$i]=$expressions[$i].'#'.$chunks[$i];

            $message=implode('|',$chunks);
       }
Воркэраунда нет, так как в фреймворке использование класса CLocale вшито в код. Если только использовать измененный вызов Yii:t(), с поправленной логикой.
Сначала невидимое, затем видимое. И так у всех программистов :)
Аватара пользователя
Stepan Selyuk
Сообщения: 198
Зарегистрирован: 2010.02.03, 05:51
Откуда: Cyprus, Limassol
Контактная информация:

Re: Plural rules в языковых файлах

Сообщение Stepan Selyuk »

И неплохо было бы ввести "глобальные" шаблоны в Yii:t, чтобы скажем определить "{{projectname}}" как "ABC Inc." и использовать в нужных местах, без подстановки шаблона в массив при вызове Yii:t().
Сначала невидимое, затем видимое. И так у всех программистов :)
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Plural rules в языковых файлах

Сообщение samdark »

Да, так, пожалуй, будет лучше. Делайте pull-request, смёржим.
Аватара пользователя
Stepan Selyuk
Сообщения: 198
Зарегистрирован: 2010.02.03, 05:51
Откуда: Cyprus, Limassol
Контактная информация:

Re: Plural rules в языковых файлах

Сообщение Stepan Selyuk »

Sam Dark писал(а):Делайте pull-request, смёржим.

русский язык в следующем году собираются внести в реестр вымирающих... сохраним родной язык.

Разместил проблему https://github.com/yiisoft/yii/issues/2123
Сначала невидимое, затем видимое. И так у всех программистов :)
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Plural rules в языковых файлах

Сообщение samdark »

:) Спасибо.
Аватара пользователя
Stepan Selyuk
Сообщения: 198
Зарегистрирован: 2010.02.03, 05:51
Откуда: Cyprus, Limassol
Контактная информация:

Re: Plural rules в языковых файлах

Сообщение Stepan Selyuk »

Также предлагаю добавить распознавание следующей конструкции:

Код: Выделить всё

Yii::t('default', 'Период проверки: ##{n} день|{n} дня|{n} дней##') 
в текущем варианте приходится копировать всю фразу, а она бывает достаточно длинной.
Сначала невидимое, затем видимое. И так у всех программистов :)
Аватара пользователя
Stepan Selyuk
Сообщения: 198
Зарегистрирован: 2010.02.03, 05:51
Откуда: Cyprus, Limassol
Контактная информация:

Re: Plural rules в языковых файлах

Сообщение Stepan Selyuk »

И еще одна полезная идея, ввести специальные теги в которых можно положить числа, денежное значение, дату - но которые статичные, никогда не будут динамически меняться, и нет смысла выносить их в массив к Yii::t. Когда обработчик встретит подобные теги он приведет данные в соответствии с текущей локалью. Что-то типа этого: "Сумма по данному контракту составляет [C]5000|USD[/C] и не может быть изменена со временем.", "Наш проект был запущен [D]2012-02-01|LONG[/D] под знаком звезды :)", "Мы обнаружили [N]4300[/N] уязвимостей в марте.". Я уверен что синтаксис можно придумать получше чем я указал, например используя BB-коды, только без квадратных скобок, чтобы не мешать с оригинальными кодами. Также было бы неплохо, чтобы в конфигурации можно было зарегистрировать свои теги и указать обработчика для них.
Сначала невидимое, затем видимое. И так у всех программистов :)
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Plural rules в языковых файлах

Сообщение lancecoder »

"Сумма по данному контракту составляет {:summ} и не может быть изменена со временем.", array('{:summ}'=>5000.Yii::app()->params['defaultCurrency'])
все остальные по анологии
Аватара пользователя
Stepan Selyuk
Сообщения: 198
Зарегистрирован: 2010.02.03, 05:51
Откуда: Cyprus, Limassol
Контактная информация:

Re: Plural rules в языковых файлах

Сообщение Stepan Selyuk »

О чем я и говорю, что в статичных текстах на сайте приходится добавлять шаблоны такие, когда можно было бы использовать спец.теги. И анАлогия.

Тогда уж

Код: Выделить всё

Yii::app( )->getNumberFormatter( )->formatCurrency( 5000, Yii::app( )->params[ 'defaultCurrency' ] )
а когда предложение или даже абзац состоит из нескольких таких шаблонов получается реально каша и переводчики (а они не программисты) зачастую не понимают, что конкретно будет вставлено в шаблон.
Сначала невидимое, затем видимое. И так у всех программистов :)
Ответить