From: Janusz Dobrowolski Date: Sat, 27 Dec 2014 15:23:53 +0000 (+0100) Subject: Cleanup: changed language.php, gettext.php file names to *.inc X-Git-Tag: v2.4.2~19^2~301 X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=commitdiff_plain;h=f60b8293f0316ef03429af363b30c753532a67d6;p=fa-stable.git Cleanup: changed language.php, gettext.php file names to *.inc --- diff --git a/includes/lang/gettext.inc b/includes/lang/gettext.inc new file mode 100644 index 00000000..72f24600 --- /dev/null +++ b/includes/lang/gettext.inc @@ -0,0 +1,572 @@ + +// + +//require_once "PEAR.php"; + +define('GETTEXT_NATIVE', 1); +define('GETTEXT_PHP', 2); + +function get_text_init($managerType = GETTEXT_NATIVE) { + global $GetText; + if (!isset($GetText)) { + + if ($managerType == GETTEXT_NATIVE) + { + if (function_exists('gettext')) + { + $GetText = new gettext_native_support(); + return; + } + } + // fail back to php support + $GetText = new gettext_php_support(); + } +} + +function raise_error($str) { + error_log($str); + return 1; +} + +function is_error($err) { + return $err > 0; +} + +/** +* Interface to gettext native support. +* +* @author Laurent Bedubourg +* @access private +*/ +class gettext_native_support +{ + var $_interpolation_vars = array(); + var $domain_path; + + /** + * Set gettext language code. + * @throws GetText_Error + */ + function set_language($lang_code, $encoding) + { + putenv("LANG=$lang_code"); + putenv("LC_ALL=$lang_code"); + putenv("LANGUAGE=$lang_code"); + + //$set = setlocale(LC_ALL, "$lang_code"); + //$set = setlocale(LC_ALL, "$encoding"); + + // cover a couple of country/encoding variants + $up = strtoupper($encoding); + $low = strtolower($encoding); + $lshort = strtr($up, '-',''); + $ushort = strtr($low, '-',''); + + if ($lang_code == 'C') + $set = setlocale(LC_ALL,'C'); + else + $set = setlocale(LC_ALL, $lang_code.".".$encoding, + $lang_code.".".$up, $lang_code.".".$low, + $lang_code.".".$ushort, $lang_code.".".$lshort); + + setlocale(LC_NUMERIC, 'C'); // important for numeric presentation etc. + if ($set === false) + { + if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') // don't do this test if server is WIN + return 0; + $str = sprintf('language code "%s", encoding "%s" not supported by your system', + $lang_code, $encoding); + //$err = new GetText_Error($str); + //return PEAR::raise_error($err); + return raise_error("1 " . $str); + } + //return 0; + } + /** + * Check system support for given language nedded for gettext. + */ + function check_support($lang_code, $encoding) + { + if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') // don't do this test if server is WIN + return true; + $old = setlocale(LC_CTYPE, '0'); // LC_MESSAGES does not exist on Win + $up = strtoupper($encoding); + $low = strtolower($encoding); + $lshort = strtr($up, '-',''); + $ushort = strtr($low, '-',''); + + $test = setlocale(LC_ALL, + $lang_code.".".$encoding, + $lang_code.".".$up, + $lang_code.".".$low, + $lang_code.".".$ushort, + $lang_code.".".$lshort) !== false; + setlocale(LC_ALL, $old); + setlocale(LC_NUMERIC, 'C'); + return $test; + } + /** + * Add a translation domain. + */ + function add_domain($domain, $path=false, $version='') + { + if ($path === false) + $path = $this->domain_path; + if ($path === false) + $path = "./locale"; + if ($domain == "") + $domain = "?"; + if ($version) { + // To avoid need for apache server restart after change of *.mo file + // we have to include file version as part of filename. + // This is alternative naming convention: $domain = $version.'/'.$domain; + $domain .= '-'.$version; + } + bindtextdomain($domain, $path); + //bind_textdomain_codeset($domain, $encoding); + textdomain($domain); + } + + /** + * Retrieve translation for specified key. + * + * @access private + */ + function _get_translation($key) + { + return gettext($key); + } + + + /** + * Reset interpolation variables. + */ + function reset() + { + $this->_interpolation_vars = array(); + } + + /** + * Set an interpolation variable. + */ + function set_var($key, $value) + { + $this->_interpolation_vars[$key] = $value; + } + + /** + * Set an associative array of interpolation variables. + */ + function set_vars($hash) + { + $this->_interpolation_vars = array_merge($this->_interpolation_vars, + $hash); + } + + /** + * Retrieve translation for specified key. + * + * @param string $key -- gettext msgid + * @throws GetText_Error + */ + function gettext($key) + { + $value = $this->_get_translation($key); + if ($value === false) { + $str = sprintf('Unable to locate gettext key "%s"', $key); + //$err = new GetText_Error($str); + //return PEAR::raise_error($err); + return raise_error("2 " . $str); + } + + while (preg_match('/\$\{(.*?)\}/sm', $value, $m)) { + list($src, $var) = $m; + + // retrieve variable to interpolate in context, throw an exception + // if not found. + $var2 = $this->_get_var($var); + if ($var2 === false) { + $str = sprintf('Interpolation error, var "%s" not set', $var); + //$err = new GetText_Error($str); + //return PEAR::raise_error($err); + return raise_error("3 " . $str); + } + $value = str_replace($src, $var2, $value); + } + return $value; + } + + /** + * Retrieve an interpolation variable value. + * + * @return mixed + * @access private + */ + function _get_var($name) + { + if (!array_key_exists($name, $this->_interpolation_vars)) { + return false; + } + return $this->_interpolation_vars[$name]; + } +} + + +/** +* Implementation of get_text support for PHP. +* +* This implementation is abble to cache .po files into php files returning the +* domain translation hashtable. +* +* @access private +* @author Laurent Bedubourg +*/ +class gettext_php_support extends gettext_native_support +{ + var $_path = 'locale/'; + var $_lang_code = false; + var $_domains = array(); + var $_end = -1; + var $_jobs = array(); + + /** + * Set the translation domain. + * + * @param string $lang_code -- language code + * @throws GetText_Error + */ + function set_language($lang_code, $encoding) + { + // if language already set, try to reload domains + if ($this->_lang_code !== false and $this->_lang_code != $lang_code) + { + foreach ($this->_domains as $domain) + { + $this->_jobs[] = array($domain->name, $domain->path); + } + $this->_domains = array(); + $this->_end = -1; + } + + $this->_lang_code = $lang_code; + + // this allow us to set the language code after + // domain list. + while (count($this->_jobs) > 0) + { + list($domain, $path) = array_shift($this->_jobs); + $err = $this->add_domain($domain, $path); + // error raised, break jobs + /*if (PEAR::is_error($err)) { + return $err; + }*/ + if (is_error($err)) + { + return $err; + } + } + } + /** + * Check system support for given language (dummy). + */ + function check_support($lang_code, $encoding) + { + return true; + } + /** + * Add a translation domain. + * + * @param string $domain -- Domain name + * @param string $path optional -- Repository path + * @throws GetText_Error + */ + function add_domain($domain, $path = false, $version ='') + { + if ($path === false) + $path = $this->domain_path; + if ($path === false) + $path = "./locale"; + + if ($version) { + $domain .= '-'.$version; + } + + if (array_key_exists($domain, $this->_domains)) + { + return; + } + + if (!$this->_lang_code) + { + $this->_jobs[] = array($domain, $path); + return; + } + // Don't fill the domains with false data, it increased the error.log + if (strpos($domain, $this->_lang_code) === false) + return; + + $err = $this->_load_domain($domain, $path); + if ($err != 0) + { + return $err; + } + + $this->_end++; + } + + /** + * Load a translation domain file. + * + * This method cache the translation hash into a php file unless + * GETTEXT_NO_CACHE is defined. + * + * @param string $domain -- Domain name + * @param string $path optional -- Repository + * @throws GetText_Error + * @access private + */ + function _load_domain($domain, $path = "./locale") + { + $src_domain = $path . "/$this->_lang_code/LC_MESSAGES/$domain.po"; + $php_domain = $path . "/$this->_lang_code/LC_MESSAGES/$domain.php"; + + if (!file_exists($src_domain)) + { + $str = sprintf('Domain file "%s" not found.', $src_domain); + //$err = new GetText_Error($str); + //return PEAR::raise_error($err); + return raise_error("4 " . $str); + } + + $d = new gettext_domain(); + $d->name = $domain; + $d->path = $path; + if (!file_exists($php_domain) || (filemtime($php_domain) < filemtime($src_domain))) + { + + // parse and compile translation table + $parser = new gettext_php_support_parser(); + $hash = $parser->parse($src_domain); + if (!defined('GETTEXT_NO_CACHE')) + { + $comp = new gettext_php_support_compiler(); + $err = $comp->compile($hash, $src_domain); + /*if (PEAR::is_error($err)) { + return $err; + }*/ + if (is_error($err)) + { + return $err; + } + } + $d->_keys = $hash; + } + else + { + $d->_keys = include $php_domain; + } + $this->_domains[] = &$d; + } + + /** + * Implementation of gettext message retrieval. + */ + function _get_translation($key) + { + for ($i = $this->_end; $i >= 0; $i--) + { + if ($this->_domains[$i]->has_key($key)) + { + return $this->_domains[$i]->get($key); + } + } + return $key; + } +} + +/** +* Class representing a domain file for a specified language. +* +* @access private +* @author Laurent Bedubourg +*/ +class gettext_domain +{ + var $name; + var $path; + + var $_keys = array(); + + function has_key($key) + { + return array_key_exists($key, $this->_keys); + } + + function get($key) + { + return $this->_keys[$key]; + } +} + +/** +* This class is used to parse gettext '.po' files into php associative arrays. +* +* @access private +* @author Laurent Bedubourg +*/ +class gettext_php_support_parser +{ + var $_hash = array(); + var $_current_key; + var $_current_value; + + /** + * Parse specified .po file. + * + * @return hashtable + * @throws GetText_Error + */ + function parse($file) + { + $this->_hash = array(); + $this->_current_key = false; + $this->_current_value = ""; + + if (!file_exists($file)) + { + $str = sprintf('Unable to locate file "%s"', $file); + //$err = new GetText_Error($str); + //return PEAR::raise_error($err); + return raise_error($str); + } + $i = 0; + $lines = file($file); + foreach ($lines as $line) + { + $this->_parse_line($line, ++$i); + } + $this->_store_key(); + + return $this->_hash; + } + + /** + * Parse one po line. + * + * @access private + */ + function _parse_line($line, $nbr) + { + $line = str_replace("\\\"", "'", $line); // Should be inside preg_match, but I couldn't find the solution. This works. + if (preg_match('/^\s*?#/', $line)) { return; } + if (preg_match('/^\s*?msgid \"(.*?)(?!<\\\)\"/', $line, $m)) { + $this->_store_key(); + $this->_current_key = $m[1]; + return; + } + if (preg_match('/^\s*?msgstr \"(.*?)(?!<\\\)\"/', $line, $m)) { + $this->_current_value .= $m[1]; + return; + } + if (preg_match('/^\s*?\"(.*?)(?!<\\\)\"/', $line, $m)) { + $this->_current_value .= $m[1]; + return; + } + } + + /** + * Store last key/value pair into building hashtable. + * + * @access private + */ + function _store_key() + { + if ($this->_current_key === false) return; + $this->_current_value = str_replace('\\n', "\n", $this->_current_value); + $this->_hash[$this->_current_key] = $this->_current_value; + $this->_current_key = false; + $this->_current_value = ""; + } +} + + +/** +* This class write a php file from a gettext hashtable. +* +* The produced file return the translation hashtable on include. +* +* @throws GetText_Error +* @access private +* @author Laurent Bedubourg +*/ +class gettext_php_support_compiler +{ + /** + * Write hash in an includable php file. + */ + function compile(&$hash, $source_path) + { + $dest_path = preg_replace('/\.po$/', '.php', $source_path); + $fp = @fopen($dest_path, "w"); + if (!$fp) + { + $str = sprintf('Unable to open "%s" in write mode.', $dest_path); + //$err = new GetText_Error($str); + //return PEAR::raise_error($err); + return raise_error($str); + } + fwrite($fp, ' $value) + { + $key = str_replace("'", "\\'", $key); + $value = str_replace("'", "\\'", $value); + fwrite($fp, ' \'' . $key . '\' => \'' . $value . "',\n"); + } + fwrite($fp, ');' . "\n"); + fwrite($fp, '?>'); + fclose($fp); + } +} + +/* + Set current gettext domain path +*/ +function set_ext_domain($path='') { + global $path_to_root, $GetText; + static $domain_stack = array(''); + + if ($path) // save path on domain stack + array_unshift($domain_stack, $path); + else + { + array_shift($domain_stack); + $path = $domain_stack[0]; + } + + $lang_path = $path_to_root . ($path ? '/' : '') .$path.'/lang'; + // ignore change when extension does not provide translation structure and test for valid gettext. + if (file_exists($lang_path) && isset($GetText)) + $GetText->add_domain($_SESSION['language']->code, + $lang_path, $path ? '' : $_SESSION['language']->version); +} +?> diff --git a/includes/lang/gettext.php b/includes/lang/gettext.php deleted file mode 100644 index 72f24600..00000000 --- a/includes/lang/gettext.php +++ /dev/null @@ -1,572 +0,0 @@ - -// - -//require_once "PEAR.php"; - -define('GETTEXT_NATIVE', 1); -define('GETTEXT_PHP', 2); - -function get_text_init($managerType = GETTEXT_NATIVE) { - global $GetText; - if (!isset($GetText)) { - - if ($managerType == GETTEXT_NATIVE) - { - if (function_exists('gettext')) - { - $GetText = new gettext_native_support(); - return; - } - } - // fail back to php support - $GetText = new gettext_php_support(); - } -} - -function raise_error($str) { - error_log($str); - return 1; -} - -function is_error($err) { - return $err > 0; -} - -/** -* Interface to gettext native support. -* -* @author Laurent Bedubourg -* @access private -*/ -class gettext_native_support -{ - var $_interpolation_vars = array(); - var $domain_path; - - /** - * Set gettext language code. - * @throws GetText_Error - */ - function set_language($lang_code, $encoding) - { - putenv("LANG=$lang_code"); - putenv("LC_ALL=$lang_code"); - putenv("LANGUAGE=$lang_code"); - - //$set = setlocale(LC_ALL, "$lang_code"); - //$set = setlocale(LC_ALL, "$encoding"); - - // cover a couple of country/encoding variants - $up = strtoupper($encoding); - $low = strtolower($encoding); - $lshort = strtr($up, '-',''); - $ushort = strtr($low, '-',''); - - if ($lang_code == 'C') - $set = setlocale(LC_ALL,'C'); - else - $set = setlocale(LC_ALL, $lang_code.".".$encoding, - $lang_code.".".$up, $lang_code.".".$low, - $lang_code.".".$ushort, $lang_code.".".$lshort); - - setlocale(LC_NUMERIC, 'C'); // important for numeric presentation etc. - if ($set === false) - { - if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') // don't do this test if server is WIN - return 0; - $str = sprintf('language code "%s", encoding "%s" not supported by your system', - $lang_code, $encoding); - //$err = new GetText_Error($str); - //return PEAR::raise_error($err); - return raise_error("1 " . $str); - } - //return 0; - } - /** - * Check system support for given language nedded for gettext. - */ - function check_support($lang_code, $encoding) - { - if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') // don't do this test if server is WIN - return true; - $old = setlocale(LC_CTYPE, '0'); // LC_MESSAGES does not exist on Win - $up = strtoupper($encoding); - $low = strtolower($encoding); - $lshort = strtr($up, '-',''); - $ushort = strtr($low, '-',''); - - $test = setlocale(LC_ALL, - $lang_code.".".$encoding, - $lang_code.".".$up, - $lang_code.".".$low, - $lang_code.".".$ushort, - $lang_code.".".$lshort) !== false; - setlocale(LC_ALL, $old); - setlocale(LC_NUMERIC, 'C'); - return $test; - } - /** - * Add a translation domain. - */ - function add_domain($domain, $path=false, $version='') - { - if ($path === false) - $path = $this->domain_path; - if ($path === false) - $path = "./locale"; - if ($domain == "") - $domain = "?"; - if ($version) { - // To avoid need for apache server restart after change of *.mo file - // we have to include file version as part of filename. - // This is alternative naming convention: $domain = $version.'/'.$domain; - $domain .= '-'.$version; - } - bindtextdomain($domain, $path); - //bind_textdomain_codeset($domain, $encoding); - textdomain($domain); - } - - /** - * Retrieve translation for specified key. - * - * @access private - */ - function _get_translation($key) - { - return gettext($key); - } - - - /** - * Reset interpolation variables. - */ - function reset() - { - $this->_interpolation_vars = array(); - } - - /** - * Set an interpolation variable. - */ - function set_var($key, $value) - { - $this->_interpolation_vars[$key] = $value; - } - - /** - * Set an associative array of interpolation variables. - */ - function set_vars($hash) - { - $this->_interpolation_vars = array_merge($this->_interpolation_vars, - $hash); - } - - /** - * Retrieve translation for specified key. - * - * @param string $key -- gettext msgid - * @throws GetText_Error - */ - function gettext($key) - { - $value = $this->_get_translation($key); - if ($value === false) { - $str = sprintf('Unable to locate gettext key "%s"', $key); - //$err = new GetText_Error($str); - //return PEAR::raise_error($err); - return raise_error("2 " . $str); - } - - while (preg_match('/\$\{(.*?)\}/sm', $value, $m)) { - list($src, $var) = $m; - - // retrieve variable to interpolate in context, throw an exception - // if not found. - $var2 = $this->_get_var($var); - if ($var2 === false) { - $str = sprintf('Interpolation error, var "%s" not set', $var); - //$err = new GetText_Error($str); - //return PEAR::raise_error($err); - return raise_error("3 " . $str); - } - $value = str_replace($src, $var2, $value); - } - return $value; - } - - /** - * Retrieve an interpolation variable value. - * - * @return mixed - * @access private - */ - function _get_var($name) - { - if (!array_key_exists($name, $this->_interpolation_vars)) { - return false; - } - return $this->_interpolation_vars[$name]; - } -} - - -/** -* Implementation of get_text support for PHP. -* -* This implementation is abble to cache .po files into php files returning the -* domain translation hashtable. -* -* @access private -* @author Laurent Bedubourg -*/ -class gettext_php_support extends gettext_native_support -{ - var $_path = 'locale/'; - var $_lang_code = false; - var $_domains = array(); - var $_end = -1; - var $_jobs = array(); - - /** - * Set the translation domain. - * - * @param string $lang_code -- language code - * @throws GetText_Error - */ - function set_language($lang_code, $encoding) - { - // if language already set, try to reload domains - if ($this->_lang_code !== false and $this->_lang_code != $lang_code) - { - foreach ($this->_domains as $domain) - { - $this->_jobs[] = array($domain->name, $domain->path); - } - $this->_domains = array(); - $this->_end = -1; - } - - $this->_lang_code = $lang_code; - - // this allow us to set the language code after - // domain list. - while (count($this->_jobs) > 0) - { - list($domain, $path) = array_shift($this->_jobs); - $err = $this->add_domain($domain, $path); - // error raised, break jobs - /*if (PEAR::is_error($err)) { - return $err; - }*/ - if (is_error($err)) - { - return $err; - } - } - } - /** - * Check system support for given language (dummy). - */ - function check_support($lang_code, $encoding) - { - return true; - } - /** - * Add a translation domain. - * - * @param string $domain -- Domain name - * @param string $path optional -- Repository path - * @throws GetText_Error - */ - function add_domain($domain, $path = false, $version ='') - { - if ($path === false) - $path = $this->domain_path; - if ($path === false) - $path = "./locale"; - - if ($version) { - $domain .= '-'.$version; - } - - if (array_key_exists($domain, $this->_domains)) - { - return; - } - - if (!$this->_lang_code) - { - $this->_jobs[] = array($domain, $path); - return; - } - // Don't fill the domains with false data, it increased the error.log - if (strpos($domain, $this->_lang_code) === false) - return; - - $err = $this->_load_domain($domain, $path); - if ($err != 0) - { - return $err; - } - - $this->_end++; - } - - /** - * Load a translation domain file. - * - * This method cache the translation hash into a php file unless - * GETTEXT_NO_CACHE is defined. - * - * @param string $domain -- Domain name - * @param string $path optional -- Repository - * @throws GetText_Error - * @access private - */ - function _load_domain($domain, $path = "./locale") - { - $src_domain = $path . "/$this->_lang_code/LC_MESSAGES/$domain.po"; - $php_domain = $path . "/$this->_lang_code/LC_MESSAGES/$domain.php"; - - if (!file_exists($src_domain)) - { - $str = sprintf('Domain file "%s" not found.', $src_domain); - //$err = new GetText_Error($str); - //return PEAR::raise_error($err); - return raise_error("4 " . $str); - } - - $d = new gettext_domain(); - $d->name = $domain; - $d->path = $path; - if (!file_exists($php_domain) || (filemtime($php_domain) < filemtime($src_domain))) - { - - // parse and compile translation table - $parser = new gettext_php_support_parser(); - $hash = $parser->parse($src_domain); - if (!defined('GETTEXT_NO_CACHE')) - { - $comp = new gettext_php_support_compiler(); - $err = $comp->compile($hash, $src_domain); - /*if (PEAR::is_error($err)) { - return $err; - }*/ - if (is_error($err)) - { - return $err; - } - } - $d->_keys = $hash; - } - else - { - $d->_keys = include $php_domain; - } - $this->_domains[] = &$d; - } - - /** - * Implementation of gettext message retrieval. - */ - function _get_translation($key) - { - for ($i = $this->_end; $i >= 0; $i--) - { - if ($this->_domains[$i]->has_key($key)) - { - return $this->_domains[$i]->get($key); - } - } - return $key; - } -} - -/** -* Class representing a domain file for a specified language. -* -* @access private -* @author Laurent Bedubourg -*/ -class gettext_domain -{ - var $name; - var $path; - - var $_keys = array(); - - function has_key($key) - { - return array_key_exists($key, $this->_keys); - } - - function get($key) - { - return $this->_keys[$key]; - } -} - -/** -* This class is used to parse gettext '.po' files into php associative arrays. -* -* @access private -* @author Laurent Bedubourg -*/ -class gettext_php_support_parser -{ - var $_hash = array(); - var $_current_key; - var $_current_value; - - /** - * Parse specified .po file. - * - * @return hashtable - * @throws GetText_Error - */ - function parse($file) - { - $this->_hash = array(); - $this->_current_key = false; - $this->_current_value = ""; - - if (!file_exists($file)) - { - $str = sprintf('Unable to locate file "%s"', $file); - //$err = new GetText_Error($str); - //return PEAR::raise_error($err); - return raise_error($str); - } - $i = 0; - $lines = file($file); - foreach ($lines as $line) - { - $this->_parse_line($line, ++$i); - } - $this->_store_key(); - - return $this->_hash; - } - - /** - * Parse one po line. - * - * @access private - */ - function _parse_line($line, $nbr) - { - $line = str_replace("\\\"", "'", $line); // Should be inside preg_match, but I couldn't find the solution. This works. - if (preg_match('/^\s*?#/', $line)) { return; } - if (preg_match('/^\s*?msgid \"(.*?)(?!<\\\)\"/', $line, $m)) { - $this->_store_key(); - $this->_current_key = $m[1]; - return; - } - if (preg_match('/^\s*?msgstr \"(.*?)(?!<\\\)\"/', $line, $m)) { - $this->_current_value .= $m[1]; - return; - } - if (preg_match('/^\s*?\"(.*?)(?!<\\\)\"/', $line, $m)) { - $this->_current_value .= $m[1]; - return; - } - } - - /** - * Store last key/value pair into building hashtable. - * - * @access private - */ - function _store_key() - { - if ($this->_current_key === false) return; - $this->_current_value = str_replace('\\n', "\n", $this->_current_value); - $this->_hash[$this->_current_key] = $this->_current_value; - $this->_current_key = false; - $this->_current_value = ""; - } -} - - -/** -* This class write a php file from a gettext hashtable. -* -* The produced file return the translation hashtable on include. -* -* @throws GetText_Error -* @access private -* @author Laurent Bedubourg -*/ -class gettext_php_support_compiler -{ - /** - * Write hash in an includable php file. - */ - function compile(&$hash, $source_path) - { - $dest_path = preg_replace('/\.po$/', '.php', $source_path); - $fp = @fopen($dest_path, "w"); - if (!$fp) - { - $str = sprintf('Unable to open "%s" in write mode.', $dest_path); - //$err = new GetText_Error($str); - //return PEAR::raise_error($err); - return raise_error($str); - } - fwrite($fp, ' $value) - { - $key = str_replace("'", "\\'", $key); - $value = str_replace("'", "\\'", $value); - fwrite($fp, ' \'' . $key . '\' => \'' . $value . "',\n"); - } - fwrite($fp, ');' . "\n"); - fwrite($fp, '?>'); - fclose($fp); - } -} - -/* - Set current gettext domain path -*/ -function set_ext_domain($path='') { - global $path_to_root, $GetText; - static $domain_stack = array(''); - - if ($path) // save path on domain stack - array_unshift($domain_stack, $path); - else - { - array_shift($domain_stack); - $path = $domain_stack[0]; - } - - $lang_path = $path_to_root . ($path ? '/' : '') .$path.'/lang'; - // ignore change when extension does not provide translation structure and test for valid gettext. - if (file_exists($lang_path) && isset($GetText)) - $GetText->add_domain($_SESSION['language']->code, - $lang_path, $path ? '' : $_SESSION['language']->version); -} -?> diff --git a/includes/lang/language.inc b/includes/lang/language.inc new file mode 100644 index 00000000..752c7e44 --- /dev/null +++ b/includes/lang/language.inc @@ -0,0 +1,93 @@ +. +***********************************************************************/ +// Prevent register_globals vulnerability +if (isset($_GET['path_to_root']) || isset($_POST['path_to_root'])) + die("Restricted access"); +@include_once($path_to_root . "/lang/installed_languages.inc"); +include_once($path_to_root . "/includes/lang/gettext.php"); + +class language +{ + var $name; + var $code; // eg. ar_EG, en_GB + var $encoding; // eg. UTF-8, CP1256, ISO8859-1 + var $dir; // Currently support for Left-to-Right (ltr) and + // Right-To-Left (rtl) + var $version; // lang package version + var $is_locale_file; + + function language($name, $code, $encoding, $dir = 'ltr') + { + global $dflt_lang; + + $this->name = $name; + $this->code = $code ? $code : ($dflt_lang ? $dflt_lang : 'C'); + $this->encoding = $encoding; + $this->dir = $dir; + } + + function get_language_dir() + { + return "lang/" . $this->code; + } + + function get_current_language_dir() + { + $lang = $_SESSION['language']; + return "lang/" . $lang->code; + } + + function set_language($code) + { + global $path_to_root, $installed_languages, $GetText; + + $lang = array_search_value($code, $installed_languages, 'code'); + $changed = $this->code != $code || $this->version != @$lang['version']; + + if ($lang && $changed) + { + $this->name = $lang['name']; + $this->code = $lang['code']; + $this->encoding = $lang['encoding']; + $this->version = @$lang['version']; + $this->dir = (isset($lang['rtl']) && $lang['rtl'] === true) ? 'rtl' : 'ltr'; + $locale = $path_to_root . "/lang/" . $this->code . "/locale.inc"; + $this->is_locale_file = file_exists($locale); + } + + $GetText->set_language($this->code, $this->encoding); + $GetText->add_domain($this->code, $path_to_root . "/lang", $this->version); + + // Necessary for ajax calls. Due to bug in php 4.3.10 for this + // version set globally in php.ini + ini_set('default_charset', $this->encoding); + + if (isset($_SESSION['wa_current_user']) && $_SESSION['wa_current_user']->logged_in() && isset($_SESSION['App']) && $changed) + $_SESSION['App']->init(); // refresh menu + } +} + +if (!function_exists("_")) +{ + function _($text) + { + global $GetText; + if (!isset($GetText)) // Don't allow using gettext if not is net. + return $text; + + $retVal = $GetText->gettext($text); + if ($retVal == "") + return $text; + return $retVal; + } +} +?> \ No newline at end of file diff --git a/includes/lang/language.php b/includes/lang/language.php deleted file mode 100644 index 752c7e44..00000000 --- a/includes/lang/language.php +++ /dev/null @@ -1,93 +0,0 @@ -. -***********************************************************************/ -// Prevent register_globals vulnerability -if (isset($_GET['path_to_root']) || isset($_POST['path_to_root'])) - die("Restricted access"); -@include_once($path_to_root . "/lang/installed_languages.inc"); -include_once($path_to_root . "/includes/lang/gettext.php"); - -class language -{ - var $name; - var $code; // eg. ar_EG, en_GB - var $encoding; // eg. UTF-8, CP1256, ISO8859-1 - var $dir; // Currently support for Left-to-Right (ltr) and - // Right-To-Left (rtl) - var $version; // lang package version - var $is_locale_file; - - function language($name, $code, $encoding, $dir = 'ltr') - { - global $dflt_lang; - - $this->name = $name; - $this->code = $code ? $code : ($dflt_lang ? $dflt_lang : 'C'); - $this->encoding = $encoding; - $this->dir = $dir; - } - - function get_language_dir() - { - return "lang/" . $this->code; - } - - function get_current_language_dir() - { - $lang = $_SESSION['language']; - return "lang/" . $lang->code; - } - - function set_language($code) - { - global $path_to_root, $installed_languages, $GetText; - - $lang = array_search_value($code, $installed_languages, 'code'); - $changed = $this->code != $code || $this->version != @$lang['version']; - - if ($lang && $changed) - { - $this->name = $lang['name']; - $this->code = $lang['code']; - $this->encoding = $lang['encoding']; - $this->version = @$lang['version']; - $this->dir = (isset($lang['rtl']) && $lang['rtl'] === true) ? 'rtl' : 'ltr'; - $locale = $path_to_root . "/lang/" . $this->code . "/locale.inc"; - $this->is_locale_file = file_exists($locale); - } - - $GetText->set_language($this->code, $this->encoding); - $GetText->add_domain($this->code, $path_to_root . "/lang", $this->version); - - // Necessary for ajax calls. Due to bug in php 4.3.10 for this - // version set globally in php.ini - ini_set('default_charset', $this->encoding); - - if (isset($_SESSION['wa_current_user']) && $_SESSION['wa_current_user']->logged_in() && isset($_SESSION['App']) && $changed) - $_SESSION['App']->init(); // refresh menu - } -} - -if (!function_exists("_")) -{ - function _($text) - { - global $GetText; - if (!isset($GetText)) // Don't allow using gettext if not is net. - return $text; - - $retVal = $GetText->gettext($text); - if ($retVal == "") - return $text; - return $retVal; - } -} -?> \ No newline at end of file diff --git a/includes/session.inc b/includes/session.inc index 0bddc33d..15d21d84 100644 --- a/includes/session.inc +++ b/includes/session.inc @@ -363,7 +363,7 @@ set_error_handler('error_handler' /*, errtypes */); include_once($path_to_root . "/includes/current_user.inc"); include_once($path_to_root . "/frontaccounting.php"); include_once($path_to_root . "/admin/db/security_db.inc"); -include_once($path_to_root . "/includes/lang/language.php"); +include_once($path_to_root . "/includes/lang/language.inc"); include_once($path_to_root . "/config_db.php"); include_once($path_to_root . "/includes/ajax.inc"); include_once($path_to_root . "/includes/ui/ui_msgs.inc"); diff --git a/install/isession.inc b/install/isession.inc index 5a9f912e..339c9273 100644 --- a/install/isession.inc +++ b/install/isession.inc @@ -70,7 +70,7 @@ include_once($path_to_root . "/includes/errors.inc"); set_error_handler('error_handler' /*, errtypes */); include_once($path_to_root . "/includes/current_user.inc"); -include_once($path_to_root . "/includes/lang/language.php"); +include_once($path_to_root . "/includes/lang/language.inc"); include_once($path_to_root . "/includes/ajax.inc"); include_once($path_to_root . "/includes/ui/ui_msgs.inc"); include_once($path_to_root . "/includes/prefs/sysprefs.inc");