PrestaShop 1.6 - локализация собственных модулей (для новичков)
- Категория: Код
- – Автор: Игорь (Администратор)
Прежде, чем рассматривать локализацию собственных модулей в PrastaShop 1.6, рассмотрим как обычно устроена локализация в других CMS. Чаще всего, каждый язык представлен в виде отдельных файлов, которые автор модуля заполняет самостоятельно. Обычно, файлы представлены в виде ini-файлов или нечто подобного, где кодовым переменным присваивается значение (такой подход характерен для Joomla). Так же могут быть xml-файлы. Или же файлы могут представлять собой php-шные конструкции, например, как у локализация в OpenCart. В особо извращенных вариациях локализация может храниться в БД (неудобно и тормозит CMS).
Как бы файлы не выглядели, их перевод автором модуля представляет собой ручное заполнение и создание файлов. И это обычная схема. Плюсами ее является - простота и легкость. Основным минусом - многие обычные пользователи, далекие от языков программирования, попросту не могут корректно справится с правкой перевода (где-то кавычки не закроют, где-то разделитель не поставят и так далее), что приводит либо к ошибкам вывода (например, квадратики или коды вместо фраз), либо к временной поломке модуля.
Поддержка локализации модулей в PrestaShop 1.6
У PrestaShop 1.6 в этом смысле достаточно интересный подход к автоматизации поддержки локализации под несколько языков, при этом обычные пользователи могут с легкостью создавать локализации под свои языки. Здесь все так же используются файлы локализации, однако составлять их вручную не рекомендуется и это отчасти бессмысленно. Во-первых, это весьма непростое и рутинное занятие (используются имена файлов и хеш-сумма по MD5 каждой фразы), поэтому можно допустить ошибки. Во-вторых, встроенный стандартный инструмент PrestaShop позволяет выполнять эту задачу гораздо легче и проще (включая обычных пользователей, которым совершенно не обязательно что-либо знать о вашем модуле).
Пример перевода из модуля поддержки Cron (Стандартный пакет PrestaShop 1.6):
В чем же состоит суть механизма локализации PrestaShop и как устроен весь процесс? Чтобы обеспечить возможно перевода достаточно использовать только встроенные функции для вывода фраз:
В php это:
В шаблоне Smarty это:
Важно сразу отметить несколько моментов (прописаны в документации PrestaShop):
1. Все фразы должны быть на латинице, иначе могут быть ошибки при локализации. Кстати, именно эти же фразы являются значением по умолчанию (в случае отсутствия файлов перевода), что позволяет избавиться от ошибок php вида "Warning" / "Notice:" и от вывода кодов. Другими словами, сколько бы языков у вас ни было, модуль откроется везде.
2. Абсолютно все тексты и параметры (mod для Smarty - параметр, где указывается имя вашего модуля) должны быть заключены в одиночные кавычки. В противном случае инструмент локализации не найдет фразы. Кроме того, тут есть один интересный момент. В Smarty, если использовать двойные кавычки для параметра mod, то фразы попадают в общий список фраз перевода, а не во фразы модуля. Если же использовать одинарные кавычки, то модуль определяется корректно и, соответственно, сами фразы. При этом ошибка с двойными кавычками для самого текста (параметр s) обнаруживается только их валидатором (при этом сам перевод осуществляется корректно).
Стоит отметить, что если первый пункт отчасти понятен - отсутствие проблем с кодировкой, то второй скорее введен для упрощения всех моментов, связанных с чередованием одинарных и двойных кавычек. Тем не менее, второй пункт все же спорен, так как если вы пишите модули и под другие системы, то это очень не удобно, особенно учитывая, что сам движок Smarty нормально реагирует на одинарные и двойные кавычки.
Но, возвращаясь. Если вы во всех своих php файлах и шаблонах Smarty придерживались данных конструкций, то весь дальнейший перевод не потребует от вас внесения каких-либо правок в файлы, они будут генерироваться инструментом PrestaShop 1.6.
Стоит знать, что все файлы переводов помещаются в каталог "translations" вашего модуля (или же в шаблоны, если у вас несколько шаблонов и под каждый планируется свой перевод), а имя каждого файла формируется как "%код языка%.php" (например, ru.php для русского языка и так далее). Кстати, все фразы переводов внутри файлов обертываются в одиночные кавычки.
Перевод (локализация) собственных модулей в PrestaShop 1.6
Теперь, рассмотрим как осуществляется перевод (локализация) собственных модулей в PrestaShop 1.6 поэтапно:
0. Вначале убедитесь в том, что параметр "max_input_vars" в php.ini установлен хотя бы на 3000 элементов (а лучше сразу на 10000, чтобы более не задаваться этим вопросом). В противном случае при открытии перевода, страница будет вываливаться с ошибками. К сожалению, все фразы для переводов отображаются сразу на одной странице (в стандартном пакете для шаблонов их получается порядка 1900 +/-; обычное же ограничение php на количество параметров составляет 1000). Как таковой, нет возможности посмотреть перевод только отдельного модуля.
1. Откройте админку. Затем в левом меню раскройте пункт "Локализация" и выберите пункт "Переводы".
2. В появившемся окне выберите поле "Тип перевода" как "Переводы установленных модулей", поле "Выберите шаблон" как "Ядро (вне зависимости от шаблона)" (тогда файлы перевода будут создаваться прямо в каталоге с вашим модулем), а затем в поле "Выберите язык" укажите нужный язык. Ну и в конце нажмите кнопку "Изменить".
Примечание: Отображаются только те языки, чьи переводы установлены в самой PrestaShop 1.6, так что если вы хотите поддерживать какие-то дополнительные языки, то их необходимо вначале установить в магазине.
3. Откроется окно, где будут перечислены все установленные модули и все переводы внутри файлов каждого модуля. Вам лишь остается заполнять поля нужного вам модуля и воспользоваться кнопками "Сохранить и остаться"/"Сохранить". Учтите, что ваш модуль (вне зависимости от имени) будет находится в самом низу. Ну или используйте стандартный поиск на странице.
Примечание: Обращаю ваше внимание, что одинарные кавычки необходимо экранировать косой чертой. Например так - Вася гулял в месте под названием \'Опушка\' и был этому рад.
Примечание: Важно знать, что каждый раз файл локализации будет создаваться заново, так что если вы вносили что-то руками в файлы после того, как открыли страницу с переводами, то помните, что эти правки так же необходимо переносить.
4. После того, как все фразы будут переведены, проверьте, что полностью локализировали ваш модуль и в обязательном порядке сохраните файлы с полученными переводами, так как при деинсталляции весь каталог модуля удаляется (выключен режим дебага).
Как видите, механизм поддержки локализации модулей, шаблонов и прочего в PrestaShop 1.6 организован достаточно интересным методом и позволяет даже обычным пользователям с легкостью исправлять "огрехи" переводов или же с нуля составлять собственные. Однако, есть и ряд не очень удобных ограничений, о которых вы теперь так же знаете.
☕ Понравился обзор? Поделитесь с друзьями!