Files
server/usr/share/psa-pear/pear/php/Horde/Registry/Nlsconfig.php
2026-01-07 20:52:11 +01:00

157 lines
4.4 KiB
PHP

<?php
/**
* Copyright 2010-2017 Horde LLC (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.horde.org/licenses/lgpl21.
*
* @author Michael Slusarz <slusarz@horde.org>
* @category Horde
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @package Core
*/
/**
* Interface to NLS configuration.
*
* @author Michael Slusarz <slusarz@horde.org>
* @category Horde
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @package Core
*/
class Horde_Registry_Nlsconfig
{
/**
* The cached configuration data.
*
* @var array
*/
protected $_config;
/**
*/
public function __get($name)
{
global $language, $registry, $session;
/* These entries can be cached in the session. */
$cached = array(
'curr_charset',
'curr_default',
'curr_emails',
'curr_multibyte',
'curr_rtl'
);
if (in_array($name, $cached) &&
$session->exists('horde', 'nls/' . $name)) {
return $session->get('horde', 'nls/' . $name);
}
if (!isset($this->_config)) {
$this->_config = $registry->loadConfigFile('nls.php', 'horde_nls_config', 'horde')->config['horde_nls_config'];
}
switch ($name) {
case 'aliases':
case 'charsets':
case 'encodings':
case 'emails':
case 'languages':
case 'multibyte':
case 'rtl':
case 'spelling':
$ret = isset($this->_config[$name])
? $this->_config[$name]
: array();
break;
case 'charsets_sort':
$ret = $this->charsets;
natcasesort($ret);
break;
case 'curr_charset':
/* Return charset for the current language. */
$ret = isset($this->_config['charsets'][$language])
? $this->_config['charsets'][$language]
: null;
break;
case 'curr_default':
/* The default langauge, as specified by the config file. */
$ret = isset($this->_config['defaults']['language'])
? $this->_config['defaults']['language']
: null;
break;
case 'curr_emails':
/* Return e-mail charset for the current language. */
$ret = isset($this->_config['emails'][$language])
? $this->_config['emails'][$language]
: null;
break;
case 'curr_multibyte':
/* Is the current language charset multibyte? */
$ret = isset($this->_config['multibyte'][$registry->getLanguageCharset()]);
break;
case 'curr_rtl':
/* Is the current language RTL? */
$ret = isset($this->_config['rtl'][$language]);
break;
case 'encodings_sort':
$ret = $this->encodings;
asort($ret);
break;
default:
$ret = null;
break;
}
if (in_array($name, $cached)) {
$session->set('horde', 'nls/' . $name, $ret);
}
return $ret;
}
/**
* Check whether a language string is valid.
*
* @param string $lang The language to check.
*
* @return boolean Whether the language is valid.
*/
public function validLang($lang)
{
if (!$GLOBALS['session']->exists('horde', 'nls/valid_' . $lang)) {
$valid = false;
if (isset($this->languages[$lang])) {
$locale = setlocale(LC_ALL, 0);
if (setlocale(LC_ALL, $lang . '.UTF-8')) {
$valid = true;
}
if (strlen($locale) <= 255) {
setlocale(LC_ALL, $locale);
} else {
// Locale length is limited to 255 characters.
foreach (explode(';', $locale) as $lc) {
list($category, $catLocale) = explode('=', $lc);
if (defined($category)) {
setlocale(constant($category), $catLocale);
}
}
}
}
$GLOBALS['session']->set('horde', 'nls/valid_' . $lang, $valid);
}
return $GLOBALS['session']->get('horde', 'nls/valid_' . $lang);
}
}