/**
* Get available languages
*
* @param string $key Array key
*
* @return array An array of published languages
*
* @since 1.6
*/
public static function getLanguages($key = 'default')
{
static $languages;
if (empty($languages)) {
// Installation uses available languages
if (Factory::getApplication()->isClient('installation')) {
$languages[$key] = array();
$knownLangs = self::getKnownLanguages(JPATH_BASE);
foreach ($knownLangs as $metadata) {
// Take off 3 letters iso code languages as they can't match browsers' languages and default them to en
$obj = new \stdClass();
$obj->lang_code = $metadata['tag'];
$languages[$key][] = $obj;
}
} else {
/** @var OutputController $cache */
$cache = Factory::getContainer()->get(CacheControllerFactoryInterface::class)->createCacheController('output', ['defaultgroup' => 'com_languages']);
if ($cache->contains('languages')) {
$languages = $cache->get('languages');
} else {
$db = Factory::getDbo();
$query = $db->getQuery(true)->select('*')->from($db->quoteName('#__languages'))->where($db->quoteName('published') . ' = 1')->order($db->quoteName('ordering') . ' ASC');
$db->setQuery($query);
$languages['default'] = $db->loadObjectList();
$languages['sef'] = array();
$languages['lang_code'] = array();
if (isset($languages['default'][0])) {
foreach ($languages['default'] as $lang) {
$languages['sef'][$lang->sef] = $lang;
$languages['lang_code'][$lang->lang_code] = $lang;
}
}
$cache->store($languages, 'languages');
}
}
}
return $languages[$key];
}