Модуль расширения языковой поддержки и его использование

Для тех, кто еще не знает – модули Admin (Админпанель) и Language (Расширенная языковая поддержка) это дополнительные модули к движку LiveStreet для упрощения и облегчения администрирования сайтов, построенных на этом движке. Скачать их можно в разделе Модули по адресу livestreet.ru/addons/34/ (одним пакетом).

Функционал модулей описан в соответствующих топиках (например, livestreet.ru/blog/addons/2105.html) и разобраться, как с ними работать, довольно просто.

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

Начну с модуля Language. Возможно, не все поняли, зачем он вообще нужен. Поэтому для начала небольшие комментарии.

Известно, что локализация сайта выполняется через ассоциативный массив. И есть основной файл локализации (для каждого языка), и для каждого модуля тоже может быть свой файл локализации (если модуль какие-то сообщения выводить должен). Обращение к языковым фразам может происходить как в самом модуле, так и в шаблонах Smarty.

При добавлении модулей сторонних разработчиков и/или при собственных разработках могут возникать следующие проблемы при выводе сообщений.

Скажем, добавлен модуль, у которого нет переведенного файла локализации (например, добавлен модуль с русской локализацией, а язык сайта установлен английский), а в этом модуле есть фраза с ключом this_is_message. Тогда при выводе сообщений из модуля (через $this->Lang_Get('this_is_message')) мы будем получать на странице NOT_FOUND_LANG_TEXT). А при выводе сообщения прямо в шаблоне (дерективой {$aLang.this_is_message}) вообще ничего не увидим – деректива вернет пустую строку.
Та же проблема возникнет, если языковой файл переведен не полностью (например, поставили новую версию модуля) или при разработке ошиблись с ключом фразы в коде модуля или шаблона (вместо 'this_is_message' написали 'this_is_mesage').

Решить эти проблемы может модуль Language. Он написан, как расширение системного модуля Lang (ООП в действии!) и имеет ряд преимуществ.

Для него определяется константа LANG_DEFAULT, которая задает язык по умолчанию (поскольку разработка изначально русскоязычная, то и язык по умолчанию задается russian, но он может быть изменен в config.php модуля). И при загрузке языка сначала загружаются языковые модули языка по умолчанию, а только потом текущего языка, которые задается константой LANG_CURRENT. Разумеется, значения текущего языка перекрывают значения языка по умолчанию. Но если какие-то фразы, встречающиеся в языке по умолчанию, не определяются в текущем языке, то они остаются без изменения.

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

Дополнительно можно сделать так, что если идет обращение к фразе, которая вообще не определена, то вместо NOT_FOUND_LANG_TEXT или вообще пустой строки будет выводиться ключ фразы, которая не найдена в языковых файлах. Для этого надо сделать следующее:

1. В разрабатываемых экшн заменить обращение
$this->Lang_Get('this_is_message')

На
$this->Language_Get('this_is_message')

2. В методе Init добавить следующую строку:
$this->Viewer_Assign('oLang', $this->Language_GetLang());

А в шаблонах Smarty (файлы .tpl), где нужно обращаться к языковым переменным, вместо директивы
{$aLang.this_is_message}

Использовать
{$oLang->Get('this_is_message')}

Или сокращенный вариант
{$oLang->this_is_message}

В этом случае получим:

1. Если искомой фразы нет в текущем языке, то будет выводиться фраза на языке по умолчанию
2. Если такой фразы нет и в языке по умолчанию, то будет выводиться ее ключ, в нашем примере – THIS_IS_MESSAGE

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.