Локализация gettext для тем дизайна
В версии 1.13 фреймворка Webasyst мы добавили возможность локализации тем дизайна с помощью механизма gettext. Этот способ локализации работает так же, как и для приложений, плагинов и виджетов.
Ознакомительная обновлённая версия фреймворка для разработчиков выгружена на GitHub в ветку dev.
Для чего это нужно
Локализация с использованием gexttext удобна тем, что с её помощью проще использовать слова во множественном числе. До внедрения поддержки gettext каждому разработчику приходилось писать в HTML-шаблонах своей темы дизайна дополнительный многословный код Smarty, который формировал множественное число.
Как использовать gettext в теме дизайна
Для этого добавьте в состав темы дизайна директорию с файлами локализации — так же, как для приложения, плагина или виджета.
Пример структуры директории с файлами локализации
- wa-apps
- shop
- themes
- default
- locale
- en_US
- LC_MESSAGES
- shop_themes_default.mo — скомпилированный файл локализации
- shop_themes_default.po — исходный файл с ключами локализации и их переводами
- LC_MESSAGES
- ru_RU
- LC_MESSAGES
- shop_themes_default.mo
- shop_themes_default.po
- LC_MESSAGES
- en_US
- locale
- default
- themes
- shop
Как вызывать строки локализации в файлах HTML-шаблонов
Единственное число
[`My text`] — этот формат работает одинаково и для локализации через gettext, и для локализации из манифеста theme.xml.
Множественное число
{_wp('%d product', '%d products', $products|count)} — этот формат перевода строк локализации с использованием множественного числа начнёт работать после перевода темы дизайна на использование gettext и обновления фреймворка Webasyst до версии не ниже 1.13.
Автоматическая сборка ключей локализации для gettext
Для того чтобы быстро сформировать файлы локализации темы дизайна с ключами для перевода строк, выполните в консоли сервера команду wa.php locale с помощью строки вида
php wa.php locale app_id/themes/theme_id
Пример для темы default приложения shop:
php wa.php locale shop/themes/default
Эта команда добавит в файлы с расширением .po все ключи локализации темы дизайна, которых в этих файлах ещё нет. Если таких файлов в составе темы дизайна ещё нет, то команда создаст их автоматически.
Как перейти на локализацию темы дизайна через gettext
Это удобно сделать с помощью команды wa.php locale:
- Соберите все ключи локализации с помощью консольной команды.
- Перенесите переводы из манифеста theme.xml в файлы локализации с расширением .po. Файл для локали en_US можно оставить без изменений, потому что строки этой локали используются по умолчанию в качестве ключей локализации для всех остальных локалей.
- Удалите строки с локализацией из манифеста темы.
- С помощью приложения Poedit скомпилируйте из файлов локализации с расширением .po файлы с расширением .mo.
Добавление новых комментариев к этой теме отключено.










Вот тут не опечатка?
{_wp('%d product', '%d products', $products|count)}
Да, верно, исправили. Спасибо!
Правильно ли я понимаю что, чтобы полноценно перевести магазин на другой язык, кроме локализации темы дизайна, нужно еще локализовать приложение shop и сам фреймворк? Если с первыми двумя более-менее понятно, то как правильно добавить новый язык в Вебасист, чтоб не затерлось при обновлении?
Попробуйте использовать приложение «My Lang: Лайт».
Так и не смог завести перевод множественных строк.
wa.php locale не создает запись в po файле для строки {_wp('%d product', '%d products', $products|count)}
wa.php locale создаст запись в po файле для строки {_wp('%d test', '%d tests', $products|count)} вида:
Работать это не будет. Во всяком случае у меня не работает. В документации по локализации указано без %d, но так тоже не работает.
И наконец для строки {_wp('test', 'tests', $products|count)} будет работать перевод, но без множественного числа.
Прошу помочь разобраться в этой истории, т.к. я что-то делаю не так, либо это вобще не работает в темах =)
@Алексей Александрович
попробуйте через
https://cloud.mail.ru/public/4...
если не поможет, то просто посмотрите wa-system/webasyst/lib/cli/webasystLocale.cli.php
Михаил, мне удалось вывести множественный перевод только таким образом:
{_wp('product', 'product', 3)}Похоже это была не опечатка. И %d подстановка не работает.
Похоже на ошибку. Передал разработчикам — посмотрим, в чём там дело. Спасибо за то, что сообщили!
множественная форма в темах
{wa_t message="%d car" message2="%d cars" n=$cnt}Так действительно работает. Спасибо за подсказку.
да и первый вариант тоже..
Тут еще интересный момент нашелся. При клонировании темы дизайна через админку, файлы po/mo не переименовываются. Соотв. локализация перестает работать. Переименовал вручную файлы, заработало.
Передал информацию разработчикам. Спасибо!
Хотелось бы узнать про подвижки в исправлении ошибки локализации? Приходится объяснять пользователям как это делать. А если они в облаке, то с переименованием возникают проблемы.
Работа ведётся. Если не помешают какие-то чрезвычайные обстоятельства, где-то в начале года, скорее всего, обновим фреймворк с этими исправлениями.
В последней опубликованной версии фреймворка этот механизм должен теперь работать правильно — проверьте, пожалуйста.
Добрый день. Так и не поправили ошибку с копированием файлов локализаций при клонировании темы дизайна...
В ближайшем обновлении эта ошибка будет устранена.
Как правильно отредактировать файл?
Я скал приложение Poedit открыл и откорректировал файл, сохранил его и в po и в mo, загружаю обратно на сервер, и ничего не меняется.
Хочу откорректировать текущий перевод.
Очистите кеш в настройках Webasyst — возможно, поэтому у вас визуально ничего не изменилось.
В некоторых случаях может также потребоваться перезапуск веб-сервера — попробуйте сделать так, если очистка кеша не поможет.