Илья Васильевич Астафьев, автор справочника «Родоплеменной состав казахов (конец XIX - начало XX вв.). Этноисторический справочник», изготовитель сувениров с казахскими тамгами на сайте «Современное искусство Казахстана», автор справочника «Что означает мое имя?» Алматы, Казахстан, E-mail: ilya@astafyev.kz Skype: ilya.astafyev.home Моб. тел.: +7(777)-210-40-66

Достаточно часто в языковых файлах я видел конструкцию "_QQ_", которая, как оказалось, является просто способом указать внутри языковой константы двойную кавычку. Хотя в моей сборке Joomla! 3.9 в языковых файлах экранированная двойная кавычка \" воспринимается тоже правильно, но закон есть закон.

Иногда бывает, что вроде бы простой вопрос, всем понятный, а почему-то решение не получается. Сегодня полдня убил на то, что бы в плагине CrossLink сделать вывод с использованием переопределяемых языковых констант. И, вроде бы, все понятно, а константы в плагине не выводятся. Причем в скрипте, который работает при установке плагина все нормально, в Менеджере плагинов тоже все хорошо, а вот при штатной работе плагина языковые константы не выводятся. Пришлось прочитать кучу документации и сторонних сайтов, что бы разобраться в этом. Попутно разобрался с выводом стандартных сообщений Joomla!

Решил эту проблему так. В плагине сделал конструктор следующего вида:

public function __construct(& $subject, $config) {
    parent::__construct($subject, $config);
    // Это необходимо для того, чтобы языковые файлы приложения могли получать константы, определенные в языковых файлах
    $this->loadLanguage();
}

А в нужном мне месте вывел требуемую языковую константу:

JText::sprintf("PLG_SYSTEM_CROSSLINKS_TIME_WORKING";,microtime(true),$linksOnPage,$allMaxNum,$maxOnPage)

У класса JText, есть 4 метода вывода текстовых констант с учетом установленного языка:

  1. _ — вывод сообщения с учетом языка;
  2. printf — прямой вывод функцией printf с форматированием вывода (см. описание);
  3. sprintf — сохранение в строке функцией sprintf;
  4. script — получение строки на текущем язык и сохранение ее в хранилище языков JavaScript.

При использовании трех последних методов можно применять спецификаторы форматов, описанные здесь.

Если требуется подключить языковой файл из какого-либо другого компонента, плагина или модуля, то делается это так:

// метод для  загрузки языковых файлов:
load($extension='joomla', $basePath=JPATH_BASE, $lang=null, $reload=false, $default=true);
// где:  
// $extenshion — расширение, для которого должен быть загружен языковой файл, например 'com_akeeba', 'plg_system_crosslinks' или 'mod_slogin'
// $basePath — базовый путь для использования (если  правильно разобрался), то для объектов фронта: JPATH_BASE, а для объектов административной панели JPATH_ADMINISTRATOR
// $lang — язык для загрузки типа "ru-RU" или "en-GB", по умолчанию текущий язык
// $reload — флаг, который заставит перезагружать язык, если он установлен в true
// $default — флаг, который заставляет загружать язык по умолчанию, если текущий не существует
// Подключаем класс работы с языками
$lang = JFactory::getLanguage();
// Получаем языковые константы компонента Akeeba на русском языке
$lang->load($extension= 'com_akeeba', JPATH_ADMINISTRATOR, 'ru-RU');
//Получаем языковые константы плагина CrossLinks на английском британском языке
$lang->load($extension= 'plg_system_crosslinks', JPATH_BASE, 'en_GB');

А вообще-то у класса LJanguage есть масса методов как посмотреть те или иные свойства языка. Поэтому, читая документацию и используя плагин J!Dump можно быстро и с комфортом разобраться, что же методы возвращают. А еще можно посмотреть как этот метод определен, для чего смотрим файлы в папке вашего сайта /libraries/src/Language, где находится описание класса.

Вывод сообщений в стандарте Joomla делается с использованием метода класса JAplication, полное описание которого есть в документации. Кроме того, для этого можно использовать методы класса JError, описанные здесь.

// Получаем объект приложения 
$application = JFactory::getApplication();
// Определяем тип ошибки: "message" (зеленое сообщение), "notice" (голубое), "warning" (желтое), "error" (красное)
$type = "error";
// Добавляем сообщение в очередь сообщений 
$application->enqueueMessage(JText::_("SOME_ERROR_OCCURRED"), $type);
// В качестве альтернативы можно использовать все слитно
JFactory::getApplication()->enqueueMessage(JText::_( "SOME_ERROR_OCCURRED" ), $type );
// Вывод сообщений возможен и альтернативным образом через класс JError
JError::raise( 100, "Message" );
JError::raiseNotice( 100, "Notice" );
JError::raiseWarning( 100, "Warning" );
JError::raiseError( 4711, "Error" );

Ввод осуществляется в том месте, где в шаблоне указано специальное предложение <jdoc:include type="message" />.

Теги:  
1 1 1 1 1 1 1 1 1 1 Рейтинг 5.00 [1 Голос]

Добавить комментарий


Защитный код
Обновить