Перевод переменных Есть решение

Для перевода названий категорий использую *.po файл. Переменные вывода имен категорий беру в {_wp(....)}
Все хорошо переводится, пока в названии не встречается знак &
Если этот знак используется в статической тексте [`.......`] - переводится без проблем.
Как решить проблему?

19 ответов

  • 1
    Eugen Nichikov 25 января 2016 13:51 #

    Не проверял, но была следующая идея.

    По-идее английская локализация тоже "переводится".

    А значит проблемные строки можно заменить другими без проблемных символов или условными сокращениями. А в po-файле английской локализации в переводе указать нужный вариант.

    • +1
      Павел Гордовой Павел Гордовой 25 января 2016 13:58 #

      Нет. Необходимо, чтобы в файле локализации текст совпадал 1 в 1 (в том числе и заглавные буквы, пробелы и т.д.)
      я не могу использовать в названиях категорий ни чего кроме &, и в файле локализации мне необходимо вставлять эту строчку с &

      т.к. статический текст переводится без проблем - делаем вывод, что проблема в функции _w
      судя по всему - она не экранирует содержимое строки от спец. символов и получает какое-то обрезанное значение, поэтому не находит его в файле перевода.

      Нашел функцию _w и пытался решить проблему самостоятельно, как-то экранировать содержимое, но не удалось.
      Думаю, что данную проблему можно возвести в ранг бага, поэтому: "Уважаемая поддержка Webasyst, подкиньте решение плиззз"

      • +1
        Eugen Nichikov Eugen Nichikov 25 января 2016 15:18 #

        Не исключаю ошибки, но я, видимо, непонятно объяснил.

        Русская локализация:

        msgid "PG_MSG"
        msgstr "Проктер энд Гэмбл"

        Английская:

        msgid "PG_MSG"
        msgstr "Procter&Gamble"

        Компилим оба файла. Английская ведь тоже переводится, как я понимаю. Но из-за того, что переводы пустые, отображается оригинал.

        • +1
          Павел Гордовой Павел Гордовой 25 января 2016 15:45 #

          он не прогоняет перевод по двум файлам локализации
          Если у меня категория называется Procter&Gamble - то и в msgid я должен иметь это же название.
          он вообще не обращается к файлу английской локализации, если мы находимся в другой локали.
          В Вашем случае - необходимо иметь название категории PG_MSG
          это можно сделать, если в фирме работает 3 человека, а если 60 человек? А если текучка? Ну и другого гемороя надо набрать
          Мне не нужны костыли - их и так хватает. Необходимо решение

  • 1
    Syrnik.com 25 января 2016 20:22 #

    Погоди, оно вот на этом тоже падает? o_O

    {_wp('Procter&Gamble')}
    • +1
      Павел Гордовой Павел Гордовой 26 января 2016 02:06 #

      Ухты! А так - переводит.

      Так в чем же тогда причина?

      • +1
        Syrnik.com Syrnik.com 26 января 2016 05:34 #

        Э. Ну это. От разработчика даже странно :) Про строки и кавычки в PHP.

        • +1
          Павел Гордовой Павел Гордовой 26 января 2016 05:56 #

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

          • +1
            Syrnik.com Syrnik.com 26 января 2016 06:43 #

            Ну когда текст в одинарных кавычках все же переводит, ты сам написал. не? :)

            • +1
              Павел Гордовой Павел Гордовой 26 января 2016 06:48 #

              Ну возьми переменную в одинарные кавычки - и что получишь? - правильно, получишь статический текст, а не значение переменной

              я ж не могу именовать категории с кавычками

  • 1
    Павел Гордовой 26 января 2016 04:07 #

    Проблема так и не решена

    очень жду ответа от поддержки

  • 1
    Rat 26 января 2016 06:45 # Решение

    Так?

    msgid "Procter&Gamble"
    msgstr "Проктер и Гэмбл"
    public function execute()
    {
        $this->view->assign('var', 'Procter&Gamble');
    }
    {_wp($var)}

    У меня переводит нормально:

    Проктер и Гэмбл

    Хотя сначала не хотело. Может, кеш?

    Или не такая ситуация?

    • +1
      Павел Гордовой Павел Гордовой 26 января 2016 06:50 #

      для чистоты эксперимента:
      назовите категорию "Tablets & Accessories" и попробуйте вывести ее перевод {_w($category.name)}
      не переводит - и все тут...

      не знаю... может у Вас перевело т.к. & не отделен пробелами...



      • +1
        Rat Rat 26 января 2016 06:52 #

        Почему _w()? Может, _wp()? Нужно ведь из локализации плагина брать перевод, а не приложения?

        • +1
          Павел Гордовой Павел Гордовой 26 января 2016 06:54 #

          у меня перевод сидит в локализации приложения.
          Я перевожу названия категорий магазинов.
          все прекрасно работает и подтягивается, пока не встречается &

          • +1
            Rat Rat 26 января 2016 06:57 #

            А эта локализация потом затрётся при установке обновления?.. Странно. Вообще в самом начале речь была о {_wp(...)}. Начинаю терять нить )

            • +1
              Павел Гордовой Павел Гордовой 26 января 2016 07:03 #

              вначале - ошибся.
              самое интересное, что перевод работает как через _w так и через _wp
              затрется - опять накатим

              Чтобы не терять нить:
              необходимо перевести названия категорий товаров.Для этого добавляю строки перевода в
              \wa-apps\shop\locale\ar_AE\LC_MESSAGES\shop.po
              в дереве категорий, названия категорий беру в {_w($tree.name)}

              все прекрасно работает до тех пор, пока в строке не встречается значок &

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите