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 → 6What 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
- 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 → 6What 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
- 1Add a use statement for Joomla\CMS\Language\Language.
- 2Replace every JLanguage with the short class name from that use line.
- 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 → 6What 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
- 1Add a use statement for Joomla\CMS\Language\Associations.
- 2Replace every JLanguageAssociations with the short class name from that use line.
- 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 → 6What 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
- 1Add a use statement for Joomla\CMS\Language\LanguageHelper.
- 2Replace every JLanguageHelper with the short class name from that use line.
- 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 → 6What 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
- 1Add a use statement for Joomla\CMS\Language\Multilanguage.
- 2Replace every JLanguageMultilang with the short class name from that use line.
- 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 → 6What 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
- 1Add a use statement for Joomla\CMS\Language\Multilanguage.
- 2Replace every JMultilang with the short class name from that use line.
- 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 → 6What 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
- 1Add a use statement for Joomla\CMS\Language\Text.
- 2Replace every JText with the short class name from that use line.
- 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 → 5Symptoms 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.iniJoomla 4 / 6
Use this instead
language/en-GB/com_lms.ini
language/en-GB/langmetadata.xmlHow to fix it
- 1Add un-prefixed INI files.
- 2Keep langmetadata.xml.
- 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 → 4Symptoms 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
- 1Replace _QQ_ with escaped double quotes.
Also known as
_QQ_