You've already forked joomla_test
first commit
This commit is contained in:
178
libraries/joomla/language/helper.php
Normal file
178
libraries/joomla/language/helper.php
Normal file
@ -0,0 +1,178 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Language
|
||||
*
|
||||
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE
|
||||
*/
|
||||
|
||||
defined('JPATH_PLATFORM') or die;
|
||||
|
||||
/**
|
||||
* Language helper class
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Language
|
||||
* @since 11.1
|
||||
*/
|
||||
class JLanguageHelper
|
||||
{
|
||||
/**
|
||||
* Builds a list of the system languages which can be used in a select option
|
||||
*
|
||||
* @param string $actualLanguage Client key for the area
|
||||
* @param string $basePath Base path to use
|
||||
* @param boolean $caching True if caching is used
|
||||
* @param array $installed An array of arrays (text, value, selected)
|
||||
*
|
||||
* @return array List of system languages
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public static function createLanguageList($actualLanguage, $basePath = JPATH_BASE, $caching = false, $installed = false)
|
||||
{
|
||||
$list = array();
|
||||
|
||||
// Cache activation
|
||||
$langs = JLanguage::getKnownLanguages($basePath);
|
||||
if ($installed)
|
||||
{
|
||||
$db = JFactory::getDbo();
|
||||
$query = $db->getQuery(true)
|
||||
->select('element')
|
||||
->from('#__extensions')
|
||||
->where('type=' . $db->quote('language'))
|
||||
->where('state=0')
|
||||
->where('enabled=1')
|
||||
->where('client_id=' . ($basePath == JPATH_ADMINISTRATOR ? 1 : 0));
|
||||
$db->setQuery($query);
|
||||
$installed_languages = $db->loadObjectList('element');
|
||||
}
|
||||
|
||||
foreach ($langs as $lang => $metadata)
|
||||
{
|
||||
if (!$installed || array_key_exists($lang, $installed_languages))
|
||||
{
|
||||
$option = array();
|
||||
|
||||
$option['text'] = $metadata['name'];
|
||||
$option['value'] = $lang;
|
||||
if ($lang == $actualLanguage)
|
||||
{
|
||||
$option['selected'] = 'selected="selected"';
|
||||
}
|
||||
$list[] = $option;
|
||||
}
|
||||
}
|
||||
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tries to detect the language.
|
||||
*
|
||||
* @return string locale or null if not found
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public static function detectLanguage()
|
||||
{
|
||||
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
|
||||
{
|
||||
$browserLangs = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
|
||||
$systemLangs = self::getLanguages();
|
||||
foreach ($browserLangs as $browserLang)
|
||||
{
|
||||
// Slice out the part before ; on first step, the part before - on second, place into array
|
||||
$browserLang = substr($browserLang, 0, strcspn($browserLang, ';'));
|
||||
$primary_browserLang = substr($browserLang, 0, 2);
|
||||
foreach ($systemLangs as $systemLang)
|
||||
{
|
||||
// Take off 3 letters iso code languages as they can't match browsers' languages and default them to en
|
||||
$Jinstall_lang = $systemLang->lang_code;
|
||||
|
||||
if (strlen($Jinstall_lang) < 6)
|
||||
{
|
||||
if (strtolower($browserLang) == strtolower(substr($systemLang->lang_code, 0, strlen($browserLang))))
|
||||
{
|
||||
return $systemLang->lang_code;
|
||||
}
|
||||
elseif ($primary_browserLang == substr($systemLang->lang_code, 0, 2))
|
||||
{
|
||||
$primaryDetectedLang = $systemLang->lang_code;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($primaryDetectedLang))
|
||||
{
|
||||
return $primaryDetectedLang;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get available languages
|
||||
*
|
||||
* @param string $key Array key
|
||||
*
|
||||
* @return array An array of published languages
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public static function getLanguages($key = 'default')
|
||||
{
|
||||
static $languages;
|
||||
|
||||
if (empty($languages))
|
||||
{
|
||||
// Installation uses available languages
|
||||
if (JFactory::getApplication()->getClientId() == 2)
|
||||
{
|
||||
$languages[$key] = array();
|
||||
$knownLangs = JLanguage::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
|
||||
{
|
||||
$cache = JFactory::getCache('com_languages', '');
|
||||
if (!$languages = $cache->get('languages'))
|
||||
{
|
||||
$db = JFactory::getDbo();
|
||||
$query = $db->getQuery(true)
|
||||
->select('*')
|
||||
->from('#__languages')
|
||||
->where('published=1')
|
||||
->order('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];
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user