define('GETTEXT_PHP', 2);
function get_text_init($managerType = GETTEXT_NATIVE) {
-
- if (!isset($_SESSION['get_text'])) {
+ global $GetText;
+ if (!isset($GetText)) {
if ($managerType == GETTEXT_NATIVE)
{
if (function_exists('gettext'))
{
- $_SESSION['get_text'] = new gettext_native_support();
+ $GetText = new gettext_native_support();
return;
}
}
// fail back to php support
- $_SESSION['get_text'] = new gettext_php_support();
+ $GetText = new gettext_php_support();
}
}
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);
*/
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);
*/
function gettext($key)
{
- $value = $this->_get_translation($key);
+ $value = $this->_get_translation($key);
if ($value === false) {
$str = sprintf('Unable to locate gettext key "%s"', $key);
//$err = new GetText_Error($str);
$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)
{
$d = new gettext_domain();
$d->name = $domain;
$d->path = $path;
-
if (!file_exists($php_domain) || (filemtime($php_domain) < filemtime($src_domain)))
{
*/
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();
Set current gettext domain path
*/
function set_ext_domain($path='') {
- global $path_to_root;
+ 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
- if (file_exists($lang_path))
- $_SESSION['get_text']->add_domain($_SESSION['language']->code,
+ // 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);
}
?>