Локализация 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 — исходный файл с ключами локализации и их переводами
            • ru_RU
              • LC_MESSAGES
                • shop_themes_default.mo
                • shop_themes_default.po

Как вызывать строки локализации в файлах 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:

  1. Соберите все ключи локализации с помощью консольной команды.
  2. Перенесите переводы из манифеста theme.xml в файлы локализации с расширением .po. Файл для локали en_US можно оставить без изменений, потому что строки этой локали используются по умолчанию в качестве ключей локализации для всех остальных локалей.
  3. Удалите строки с локализацией из манифеста темы.
  4. С помощью приложения Poedit скомпилируйте из файлов локализации с расширением .po файлы с расширением .mo.
7 ноября 2019


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