code: public static function getLanguages($blnInstalledOnly=false)
  	{
  		$return = array();
  		$languages = array();
  		$arrAux = array();
  		$langsNative = array();
  
  		static::loadLanguageFile('languages');
  		include __DIR__ . '/../../config/languages.php';
  
  		foreach ($languages as $strKey=>$strName)
  		{
  			$arrAux[$strKey] = isset($GLOBALS['TL_LANG']['LNG'][$strKey]) ? Utf8::toAscii($GLOBALS['TL_LANG']['LNG'][$strKey]) : $strName;
  		}
  
  		asort($arrAux);
  
  		$arrBackendLanguages = self::getContainer()->getParameter('contao.locales');
  
  		foreach (array_keys($arrAux) as $strKey)
  		{
  			if ($blnInstalledOnly && !\in_array($strKey, $arrBackendLanguages))
  			{
  				continue;
  			}
  
  			$return[$strKey] = $GLOBALS['TL_LANG']['LNG'][$strKey] ?? $languages[$strKey];
  
  			if (isset($langsNative[$strKey]) && $langsNative[$strKey] != $return[$strKey])
  			{
  				$return[$strKey] .= ' - ' . $langsNative[$strKey];
  			}
  		}
  
  		// HOOK: add custom logic
  		if (isset($GLOBALS['TL_HOOKS']['getLanguages']) && \is_array($GLOBALS['TL_HOOKS']['getLanguages']))
  		{
  			foreach ($GLOBALS['TL_HOOKS']['getLanguages'] as $callback)
  			{
  				static::importStatic($callback[0])->{$callback[1]}($return, $languages, $langsNative, $blnInstalledOnly);
  			}
  		}
  
  		return $return;
  	}
docs: Return the available languages as array
  
  @param boolean $blnInstalledOnly If true, return only installed languages
  
  @return array An array of languages