Как добавить языковой файл в расширение Joomla?
Добавление языкового файла в расширение позволяет в кратчайшие сроки и грамотным способом перевести его на нужный язык.
Перевести можно как внешнюю (front-end) так и внутреннюю часть (back-end), соответственно языковые файлы буду храниться в разных папках:
language/ и administrator/language/.
Рассмотрим как формировать и вызывать языковой файл в расширении, а также небольшой бонус касаемо плагинов.
Как Joomla загружает языковые файлы?
В общем-то не сложно догадаться, что основые дела с языковой поддержкой происходят в файле из библиотек Joomla: libraries\joomla\language\language.php
Подгружаемые языковые файлы самым простым способом можно посмотреть записав все используемые пути к ним в глобальный массив в функции JLanguage::load:
// ... $filename = ( $extension == 'joomla' ) ? $lang : $lang . '.' . $extension ; $filename = $path.DS.$filename.'.ini'; $GLOBALS[filename][] = $filename; // например, где-нибудь тут // ...
и соответственно вывести содержимое массива в шаблоне сайта так <?php echo print_r($GLOBALS[filename]); ?>.
Добавление языкового файла в плагин Joomla
Описать наличие языкового файла в xml-файле так:
<files> <filename plugin="pagenavtitles">pagenavtitles.php</filename> </files><!-- Обычно это делается после блока files --> <languages> <language tag="ru-RU">ru-RU.plg_content_pagenavtitles.ini</language> <language tag="en-GB">en-GB.plg_content_pagenavtitles.ini</language> </languages>
Наделать языковых файлов, примерно такого содержания для русского перевода:
# version 1.0.4 2010 # author wmdn.ru # copyright (C) 2005 - 2010 Open Source Matters. All rights reserved. # license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL # Note : All ini files need to be saved as UTF-8 - No BOM PREV="Предыдущая" NEXT="Следующая"
Вызвать метод JPlugin::loadLanguage( 'plg_content_pagenavtitles' ); в конструкторе плагина для инициализации языкового файла с переводом.
Перевода плагинов в Joomla (бонус)
Насколько я понял инсталлятор Joomla считает плагины внутренними расширениями поэтому при их установке перемещает языковые файлы в папку administrator/language/, поэтому метод JLanguage::load их не находит в папке language/ при отрисовке результатов работы плагина во front-end. Поэтому в данном случае для поиска загруженных файлов перевода плагинов следует заменить использование JPlugin::loadLanguage( 'plg_content_pagenavtitles' ); на:
$lang = JFactory::getLanguage(); $lang->load('plg_content_pagenavtitles', JPATH_ADMINISTRATOR);
А точнее вот так.
$lang = JFactory::getLanguage(); $lang->load('plg_content_cardcalculyator', JPATH_ADMINISTRATOR, null, false, false) || $lang->load('plg_content_cardcalculyator', JPATH_ADMINISTRATOR, null, true);
Это позволяет подгрузить английский язык в случае отсутствия файлов текущего языка