We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 11132
    • 41 Posts
    Настраиваю Archivist в REVO для архива новостей и столкнулся с такой проблемой: для вывода названий месяцев сниппет использует стандартные функции PHP, поэтому они выдаются на английском языке (зачем тогда нужен параметр setLocale вообще не ясно, и папка lexicon пуста, чтобы можно было попробовать перевести что-то).

    Чтобы в русскоязычной версии сайта месяцы выводились по русски, решил использовать фильтры. Для вызова списка месяцев в Archivist создал чанк вместо стандартного и прописал там такой в виде
    [[+date:replace=`January==Январь`:replace=`February==Февраль`...]]

    Это сработало. Но при попытке повторить фокус с выводом месяца и года при вызове getArchives, если пишу что-то типа
    [[+arc_month_name:replace=`January==Январь`:replace=`February==Февраль`...]] [[+arc_year]]

    вместо месяца ничего не выводит.

    Кто-нибудь озадачивался такой проблемой "руссификации"? Может, подскажите решение? Или хотя бы объясните, почему на arc_month_name применение любого фильтра (пробовал другие) выдает пустую строку?
      • 22668
      • 718 Posts
      Я не знаю на сколько правильный метод, но я решаю такие проблемы путем добавления в index.php файл строчку
      setlocale(LC_ALL, ’ru_RU.UTF-8’);
        • 9085
        • 630 Posts
        Quote from: Paprikas at Nov 24, 2010, 04:21 PM

        setlocale(LC_ALL, ’ru_RU.UTF-8’);
        По идее, правильнее некуда smiley Иначе зачем локали придумывали?!
        Тем более, если работает.
          Правильно заданный вопрос повышает вероятность получения нужного ответа.
          Что-то не работает? Загляните в лог ошибок!
          Есть проблема? "Локализуйте" её!
          Ответы на большинство вопросов по MODx | MODx RTFM | API Evo Revo | галопом по Европам Азиям smiley wikibooks(ru) Ditto(en) | Wayfinder e-book | Заметки и о MODx
          • 22668
          • 718 Posts
          Раньше в сниппеты и модули втыкал. Потом довольно быстро понял что так дело не пойдет.
          Незачем плодить строчки когда можно в одном месте обозначить.

          В версии 2.1 обещают с локалями разобраться.
            • 11132
            • 41 Posts
            Quote from: Paprikas at Nov 24, 2010, 04:21 PM

            Я не знаю на сколько правильный метод, но я решаю такие проблемы путем добавления в index.php файл строчку
            setlocale(LC_ALL, ’ru_RU.UTF-8’);

            В данном случае не помогло. Да и локаль, вроде, в настройках локаль прописывается. Видимо, надо дождаться версии 2.1.

            Но вот чего я так и не пойму, почему фильтры не срабатывают. Посмотрел передаваемые параметры, там есть такой
            [filterPrefix] => arc_
            К тому же есть отличие - плейсхолдер arc_month_name используется на странице, а не в чанке,передаваемом сниппету. Возможно, в данном случае фильтры не применимы?

              • 24531
              • 213 Posts
              Quote from: Paprikas at Nov 25, 2010, 04:18 AM

              Раньше в сниппеты и модули втыкал. Потом довольно быстро понял что так дело не пойдет.
              Незачем плодить строчки когда можно в одном месте обозначить.

              В версии 2.1 обещают с локалями разобраться.

              я втыкаю в плагин setlocale.
              <?php
              setlocale(LC_ALL, 'ru_RU.UTF-8');
              


              События: onWebPageInit, onWebPagePrerender
                • 22668
                • 718 Posts
                Quote from: Goryn at Nov 25, 2010, 05:40 AM

                В данном случае не помогло. Да и локаль, вроде, в настройках локаль прописывается. Видимо, надо дождаться версии 2.1.
                Устанете ждать. Пока все существующие баги не пофиксят, ничего major выходить не будет.
                  • 11132
                  • 41 Posts
                  Проблему решил. Только очень много времени потратил на то, чтобы понять, почему когда я правлю код сниппета на сервере, результат вывода не меняется, а если правлю его класс, то меняется. Надо же было столько тупить, а потом посмотреть, есть ли он в списке сниппетов в админке и поправить его код там. Можно было бы доделать все и в классе, но мне надо было передать еще параметр с языком, так как нужны были архивы для английской и русской части сайта отдельно.

                  Возможно, сделано коряво (извините, MODx только осваиваю), но вот что сделал:
                  В коде сниппета в админке произвел сдедующую замену:
                  FIND
                  
                  if (!empty($month)) {
                      if (strlen($month) == 1) $month = '0'.$month;
                      $modx->setPlaceholder($filterPrefix.'month',$month);
                      $modx->setPlaceholder($filterPrefix.'month_name',$archivist->translateMonth($month));
                  
                  REPLACE WITH
                  
                  $langmon = $modx->getOption('langmon',$scriptProperties,'en');
                  $monrepen = array("/January/","/February/","/March/","/April/","/May/","/June/","/July/","/August/","/September/","/October/","/November/","/December/");
                  $monrepru = array("Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь");
                  $monout='';
                  if (!empty($month)) {
                      if (strlen($month) == 1) $month = '0'.$month;
                      $modx->setPlaceholder($filterPrefix.'month',$month);
                  	$monout=$archivist->translateMonth($month);
                  	if ($langmon=='ru') { $monout=preg_replace($monrepen,$monrepru,$monout); }
                      $modx->setPlaceholder($filterPrefix.'month_name',$monout);
                  


                  А при вызове сниппета в русской части сайта добавил параметр &langmon=`ru`
                    • 8643
                    • 271 Posts
                    Quote from: Goryn at Nov 24, 2010, 09:56 AM

                    Может, подскажите решение? Или хотя бы объясните, почему на arc_month_name применение любого фильтра (пробовал другие) выдает пустую строку?

                    Наверно надо было подстановщики вызывать некешированными tongue

                    Cached Placeholders: the Ticking Timebomb
                      • 11132
                      • 41 Posts
                      Quote from: elastic at Dec 07, 2010, 05:45 AM

                      Наверно надо было подстановщики вызывать некешированными
                      Ну и что бы от этого изменилось?! Вопрос не в том, что выдается необновляемая информация- с этим то все в порядке.