Joomla Language changes: Joomla 3 → 4, 5 and 6

9 issues in this guide

Language APIs and packaging both move. This guide groups 9 entries: JFactory::getLanguage(), JLanguage, JLanguageAssociations, JLanguageHelper, JLanguageMultilang, JMultilang, JText, en-GB.com_lms.ini, _QQ_. The replacement pattern for code is Joomla\CMS\Language\Language and Text, with $app->getLanguage() instead of the factory getter, and Text::script() when you expose strings to JavaScript (paired with Joomla.Text._ in the Deprecated JavaScript guide). For packages, escape quotes the modern INI way and ship langmetadata.xml — stop relying on en-GB.com_*.ini prefixed filenames and _QQ_ tokens. Multilingual association helpers follow the same namespaced Language\* classes. Hop mix: 1 at Joomla 3 → 4; 1 at Joomla 4 → 5; 7 at Joomla 5 → 6. Most class aliases survive until native Joomla 6; INI and metadata mistakes fail earlier when the extension installs or when strings simply do not load. Use the entries below to patch both the PHP calls and the language file layout from the catalog. Catalog replacements in this guide include JFactory::getLanguage() → $app->getLanguage(); JLanguage → Joomla\CMS\Language\Language; JLanguageAssociations → Joomla\CMS\Language\Associations; JLanguageHelper → Joomla\CMS\Language\LanguageHelper. Open each h2 anchor for the full before/after, fix list, and error strings shipped in the reference data.

JFACTORY-GETLANGUAGE-001

JFactory::getLanguage()

Factory::getLanguage()

Language is an application service. Factory::getLanguage() is deprecated.

JFactory::getLanguage() → $app->getLanguage()

Dies at Joomla 5 → 6
Dies at Joomla 5 → 6J3: Works nativelyJ4: Deprecated — do not shipJ6: Deprecated — do not shipBC plugin: not applicablePatch possible — review itJoomla API

What you will see

  • Factory::getLanguage is deprecated

Symptoms people search

language load deprecation

Replace this code

Swap JFactory::getLanguage() for $app->getLanguage().

Joomla 3

Remove or stop calling this

$lang = JFactory::getLanguage();
$lang->load('com_lms');

Joomla 4 / 6

Use this instead

$lang = Factory::getApplication()->getLanguage();

How to fix it

  1. 1Use $app->getLanguage().

Also known as

getLanguage

JLANGUAGE-CLASS-001

JLanguage

JLanguage class name

JLanguage is a Joomla 3 global class. Joomla 4 still has an alias. Joomla 5 needs the Behaviour – Backward Compatibility plugin. Native Joomla 6 does not load that alias — you get Class "JLanguage" not found.

JLanguage → Joomla\CMS\Language\Language

Dies at Joomla 5 → 6
Dies at Joomla 5 → 6J3: Works nativelyJ4: Alias (old name still resolves)J6: Removed — fatalBC plugin: covers the class nameMechanical renameJoomla API

What you will see

  • Class "JLanguage" not found
  • Class 'JLanguage' not found
  • Failed to open stream: JLanguage

Symptoms people search

white screen after disabling compatibility plugin · class not found on Joomla 6 · works on Joomla 5 until I turn off backward compatibility

Replace this code

Swap JLanguage for Joomla\CMS\Language\Language.

Joomla 3

Remove or stop calling this

JLanguage::getInstance();
// or new JLanguage()

Joomla 4 / 6

Use this instead

use Joomla\CMS\Language\Language;

// Call the namespaced class. Do not keep the J prefix.

How to fix it

  1. 1Add a use statement for Joomla\CMS\Language\Language.
  2. 2Replace every JLanguage with the short class name from that use line.
  3. 3Disable Behaviour – Backward Compatibility on a Joomla 5 staging site. If it fatals, this class is still in the code.

Also known as

JLanguage · Joomla\CMS\Language\Language · class alias · J prefix

JLANGUAGEASSOC-CLASS-001

JLanguageAssociations

JLanguageAssociations class name

JLanguageAssociations is a Joomla 3 global class. Joomla 4 still has an alias. Joomla 5 needs the Behaviour – Backward Compatibility plugin. Native Joomla 6 does not load that alias — you get Class "JLanguageAssociations" not found.

JLanguageAssociations → Joomla\CMS\Language\Associations

Dies at Joomla 5 → 6
Dies at Joomla 5 → 6J3: Works nativelyJ4: Alias (old name still resolves)J6: Removed — fatalBC plugin: covers the class nameMechanical renameJoomla API

What you will see

  • Class "JLanguageAssociations" not found
  • Class 'JLanguageAssociations' not found
  • Failed to open stream: JLanguageAssociations

Symptoms people search

white screen after disabling compatibility plugin · class not found on Joomla 6 · works on Joomla 5 until I turn off backward compatibility

Replace this code

Swap JLanguageAssociations for Joomla\CMS\Language\Associations.

Joomla 3

Remove or stop calling this

JLanguageAssociations::getInstance();
// or new JLanguageAssociations()

Joomla 4 / 6

Use this instead

use Joomla\CMS\Language\Associations;

// Call the namespaced class. Do not keep the J prefix.

How to fix it

  1. 1Add a use statement for Joomla\CMS\Language\Associations.
  2. 2Replace every JLanguageAssociations with the short class name from that use line.
  3. 3Disable Behaviour – Backward Compatibility on a Joomla 5 staging site. If it fatals, this class is still in the code.

Also known as

JLanguageAssociations · Joomla\CMS\Language\Associations · class alias · J prefix

JLANGUAGEHELPER-CLASS-001

JLanguageHelper

JLanguageHelper class name

JLanguageHelper is a Joomla 3 global class. Joomla 4 still has an alias. Joomla 5 needs the Behaviour – Backward Compatibility plugin. Native Joomla 6 does not load that alias — you get Class "JLanguageHelper" not found.

JLanguageHelper → Joomla\CMS\Language\LanguageHelper

Dies at Joomla 5 → 6
Dies at Joomla 5 → 6J3: Works nativelyJ4: Alias (old name still resolves)J6: Removed — fatalBC plugin: covers the class nameMechanical renameJoomla API

What you will see

  • Class "JLanguageHelper" not found
  • Class 'JLanguageHelper' not found
  • Failed to open stream: JLanguageHelper

Symptoms people search

white screen after disabling compatibility plugin · class not found on Joomla 6 · works on Joomla 5 until I turn off backward compatibility

Replace this code

Swap JLanguageHelper for Joomla\CMS\Language\LanguageHelper.

Joomla 3

Remove or stop calling this

JLanguageHelper::getInstance();
// or new JLanguageHelper()

Joomla 4 / 6

Use this instead

use Joomla\CMS\Language\LanguageHelper;

// Call the namespaced class. Do not keep the J prefix.

How to fix it

  1. 1Add a use statement for Joomla\CMS\Language\LanguageHelper.
  2. 2Replace every JLanguageHelper with the short class name from that use line.
  3. 3Disable Behaviour – Backward Compatibility on a Joomla 5 staging site. If it fatals, this class is still in the code.

Also known as

JLanguageHelper · Joomla\CMS\Language\LanguageHelper · class alias · J prefix

JLANGUAGEMULTILANG-CLASS-001

JLanguageMultilang

JLanguageMultilang class name

JLanguageMultilang is a Joomla 3 global class. Joomla 4 still has an alias. Joomla 5 needs the Behaviour – Backward Compatibility plugin. Native Joomla 6 does not load that alias — you get Class "JLanguageMultilang" not found.

JLanguageMultilang → Joomla\CMS\Language\Multilanguage

Dies at Joomla 5 → 6
Dies at Joomla 5 → 6J3: Works nativelyJ4: Alias (old name still resolves)J6: Removed — fatalBC plugin: covers the class nameMechanical renameJoomla API

What you will see

  • Class "JLanguageMultilang" not found
  • Class 'JLanguageMultilang' not found
  • Failed to open stream: JLanguageMultilang

Symptoms people search

white screen after disabling compatibility plugin · class not found on Joomla 6 · works on Joomla 5 until I turn off backward compatibility

Replace this code

Swap JLanguageMultilang for Joomla\CMS\Language\Multilanguage.

Joomla 3

Remove or stop calling this

JLanguageMultilang::getInstance();
// or new JLanguageMultilang()

Joomla 4 / 6

Use this instead

use Joomla\CMS\Language\Multilanguage;

// Call the namespaced class. Do not keep the J prefix.

How to fix it

  1. 1Add a use statement for Joomla\CMS\Language\Multilanguage.
  2. 2Replace every JLanguageMultilang with the short class name from that use line.
  3. 3Disable Behaviour – Backward Compatibility on a Joomla 5 staging site. If it fatals, this class is still in the code.

Also known as

JLanguageMultilang · Joomla\CMS\Language\Multilanguage · class alias · J prefix · JMultilang

JMULTILANG-CLASS-001

JMultilang

JMultilang class name

JMultilang is a Joomla 3 global class. Joomla 4 still has an alias. Joomla 5 needs the Behaviour – Backward Compatibility plugin. Native Joomla 6 does not load that alias — you get Class "JMultilang" not found.

JMultilang → Joomla\CMS\Language\Multilanguage

Dies at Joomla 5 → 6
Dies at Joomla 5 → 6J3: Works nativelyJ4: Alias (old name still resolves)J6: Removed — fatalBC plugin: covers the class nameMechanical renameJoomla API

What you will see

  • Class "JMultilang" not found
  • Class 'JMultilang' not found
  • Failed to open stream: JMultilang

Symptoms people search

white screen after disabling compatibility plugin · class not found on Joomla 6 · works on Joomla 5 until I turn off backward compatibility

Replace this code

Swap JMultilang for Joomla\CMS\Language\Multilanguage.

Joomla 3

Remove or stop calling this

JMultilang::getInstance();
// or new JMultilang()

Joomla 4 / 6

Use this instead

use Joomla\CMS\Language\Multilanguage;

// Call the namespaced class. Do not keep the J prefix.

How to fix it

  1. 1Add a use statement for Joomla\CMS\Language\Multilanguage.
  2. 2Replace every JMultilang with the short class name from that use line.
  3. 3Disable Behaviour – Backward Compatibility on a Joomla 5 staging site. If it fatals, this class is still in the code.

Also known as

JMultilang · Joomla\CMS\Language\Multilanguage · class alias · J prefix

JTEXT-CLASS-001

JText

JText class name

JText is a Joomla 3 global class. Joomla 4 still has an alias. Joomla 5 needs the Behaviour – Backward Compatibility plugin. Native Joomla 6 does not load that alias — you get Class "JText" not found.

JText → Joomla\CMS\Language\Text

Dies at Joomla 5 → 6
Dies at Joomla 5 → 6J3: Works nativelyJ4: Alias (old name still resolves)J6: Removed — fatalBC plugin: covers the class nameMechanical renameJoomla API

What you will see

  • Class "JText" not found
  • Class 'JText' not found
  • Failed to open stream: JText

Symptoms people search

white screen after disabling compatibility plugin · class not found on Joomla 6 · works on Joomla 5 until I turn off backward compatibility · language strings not translating

Replace this code

Swap JText for Joomla\CMS\Language\Text.

Joomla 3

Remove or stop calling this

JText::getInstance();
// or new JText()

Joomla 4 / 6

Use this instead

use Joomla\CMS\Language\Text;

// Call the namespaced class. Do not keep the J prefix.

How to fix it

  1. 1Add a use statement for Joomla\CMS\Language\Text.
  2. 2Replace every JText with the short class name from that use line.
  3. 3Disable Behaviour – Backward Compatibility on a Joomla 5 staging site. If it fatals, this class is still in the code.

Also known as

JText · Joomla\CMS\Language\Text · class alias · J prefix

LANG-INI-PREFIX-001

en-GB.com_lms.ini

en-GB.com_foo.ini language filenames

Joomla 4 still understands the old prefix via BC. Native packaging uses Crowdin-style names without the locale prefix on the file.

en-GB.com_lms.ini → com_lms.ini + langmetadata.xml

Dies at Joomla 4 → 5
Dies at Joomla 4 → 5J3: Works nativelyJ4: Changed behaviourJ6: Changed behaviourBC plugin: partialPatch possible — review itManifest / installer

Symptoms people search

language file not loading on Joomla 5 · en-GB.com_

Replace this code

Swap en-GB.com_lms.ini for com_lms.ini + langmetadata.xml.

Joomla 3

Remove or stop calling this

language/en-GB/en-GB.com_lms.ini

Joomla 4 / 6

Use this instead

language/en-GB/com_lms.ini
language/en-GB/langmetadata.xml

How to fix it

  1. 1Add un-prefixed INI files.
  2. 2Keep langmetadata.xml.
  3. 3Do not rely on the J3 filename forever.

Also known as

en-GB.com_ · langmetadata.xml · Crowdin

LANG-QQ-001

_QQ_

_QQ_ language placeholder

Joomla 4 dropped the _QQ_ placeholder in language files.

_QQ_ → Escaped quotes in INI files

Dies at Joomla 3 → 4
Dies at Joomla 3 → 4J3: Works nativelyJ4: Removed — fatalJ6: Removed — fatalBC plugin: no — already dead on J4Mechanical renameManifest / installer

Symptoms people search

language string shows _QQ_ · INI parse

Replace this code

Swap _QQ_ for Escaped quotes in INI files.

Joomla 3

Remove or stop calling this

COM_LMS_INTRO="_QQ_Hello_QQ_"

Joomla 4 / 6

Use this instead

COM_LMS_INTRO="\"Hello\""

How to fix it

  1. 1Replace _QQ_ with escaped double quotes.

Also known as

_QQ_

Start a project

Have something
to build?

Tell us what you are building. You will hear back from an engineer within one business day.

hello@infyways.com · Remote, working across time zones

Tell us about your project

Fill out the quick form and we'll reach out.