OpenCart 2: Упрощаем использование локализации в коде
- Категория: Код
- – Автор: Игорь (Администратор)
Система поддержки локализации в OpenCart 2 имеет ряд своих проблем. Так, например, отсутствует возможность наложения переведенных частей на локализацию по умолчанию, что есть в стандартном механизме Joomla и делает последнюю более гибкой в этом смысле. Проблема в OpenCart легко воспроизводится, достаточно добавить язык и вы увидите вместо перевода коды языковых констант. Но, если эта проблема лечится достаточно просто - копированием файлов, то еще есть одна более насущная проблема - это бесконечные портянки кода языковых переменных. И в данной статье я покажу вам как можно если не решить, то как минимум упростить и уменьшить код.
Суть проблемы. Если следовать изначально предлагаемому принципу, то вам необходимо разместить каждую языковую константу как в файле локализации, так и в массиве $data у контроллера для последующей передачи и генерации переменных в шаблоне. Выглядит это примерно так.
Файл локализации:
А вот такой код будет в файле контроллера
И только после этого, вы сможете использовать в шаблоне соответствующие переменные ($text_1, $text_2 ...). Если использовать всего несколько языковых констант, то написать пару строчек не сложно. Но, если у вас интерфейс не вида "Нажать кнопку", то потенциально таких переменных становится десятки или даже сотни. Отчасти, такая система подталкивает создателей модулей и прочего полезного писать тексты прямо в шаблоне, чтобы не бегать по трем файлам из-за каждой фразы (при наличии других языков и того больше). Это все в общем-то приводит к последующим проблемам с переводами и поддержкой.
Однако, механизм локализации сделан таким образом, что есть достаточно простой способ обойти эту проблему и упростить себе задачу. Дело заключается в том, что при вызове функции get для получения языковой константы не проверяется ее принадлежность к текстовым или числовым переменным. Грубо говоря, вы можете прописать в массив $_ даже stdObject. По сути, вся проверка сводится к "в соответствующем поле хоть что-нибудь есть". Правильно это или нет - отдельный вопрос. Но, одно можно сказать точно - такой возможностью грех не воспользоваться.
И теперь, я покажу как можно использовать эту особенность для упрощения поддержки языков и вывода при помощи использования массива (array).
В файле локализации составим конструкцию такого вида:
Теперь, занесем одну единственную строчку в контроллер
И добавим в шаблон функцию:
Теперь при добавлении константы, достаточно будет просто написать следующее:
Как видите, код в шаблоне для указания переменной не сильно увеличился, а пользы от него в разы больше.
Основные плюсы такого подхода:
- Отсутствие портянок кода
- Возможность вначале составить шаблон, а уже потом подгонять под него файл локализации, как в принципе и должно быть
- В контроллере нужна всего 1 строчка кода
- Легкость модификации языковых констант (добавление, редактирование, удаление)
- Простота механизма и его применения
Теперь, вы узнали как упростить использование локализации в OpenCart 2, а так же некоторые особенности стандартного механизма.
☕ Понравился обзор? Поделитесь с друзьями!
Комментарии / отзывы