Skip to main content
1 of 2
inf3rno
  • 391
  • 1
  • 18

I found the relevant part of code in an example joomla project.

public function loadLanguage($path = null)
{
    $source = $this->parent->getPath('source');
    if (!$source)
    {
        $this->parent->setPath('source', JPATH_PLATFORM . '/' . $this->parent->extension->element);
    }
    $this->manifest = $this->parent->getManifest();
    $extension = 'lib_' . strtolower(JFilterInput::getInstance()->clean((string) $this->manifest->name, 'cmd'));
    $name = strtolower((string) $this->manifest->libraryname);
    $lang = JFactory::getLanguage();
    $source = $path ? $path : JPATH_PLATFORM . "/$name";
    $lang->load($extension . '.sys', $source, null, false, false)
        || $lang->load($extension . '.sys', JPATH_SITE, null, false, false)
        || $lang->load($extension . '.sys', $source, $lang->getDefault(), false, false)
        || $lang->load($extension . '.sys', JPATH_SITE, $lang->getDefault(), false, false);
}

But it is present in the current joomla version as well.

public function loadLanguage($path = null)
{
    $source = $this->parent->getPath('source');
    if (!$source)
    {
        $this->parent->setPath('source', JPATH_PLATFORM . '/' . $this->getElement());
    }
    $extension = 'lib_' . $this->getElement();
    $librarypath = (string) $this->getManifest()->libraryname;
    $source = $path ?: JPATH_PLATFORM . '/' . $librarypath;
    $this->doLoadLanguage($extension, $source, JPATH_SITE);
}

I think the first code is easier to understand.

$extension = 'lib_' . strtolower(JFilterInput::getInstance()->clean((string) $this->manifest->name, 'cmd'));
$name = strtolower((string) $this->manifest->libraryname);
$lang = JFactory::getLanguage();
$source = $path ? $path : JPATH_PLATFORM . "/$name";

So the extension name will come from the manifest.name and not from the manifest.libraryname. I changed my code from

<name>COM_EXAMPLE_TITLE</name>
<libraryname>example</libraryname>

to

<name>example</name>
<libraryname>COM_EXAMPLE_TITLE</libraryname>

and now it works properly. Interesting that every example I read about manifest.libraryname is completely wrong about this. The current version appears to have the same trait, so if this is a bug I think it is not fixed yet.

inf3rno
  • 391
  • 1
  • 18