{ y 7
0 #
6 E t A M
w ^ y 4
3
U
m ) H Q Y {
L w R G = C I : 9 a
r O l U
'
k O \ > h m m ' W o b { O v w V t
~ r % < K V ' *
H l E W = " G . ) .
b
d * @
T 2 7 X q v
r >
+
u @ h @
m B P i
|
z s
1 E v l X
O g R \
f " p u _ 8 ,
x 8 I
// 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'] = [];
$languages['lang_code'] = [];
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];
}
/**
* Get a list of installed languages.
*
* @param integer $clientId The client app id.
* @param boolean $processMetaData Fetch Language metadata.
* @param boolean $processManifest Fetch Language manifest.
* @param string $pivot The pivot of the returning array.
* @param string $orderField Field to order the results.
* @param string $orderDirection Direction to order the results.
*
* @return array Array with the installed languages.
*
* @since 3.7.0
*/
public static function getInstalledLanguages(
$clientId = null,
$processMetaData = false,
$processManifest = false,
$pivot = 'element',
$orderField = null,
$orderDirection = null
) {
static $installedLanguages = null;
if ($installedLanguages === null) {
/** @var OutputController $cache */
$cache = Factory::getContainer()->get(CacheControllerFactoryInterface::class)
->createCacheController('output', ['defaultgroup' => 'com_languages']);
if ($cache->contains('installedlanguages')) {
$installedLanguages = $cache->get('installedlanguages');
} else {
$db = Factory::getDbo();
$query = $db->getQuery(true)
->select(
[
$db->quoteName('element'),
$db->quoteName('name'),
$db->quoteName('client_id'),
$db->quoteName('extension_id'),
]
)
->from($db->quoteName('#__extensions'))
->where(
[
$db->quoteName('type') . ' = ' . $db->quote('language'),
$db->quoteName('state') . ' = 0',
$db->quoteName('enabled') . ' = 1',
]
);
$installedLanguages = $db->setQuery($query)->loadObjectList();
$cache->store($installedLanguages, 'installedlanguages');
}
}
$clients = $clientId === null ? [0, 1] : [(int) $clientId];
$languages = [
0 => [],
1 => [],
];
foreach ($installedLanguages as $language) {
// If the language client is not needed continue cycle. Drop for performance.
if (!\in_array((int) $language->client_id, $clients)) {
continue;
}
$lang = $language;
if ($processMetaData || $processManifest) {
$clientPath = (int) $language->client_id === 0 ? JPATH_SITE : JPATH_ADMINISTRATOR;
$metafile = self::getLanguagePath($clientPath, $language->element) . '/langmetadata.xml';
if (!is_file($metafile)) {
$metafile = self::getLanguagePath($clientPath, $language->element) . '/' . $language->element . '.xml';
}
// Process the language metadata.
if ($processMetaData) {
try {
$lang->metadata = self::parseXMLLanguageFile($metafile);
} catch (\Exception $e) {
// Not able to process xml language file. Fail silently.
Log::add(Text::sprintf('JLIB_LANGUAGE_ERROR_CANNOT_LOAD_METAFILE', $language->element, $metafile), Log::WARNING, 'language');
continue;
}
// No metadata found, not a valid language. Fail silently.
if (!\is_array($lang->metadata)) {
Log::add(Text::sprintf('JLIB_LANGUAGE_ERROR_CANNOT_LOAD_METADATA', $language->element, $metafile), Log::WARNING, 'language');
continue;
}
}
// Process the language manifest.
if ($processManifest) {
try {
$lang->manifest = Installer::parseXMLInstallFile($metafile);
} catch (\Exception $e) {
// Not able to process xml language file. Fail silently.
Log::add(Text::sprintf('JLIB_LANGUAGE_ERROR_CANNOT_LOAD_METAFILE', $language->element, $metafile), Log::WARNING, 'language');
continue;
}
// No metadata found, not a valid language. Fail silently.
if (!\is_array($lang->manifest)) {
Log::add(Text::sprintf('JLIB_LANGUAGE_ERROR_CANNOT_LOAD_METADATA', $language->element, $metafile), Log::WARNING, 'language');
continue;
}
}
}
$languages[$language->client_id][] = $lang;
}
// Order the list, if needed.
if ($orderField !== null && $orderDirection !== null) {
$orderDirection = strtolower($orderDirection) === 'desc' ? -1 : 1;
foreach ($languages as $cId => $language) {
// If the language client is not needed continue cycle. Drop for performance.
if (!\in_array($cId, $clients)) {
continue;
}
$languages[$cId] = ArrayHelper::sortObjects($languages[$cId], $orderField, $orderDirection, true, true);
}
}
// Add the pivot, if needed.
if ($pivot !== null) {
foreach ($languages as $cId => $language) {
// If the language client is not needed continue cycle. Drop for performance.
if (!\in_array($cId, $clients)) {
continue;
}
$languages[$cId] = ArrayHelper::pivot($languages[$cId], $pivot);
}
}
return $clientId !== null ? $languages[$clientId] : $languages;
}
/**
* Get a list of content languages.
*
* @param array $publishedStates Array with the content language published states. Empty array for all.
* @param boolean $checkInstalled Check if the content language is installed.
* @param string $pivot The pivot of the returning array.
* @param string $orderField Field to order the results.
* @param string $orderDirection Direction to order the results.
*
* @return array Array of the content languages.
*
* @since 3.7.0
*/
public static function getContentLanguages(
$publishedStates = [1],
$checkInstalled = true,
$pivot = 'lang_code',
$orderField = null,
$orderDirection = null
) {
static $contentLanguages = null;
if ($contentLanguages === null) {
/** @var OutputController $cache */
$cache = Factory::getContainer()->get(CacheControllerFactoryInterface::class)
->createCacheController('output', ['defaultgroup' => 'com_languages']);
if ($cache->contains('contentlanguages')) {
$contentLanguages = $cache->get('contentlanguages');
} else {
$db = Factory::getDbo();
$query = $db->getQuery(true)
->select('*')
->from($db->quoteName('#__languages'));
$contentLanguages = $db->setQuery($query)->loadObjectList();
$cache->store($contentLanguages, 'contentlanguages');
}
}
$languages = $contentLanguages;
// B/C layer. Before 3.8.3.
if ($publishedStates === true) {
$publishedStates = [1];
} elseif ($publishedStates === false) {
$publishedStates = [];
}
// Check the language published state, if needed.
if (\count($publishedStates) > 0) {
foreach ($languages as $key => $language) {
if (!\in_array((int) $language->published, $publishedStates, true)) {
unset($languages[$key]);
}
}
}
// Check if the language is installed, if needed.
if ($checkInstalled) {
$languages = array_values(array_intersect_key(ArrayHelper::pivot($languages, 'lang_code'), static::getInstalledLanguages(0)));
}
// Order the list, if needed.
if ($orderField !== null && $orderDirection !== null) {
$languages = ArrayHelper::sortObjects($languages, $orderField, strtolower($orderDirection) === 'desc' ? -1 : 1, true, true);
}
// Add the pivot, if needed.
if ($pivot !== null) {
$languages = ArrayHelper::pivot($languages, $pivot);
}
return $languages;
}
/**
* Parse strings from a language file.
*
* @param string $fileName The language ini file path.
* @param boolean $debug If set to true debug language ini file.
*
* @return array The strings parsed.
*
* @since 3.9.0
*/
public static function parseIniFile($fileName, $debug = false)
{
// Check if file exists.
if (!is_file($fileName)) {
return [];
}
// Capture hidden PHP errors from the parsing.
if ($debug === true) {
// See https://www.php.net/manual/en/reserved.variables.phperrormsg.php
$php_errormsg = null;
$trackErrors = ini_get('track_errors');
ini_set('track_errors', true);
}
// This was required for https://github.com/joomla/joomla-cms/issues/17198 but not sure what server setup
// issue it is solving
$disabledFunctions = explode(',', ini_get('disable_functions'));
$isParseIniFileDisabled = \in_array('parse_ini_file', array_map('trim', $disabledFunctions));
if (!\function_exists('parse_ini_file') || $isParseIniFileDisabled) {
$contents = file_get_contents($fileName);
$strings = @parse_ini_string($contents);
} else {
$strings = @parse_ini_file($fileName);
}
// Restore error tracking to what it was before.
if ($debug === true) {
ini_set('track_errors', $trackErrors);
}
return \is_array($strings) ? $strings : [];
}
/**
* Save strings to a language file.
*
* @param string $fileName The language ini file path.
* @param array $strings The array of strings.
*
* @return boolean True if saved, false otherwise.
*
* @since 3.7.0
*/
public static function saveToIniFile($fileName, array $strings)
{
// Escape double quotes.
foreach ($strings as $key => $string) {
$strings[$key] = addcslashes($string, '"');
}
// Write override.ini file with the strings.
$registry = new Registry($strings);
return File::write($fileName, $registry->toString('INI'));
}
/**
* Checks if a language exists.
*
* This is a simple, quick check for the directory that should contain language files for the given user.
*
* @param string $lang Language to check.
* @param string $basePath Optional path to check.
*
* @return boolean True if the language exists.
*
* @since 3.7.0
*/
public static function exists($lang, $basePath = JPATH_BASE)
{
static $paths = [];
// Return false if no language was specified
if (!$lang) {
return false;
}
$path = $basePath . '/language/' . $lang;
// Return previous check results if it exists
if (isset($paths[$path])) {
return $paths[$path];
}
// Check if the language exists
$paths[$path] = is_dir($path);
return $paths[$path];
}
/**
* Returns an associative array holding the metadata.
*
* @param string $lang The name of the language.
*
* @return mixed If $lang exists return key/value pair with the language metadata, otherwise return NULL.
*
* @since 3.7.0
*/
public static function getMetadata($lang)
{
$file = self::getLanguagePath(JPATH_BASE, $lang) . '/langmetadata.xml';
if (!is_file($file)) {
$file = self::getLanguagePath(JPATH_BASE, $lang) . '/' . $lang . '.xml';
}
$result = null;
if (is_file($file)) {
$result = self::parseXMLLanguageFile($file);
}
if (empty($result)) {
return;
}
return $result;
}
/**
* Returns a list of known languages for an area
*
* @param string $basePath The basepath to use
*
* @return array key/value pair with the language file and real name.
*
* @since 3.7.0
*/
public static function getKnownLanguages($basePath = JPATH_BASE)
{
return self::parseLanguageFiles(self::getLanguagePath($basePath));
}
/**
* Get the path to a language
*
* @param string $basePath The basepath to use.
* @param string $language The language tag.
*
* @return string language related path or null.
*
* @since 3.7.0
*/
public static function getLanguagePath($basePath = JPATH_BASE, $language = null)
{
return $basePath . '/language' . (!empty($language) ? '/' . $language : '');
}
/**
* Searches for language directories within a certain base dir.
*
* @param string $dir directory of files.
*
* @return array Array holding the found languages as filename => real name pairs.
*
* @since 3.7.0
*/
public static function parseLanguageFiles($dir = null)
{
$languages = [];
// Search main language directory for subdirectories
foreach (glob($dir . '/*', GLOB_NOSORT | GLOB_ONLYDIR) as $directory) {
// But only directories with lang code format
if (preg_match('#/[a-z]{2,3}-[A-Z]{2}$#', $directory)) {
$dirPathParts = pathinfo($directory);
$file = $directory . '/langmetadata.xml';
if (!is_file($file)) {
$file = $directory . '/' . $dirPathParts['filename'] . '.xml';
}
if (!is_file($file)) {
continue;
}
try {
// Get installed language metadata from xml file and merge it with lang array
if ($metadata = self::parseXMLLanguageFile($file)) {
$languages = array_replace($languages, [$dirPathParts['filename'] => $metadata]);
}
} catch (\RuntimeException $e) {
// Ignore it
}
}
}
return $languages;
}
/**
* Parse XML file for language information.
*
* @param string $path Path to the XML files.
*
* @return array Array holding the found metadata as a key => value pair.
*
* @since 3.7.0
* @throws \RuntimeException
*/
public static function parseXMLLanguageFile($path)
{
if (!is_readable($path)) {
throw new \RuntimeException('File not found or not readable');
}
// Try to load the file
$xml = simplexml_load_file($path);
if (!$xml) {
return;
}
// Check that it's a metadata file
if ((string) $xml->getName() !== 'metafile') {
return;
}
$metadata = [];
foreach ($xml->metadata->children() as $child) {
$metadata[$child->getName()] = (string) $child;
}
return $metadata;
}
}
Warning: Class "Joomla\CMS\Language\LanguageHelper" not found in /datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/libraries/loader.php on line 576
{ y 7
0 #
6 E t A M
w ^ y 4
3
U
m ) H Q Y {
L w R G = C I : 9 a
r O l U
'
k O \ > h m m ' W o b { O v w V t
~ r % < K V ' *
H l E W = " G . ) .
b
d * @
T 2 7 X q v
r >
+
u @ h @
m B P i
|
z s
1 E v l X
O g R \
f " p u _ 8 ,
x 8 I
// 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'] = [];
$languages['lang_code'] = [];
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];
}
/**
* Get a list of installed languages.
*
* @param integer $clientId The client app id.
* @param boolean $processMetaData Fetch Language metadata.
* @param boolean $processManifest Fetch Language manifest.
* @param string $pivot The pivot of the returning array.
* @param string $orderField Field to order the results.
* @param string $orderDirection Direction to order the results.
*
* @return array Array with the installed languages.
*
* @since 3.7.0
*/
public static function getInstalledLanguages(
$clientId = null,
$processMetaData = false,
$processManifest = false,
$pivot = 'element',
$orderField = null,
$orderDirection = null
) {
static $installedLanguages = null;
if ($installedLanguages === null) {
/** @var OutputController $cache */
$cache = Factory::getContainer()->get(CacheControllerFactoryInterface::class)
->createCacheController('output', ['defaultgroup' => 'com_languages']);
if ($cache->contains('installedlanguages')) {
$installedLanguages = $cache->get('installedlanguages');
} else {
$db = Factory::getDbo();
$query = $db->getQuery(true)
->select(
[
$db->quoteName('element'),
$db->quoteName('name'),
$db->quoteName('client_id'),
$db->quoteName('extension_id'),
]
)
->from($db->quoteName('#__extensions'))
->where(
[
$db->quoteName('type') . ' = ' . $db->quote('language'),
$db->quoteName('state') . ' = 0',
$db->quoteName('enabled') . ' = 1',
]
);
$installedLanguages = $db->setQuery($query)->loadObjectList();
$cache->store($installedLanguages, 'installedlanguages');
}
}
$clients = $clientId === null ? [0, 1] : [(int) $clientId];
$languages = [
0 => [],
1 => [],
];
foreach ($installedLanguages as $language) {
// If the language client is not needed continue cycle. Drop for performance.
if (!\in_array((int) $language->client_id, $clients)) {
continue;
}
$lang = $language;
if ($processMetaData || $processManifest) {
$clientPath = (int) $language->client_id === 0 ? JPATH_SITE : JPATH_ADMINISTRATOR;
$metafile = self::getLanguagePath($clientPath, $language->element) . '/langmetadata.xml';
if (!is_file($metafile)) {
$metafile = self::getLanguagePath($clientPath, $language->element) . '/' . $language->element . '.xml';
}
// Process the language metadata.
if ($processMetaData) {
try {
$lang->metadata = self::parseXMLLanguageFile($metafile);
} catch (\Exception $e) {
// Not able to process xml language file. Fail silently.
Log::add(Text::sprintf('JLIB_LANGUAGE_ERROR_CANNOT_LOAD_METAFILE', $language->element, $metafile), Log::WARNING, 'language');
continue;
}
// No metadata found, not a valid language. Fail silently.
if (!\is_array($lang->metadata)) {
Log::add(Text::sprintf('JLIB_LANGUAGE_ERROR_CANNOT_LOAD_METADATA', $language->element, $metafile), Log::WARNING, 'language');
continue;
}
}
// Process the language manifest.
if ($processManifest) {
try {
$lang->manifest = Installer::parseXMLInstallFile($metafile);
} catch (\Exception $e) {
// Not able to process xml language file. Fail silently.
Log::add(Text::sprintf('JLIB_LANGUAGE_ERROR_CANNOT_LOAD_METAFILE', $language->element, $metafile), Log::WARNING, 'language');
continue;
}
// No metadata found, not a valid language. Fail silently.
if (!\is_array($lang->manifest)) {
Log::add(Text::sprintf('JLIB_LANGUAGE_ERROR_CANNOT_LOAD_METADATA', $language->element, $metafile), Log::WARNING, 'language');
continue;
}
}
}
$languages[$language->client_id][] = $lang;
}
// Order the list, if needed.
if ($orderField !== null && $orderDirection !== null) {
$orderDirection = strtolower($orderDirection) === 'desc' ? -1 : 1;
foreach ($languages as $cId => $language) {
// If the language client is not needed continue cycle. Drop for performance.
if (!\in_array($cId, $clients)) {
continue;
}
$languages[$cId] = ArrayHelper::sortObjects($languages[$cId], $orderField, $orderDirection, true, true);
}
}
// Add the pivot, if needed.
if ($pivot !== null) {
foreach ($languages as $cId => $language) {
// If the language client is not needed continue cycle. Drop for performance.
if (!\in_array($cId, $clients)) {
continue;
}
$languages[$cId] = ArrayHelper::pivot($languages[$cId], $pivot);
}
}
return $clientId !== null ? $languages[$clientId] : $languages;
}
/**
* Get a list of content languages.
*
* @param array $publishedStates Array with the content language published states. Empty array for all.
* @param boolean $checkInstalled Check if the content language is installed.
* @param string $pivot The pivot of the returning array.
* @param string $orderField Field to order the results.
* @param string $orderDirection Direction to order the results.
*
* @return array Array of the content languages.
*
* @since 3.7.0
*/
public static function getContentLanguages(
$publishedStates = [1],
$checkInstalled = true,
$pivot = 'lang_code',
$orderField = null,
$orderDirection = null
) {
static $contentLanguages = null;
if ($contentLanguages === null) {
/** @var OutputController $cache */
$cache = Factory::getContainer()->get(CacheControllerFactoryInterface::class)
->createCacheController('output', ['defaultgroup' => 'com_languages']);
if ($cache->contains('contentlanguages')) {
$contentLanguages = $cache->get('contentlanguages');
} else {
$db = Factory::getDbo();
$query = $db->getQuery(true)
->select('*')
->from($db->quoteName('#__languages'));
$contentLanguages = $db->setQuery($query)->loadObjectList();
$cache->store($contentLanguages, 'contentlanguages');
}
}
$languages = $contentLanguages;
// B/C layer. Before 3.8.3.
if ($publishedStates === true) {
$publishedStates = [1];
} elseif ($publishedStates === false) {
$publishedStates = [];
}
// Check the language published state, if needed.
if (\count($publishedStates) > 0) {
foreach ($languages as $key => $language) {
if (!\in_array((int) $language->published, $publishedStates, true)) {
unset($languages[$key]);
}
}
}
// Check if the language is installed, if needed.
if ($checkInstalled) {
$languages = array_values(array_intersect_key(ArrayHelper::pivot($languages, 'lang_code'), static::getInstalledLanguages(0)));
}
// Order the list, if needed.
if ($orderField !== null && $orderDirection !== null) {
$languages = ArrayHelper::sortObjects($languages, $orderField, strtolower($orderDirection) === 'desc' ? -1 : 1, true, true);
}
// Add the pivot, if needed.
if ($pivot !== null) {
$languages = ArrayHelper::pivot($languages, $pivot);
}
return $languages;
}
/**
* Parse strings from a language file.
*
* @param string $fileName The language ini file path.
* @param boolean $debug If set to true debug language ini file.
*
* @return array The strings parsed.
*
* @since 3.9.0
*/
public static function parseIniFile($fileName, $debug = false)
{
// Check if file exists.
if (!is_file($fileName)) {
return [];
}
// Capture hidden PHP errors from the parsing.
if ($debug === true) {
// See https://www.php.net/manual/en/reserved.variables.phperrormsg.php
$php_errormsg = null;
$trackErrors = ini_get('track_errors');
ini_set('track_errors', true);
}
// This was required for https://github.com/joomla/joomla-cms/issues/17198 but not sure what server setup
// issue it is solving
$disabledFunctions = explode(',', ini_get('disable_functions'));
$isParseIniFileDisabled = \in_array('parse_ini_file', array_map('trim', $disabledFunctions));
if (!\function_exists('parse_ini_file') || $isParseIniFileDisabled) {
$contents = file_get_contents($fileName);
$strings = @parse_ini_string($contents);
} else {
$strings = @parse_ini_file($fileName);
}
// Restore error tracking to what it was before.
if ($debug === true) {
ini_set('track_errors', $trackErrors);
}
return \is_array($strings) ? $strings : [];
}
/**
* Save strings to a language file.
*
* @param string $fileName The language ini file path.
* @param array $strings The array of strings.
*
* @return boolean True if saved, false otherwise.
*
* @since 3.7.0
*/
public static function saveToIniFile($fileName, array $strings)
{
// Escape double quotes.
foreach ($strings as $key => $string) {
$strings[$key] = addcslashes($string, '"');
}
// Write override.ini file with the strings.
$registry = new Registry($strings);
return File::write($fileName, $registry->toString('INI'));
}
/**
* Checks if a language exists.
*
* This is a simple, quick check for the directory that should contain language files for the given user.
*
* @param string $lang Language to check.
* @param string $basePath Optional path to check.
*
* @return boolean True if the language exists.
*
* @since 3.7.0
*/
public static function exists($lang, $basePath = JPATH_BASE)
{
static $paths = [];
// Return false if no language was specified
if (!$lang) {
return false;
}
$path = $basePath . '/language/' . $lang;
// Return previous check results if it exists
if (isset($paths[$path])) {
return $paths[$path];
}
// Check if the language exists
$paths[$path] = is_dir($path);
return $paths[$path];
}
/**
* Returns an associative array holding the metadata.
*
* @param string $lang The name of the language.
*
* @return mixed If $lang exists return key/value pair with the language metadata, otherwise return NULL.
*
* @since 3.7.0
*/
public static function getMetadata($lang)
{
$file = self::getLanguagePath(JPATH_BASE, $lang) . '/langmetadata.xml';
if (!is_file($file)) {
$file = self::getLanguagePath(JPATH_BASE, $lang) . '/' . $lang . '.xml';
}
$result = null;
if (is_file($file)) {
$result = self::parseXMLLanguageFile($file);
}
if (empty($result)) {
return;
}
return $result;
}
/**
* Returns a list of known languages for an area
*
* @param string $basePath The basepath to use
*
* @return array key/value pair with the language file and real name.
*
* @since 3.7.0
*/
public static function getKnownLanguages($basePath = JPATH_BASE)
{
return self::parseLanguageFiles(self::getLanguagePath($basePath));
}
/**
* Get the path to a language
*
* @param string $basePath The basepath to use.
* @param string $language The language tag.
*
* @return string language related path or null.
*
* @since 3.7.0
*/
public static function getLanguagePath($basePath = JPATH_BASE, $language = null)
{
return $basePath . '/language' . (!empty($language) ? '/' . $language : '');
}
/**
* Searches for language directories within a certain base dir.
*
* @param string $dir directory of files.
*
* @return array Array holding the found languages as filename => real name pairs.
*
* @since 3.7.0
*/
public static function parseLanguageFiles($dir = null)
{
$languages = [];
// Search main language directory for subdirectories
foreach (glob($dir . '/*', GLOB_NOSORT | GLOB_ONLYDIR) as $directory) {
// But only directories with lang code format
if (preg_match('#/[a-z]{2,3}-[A-Z]{2}$#', $directory)) {
$dirPathParts = pathinfo($directory);
$file = $directory . '/langmetadata.xml';
if (!is_file($file)) {
$file = $directory . '/' . $dirPathParts['filename'] . '.xml';
}
if (!is_file($file)) {
continue;
}
try {
// Get installed language metadata from xml file and merge it with lang array
if ($metadata = self::parseXMLLanguageFile($file)) {
$languages = array_replace($languages, [$dirPathParts['filename'] => $metadata]);
}
} catch (\RuntimeException $e) {
// Ignore it
}
}
}
return $languages;
}
/**
* Parse XML file for language information.
*
* @param string $path Path to the XML files.
*
* @return array Array holding the found metadata as a key => value pair.
*
* @since 3.7.0
* @throws \RuntimeException
*/
public static function parseXMLLanguageFile($path)
{
if (!is_readable($path)) {
throw new \RuntimeException('File not found or not readable');
}
// Try to load the file
$xml = simplexml_load_file($path);
if (!$xml) {
return;
}
// Check that it's a metadata file
if ((string) $xml->getName() !== 'metafile') {
return;
}
$metadata = [];
foreach ($xml->metadata->children() as $child) {
$metadata[$child->getName()] = (string) $child;
}
return $metadata;
}
}
Warning: Class "Joomla\CMS\Language\LanguageHelper" not found in /datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/libraries/loader.php on line 576
if ($lang == null) { $lang = $this->default; } $this->lang = $lang; $this->metadata = LanguageHelper::getMetadata($this->lang); $this->setDebug($debug); /* * Let's load the default override once, so we can profit from that, too * But make sure, that we don't enforce it on each language file load. * * @since 4.0.0 */ public function createLanguage($lang, $debug = false): Language { return new Language($lang, $debug); }} * @since 4.0.0 */ public function createLanguage($lang, $debug = false): Language { if (!isset(self::$languages[$lang . $debug])) { self::$languages[$lang . $debug] = parent::createLanguage($lang, $debug); } return self::$languages[$lang . $debug]; }} ); $conf = self::getConfig(); $locale = $conf->get('language'); $debug = $conf->get('debug_lang'); $lang = self::getContainer()->get(LanguageFactoryInterface::class)->createLanguage($locale, $debug); return $lang; } /** ), E_USER_DEPRECATED ); if (!self::$language) { self::$language = self::createLanguage(); } return self::$language; } */ public function __construct($options = []) { // Extract the internal dependencies before calling the parent constructor since it calls $this->load() $this->app = isset($options['app']) && $options['app'] instanceof CMSApplication ? $options['app'] : Factory::getApplication(); $this->language = isset($options['language']) && $options['language'] instanceof Language ? $options['language'] : Factory::getLanguage(); if (!isset($options['db']) || !($options['db'] instanceof DatabaseDriver)) { @trigger_error(sprintf('Database will be mandatory in 5.0.'), E_USER_DEPRECATED); $options['db'] = Factory::getContainer()->get(DatabaseDriver::class); } if (!array_key_exists('db', $options)) { $options['db'] = $this->getDatabase(); } $instance = new $classname($options); if ($instance instanceof CacheControllerFactoryAwareInterface) { $instance->setCacheControllerFactory($this->getCacheControllerFactory()); } if ($this->menuFactory === null) { @trigger_error('Menu factory must be set in 5.0', E_USER_DEPRECATED); $this->menuFactory = $this->getContainer()->get(MenuFactoryInterface::class); } $this->menus[$name] = $this->menuFactory->createMenu($name, $options); // Make sure the abstract menu has the instance too, is needed for BC and will be removed with version 5 AbstractMenu::$instances[$name] = $this->menus[$name]; return $this->menus[$name]; return $this->template->template; } // Get the id of the active menu item $menu = $this->getMenu(); $item = $menu->getActive(); if (!$item) { $item = $menu->getItem($this->input->getInt('Itemid', null)); } public function render(\Throwable $error): string { $app = Factory::getApplication(); // Get the current template from the application $template = $app->getTemplate(true); // Push the error object into the document $this->getDocument()->setError($error); // Add registry file for the template asset // Reset the document object in the factory, this gives us a clean slate and lets everything render properly Factory::$document = $renderer->getDocument(); Factory::getApplication()->loadDocument(Factory::$document); $data = $renderer->render($error); // If nothing was rendered, just use the message from the Exception if (empty($data)) { $data = $error->getMessage(); } * @since 3.10.0 */ public static function handleException(\Throwable $error) { static::logException($error); static::render($error); } /** * Render the error page based on an exception. * ); // Trigger the onError event. $this->triggerEvent('onError', $event); ExceptionHandler::handleException($event->getError()); } // Trigger the onBeforeRespond event. $this->getDispatcher()->dispatch('onBeforeRespond');// Set the application as global app\Joomla\CMS\Factory::$application = $app;// Execute the application.$app->execute(); * define() is used rather than "const" to not error for PHP 5.2 and lower */define('_JEXEC', 1);// Run the application - All executable code should be triggered through this filerequire_once dirname(__FILE__) . '/includes/app.php'; $params = ComponentHelper::getParams('com_languages'); $options['language'] = $params->get('site', $this->get('language', 'en-GB')); } // One last check to make sure we have something if (!LanguageHelper::exists($options['language'])) { $lang = $this->config->get('language', 'en-GB'); if (LanguageHelper::exists($lang)) { $options['language'] = $lang; } else { * @since 3.2 */ protected function doExecute() { // Initialise the application $this->initialiseApp(); // Mark afterInitialise in the profiler. JDEBUG ? $this->profiler->mark('afterInitialise') : null; // Route the application $this->sanityCheckSystemVariables(); $this->setupLogging(); $this->createExtensionNamespaceMap(); // Perform application routines. $this->doExecute(); // If we have an application document object, render it. if ($this->document instanceof \Joomla\CMS\Document\Document) { // Render the application output. $this->render();// Set the application as global app\Joomla\CMS\Factory::$application = $app;// Execute the application.$app->execute(); * define() is used rather than "const" to not error for PHP 5.2 and lower */define('_JEXEC', 1);// Run the application - All executable code should be triggered through this filerequire_once dirname(__FILE__) . '/includes/app.php';|
[2/2]
ClassNotFoundError
|
|---|
Symfony\Component\ErrorHandler\Error\ClassNotFoundError:
Attempted to load class "LanguageHelper" from namespace "Joomla\CMS\Language".
Did you forget a "use" statement for another namespace?
at /datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/libraries/src/Language/Language.php:203
at Joomla\CMS\Language\Language->__construct('en-GB', false)
(/datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/libraries/src/Language/LanguageFactory.php:35)
at Joomla\CMS\Language\LanguageFactory->createLanguage(null, false)
(/datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/libraries/src/Language/CachingLanguageFactory.php:45)
at Joomla\CMS\Language\CachingLanguageFactory->createLanguage(null, false)
(/datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/libraries/src/Factory.php:742)
at Joomla\CMS\Factory::createLanguage()
(/datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/libraries/src/Factory.php:305)
at Joomla\CMS\Factory::getLanguage()
(/datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/libraries/src/Menu/SiteMenu.php:72)
at Joomla\CMS\Menu\SiteMenu->__construct(array('app' => object(SiteApplication), 'db' => object(MysqliDriver)))
(/datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/libraries/src/Menu/MenuFactory.php:55)
at Joomla\CMS\Menu\MenuFactory->createMenu('site', array('app' => object(SiteApplication), 'db' => object(MysqliDriver)))
(/datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/libraries/src/Application/CMSApplication.php:523)
at Joomla\CMS\Application\CMSApplication->getMenu()
(/datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/libraries/src/Application/SiteApplication.php:418)
at Joomla\CMS\Application\SiteApplication->getTemplate(true)
(/datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/libraries/src/Error/Renderer/HtmlRenderer.php:50)
at Joomla\CMS\Error\Renderer\HtmlRenderer->render(object(Error))
(/datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/libraries/src/Exception/ExceptionHandler.php:126)
at Joomla\CMS\Exception\ExceptionHandler::render(object(Error))
(/datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/libraries/src/Exception/ExceptionHandler.php:72)
at Joomla\CMS\Exception\ExceptionHandler::handleException(object(Error))
(/datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/libraries/src/Application/CMSApplication.php:322)
at Joomla\CMS\Application\CMSApplication->execute()
(/datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/includes/app.php:61)
at require_once('/datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/includes/app.php')
(/datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/index.php:32)
|
|
[1/2]
Error
|
|---|
Error:
Class "Joomla\CMS\Language\LanguageHelper" not found
at /datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/libraries/src/Application/SiteApplication.php:623
at Joomla\CMS\Application\SiteApplication->initialiseApp()
(/datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/libraries/src/Application/SiteApplication.php:226)
at Joomla\CMS\Application\SiteApplication->doExecute()
(/datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/libraries/src/Application/CMSApplication.php:293)
at Joomla\CMS\Application\CMSApplication->execute()
(/datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/includes/app.php:61)
at require_once('/datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/includes/app.php')
(/datas/yulpa173848/sites/2024.samclap-ufolep.fr/htdocs/index.php:32)
|