/** * Gets a list of available languages * * @param \Joomla\Registry\Registry &$params module params * * @return array */ public static function getList(&$params) { $user = JFactory::getUser(); $lang = JFactory::getLanguage(); $languages = JLanguageHelper::getLanguages(); $app = JFactory::getApplication(); $menu = $app->getMenu(); // Get menu home items $homes = array(); $homes['*'] = $menu->getDefault('*'); foreach ($languages as $item) { $default = $menu->getDefault($item->lang_code); if ($default && $default->language == $item->lang_code) { $homes[$item->lang_code] = $default; } } // Load associations $assoc = JLanguageAssociations::isEnabled(); if ($assoc) { $active = $menu->getActive(); if ($active) { $associations = MenusHelper::getAssociations($active->id); } // Load component associations $class = str_replace('com_', '', $app->input->get('option')) . 'HelperAssociation'; JLoader::register($class, JPATH_COMPONENT_SITE . '/helpers/association.php'); if (class_exists($class) && is_callable(array($class, 'getAssociations'))) { $cassociations = call_user_func(array($class, 'getAssociations')); } } $levels = $user->getAuthorisedViewLevels(); $sitelangs = MultilangstatusHelper::getSitelangs(); $multilang = JLanguageMultilang::isEnabled(); // Filter allowed languages foreach ($languages as $i => &$language) { // Do not display language without frontend UI if (!array_key_exists($language->lang_code, $sitelangs)) { unset($languages[$i]); } elseif (!isset($homes[$language->lang_code])) { unset($languages[$i]); } elseif (isset($language->access) && $language->access && !in_array($language->access, $levels)) { unset($languages[$i]); } else { $language->active = $language->lang_code == $lang->getTag(); // Fetch language rtl // If loaded language get from current JLanguage metadata if ($language->active) { $language->rtl = $lang->isRtl(); } else { $languageMetadata = JLanguage::getMetadata($language->lang_code); $language->rtl = $languageMetadata['rtl']; } if ($multilang) { if (isset($cassociations[$language->lang_code])) { $language->link = JRoute::_($cassociations[$language->lang_code] . '&lang=' . $language->sef); } elseif (isset($associations[$language->lang_code]) && $menu->getItem($associations[$language->lang_code])) { $itemid = $associations[$language->lang_code]; $language->link = JRoute::_('index.php?lang=' . $language->sef . '&Itemid=' . $itemid); } else { if ($language->active) { $language->link = JUri::getInstance()->toString(array('path', 'query')); } else { $itemid = isset($homes[$language->lang_code]) ? $homes[$language->lang_code]->id : $homes['*']->id; $language->link = JRoute::_('index.php?lang=' . $language->sef . '&Itemid=' . $itemid); } } } else { $language->link = JRoute::_('&Itemid=' . $homes['*']->id); } } } return $languages; }
/** * @todo Implement testGetMetadata(). */ public function testGetMetadata() { // This method get language metadata $l1 = 'en-GB'; $l2 = 'es-ES'; // In this case, returns array with default language // - same operation of get method with metadata property $option1 = array('name' => 'English (United Kingdom)', 'tag' => 'en-GB', 'rtl' => 0, 'locale' => 'en_GB.utf8, en_GB.UTF-8, en_GB, eng_GB, en, english, english-uk, uk, gbr, britain, england, great britain, uk, united kingdom, united-kingdom', 'firstDay' => 0); $option2 = array('name' => 'XXTestLang', 'tag' => 'xx-XX', 'rtl' => 0, 'locale' => 'en_GB.utf8, en_GB.UTF-8, en_GB, eng_GB, en, english, english-uk, uk, gbr, britain, england, great britain, uk, united kingdom, united-kingdom', 'firstDay' => 0); $lang = new JLanguage(''); // language exists, returns array with values $this->assertThat($option1, $this->equalTo($lang->getMetadata($l1)), 'Line: ' . __LINE__); // language doesn't exist, retun NULL $this->assertNull($lang->getMetadata($l2)); }