adding dgettext and dngettext function support and additional $l10n array safety...
authortokul <tokul@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Sun, 31 Jul 2005 12:56:52 +0000 (12:56 +0000)
committertokul <tokul@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Sun, 31 Jul 2005 12:56:52 +0000 (12:56 +0000)
git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@9853 7612ce4b-ef26-0410-bec9-ea0150e637f0

functions/gettext.php
functions/i18n.php
functions/ngettext.php

index 6fc7884d09f93c761061ae6cec56d4e097f1f4cb..e95e80ba5b11952ab6874bec442e37a46c262b37 100644 (file)
@@ -32,7 +32,10 @@ include_once(SM_PATH . 'functions/ngettext.php');
  */
 function _($str) {
     global $l10n, $gettext_domain;
-    if ($l10n[$gettext_domain]->error==1) return $str;
+    if (! isset($l10n[$gettext_domain]) ||
+        ! is_object($l10n[$gettext_domain]) ||
+        $l10n[$gettext_domain]->error==1) 
+        return $str;
     return $l10n[$gettext_domain]->translate($str);
 }
 
@@ -74,4 +77,28 @@ function textdomain($name = false) {
     if ($name) $gettext_domain=$name;
     return $gettext_domain;
 }
+
+/**
+ * Safety check.
+ * Setup where three standard gettext functions don't exist and dgettext() exists.
+ */
+if (! function_exists('dgettext')) {
+    /**
+     * Alternative php dgettext function
+     *
+     * @link http://www.php.net/function.dgettext
+     * @param string $domain Gettext domain
+     * @param string $str English string
+     * @return string translated string
+     * @since 1.5.1
+     */
+    function dgettext($domain, $str) {
+        global $l10n;
+        if (! isset($l10n[$domain]) ||
+            ! is_object($l10n[$domain]) ||
+            $l10n[$domain]->error==1) 
+            return $str;
+        return $l10n[$domain]->translate($str);
+    }
+}
 ?>
\ No newline at end of file
index a04aa6a11e4015c8949412c6c659a0991bb0e72b..be07df93ce963d6f1a7899b05221357d43c0b319 100644 (file)
@@ -1297,5 +1297,23 @@ elseif ($gettext_flags == 0) {
             }
         }
     }
+    if (! function_exists('dgettext')) {
+        /**
+         * Replacement for broken setups.
+         * @ignore
+         */
+        function dgettext($domain,$str) {
+            return $str;
+        }
+    }
+    if (! function_exists('dngettext')) {
+        /**
+         * Replacement for broken setups
+         * @ignore
+         */
+        function dngettext($domain,$str1,$strn,$number) {
+            return ($number==1 ? $str1 : $strn);
+        }
+    }
 }
 ?>
\ No newline at end of file
index 0c7279a0cd23d101be12f2b1f474564577c8a62e..6bbecdcdbed3284e74144d1f3aa72c3dab78a282 100644 (file)
  */
 function ngettext($single, $plural, $number) {
     global $l10n, $gettext_domain;
-    if ($l10n[$gettext_domain]->error==1) return $single;
+    if (! isset($l10n[$gettext_domain]) ||
+        ! is_object($l10n[$gettext_domain]) ||
+        $l10n[$gettext_domain]->error==1)
+        return ($number==1 ? $single : $plural);
     return $l10n[$gettext_domain]->ngettext($single, $plural, $number);
 }
+
+/**
+ * safety check. 
+ * freaky setup where ngettext is not available and dngettext is available.
+ */
+if (! function_exists('dngettext')) {
+    /**
+     * internal dngettext wrapper.
+     *
+     * provides dngettext support
+     * @since 1.5.1
+     * @link http://www.php.net/function.dngettext
+     * @param string $domain Gettext domain
+     * @param string $single English string, singular form
+     * @param string $plural English string, plural form
+     * @param integer $number number that shows used quantity
+     * @return string translated string
+     */
+    function dngettext($domain, $single, $plural, $number) {
+        global $l10n;
+        // Make sure that $number is integer
+        $number = (int) $number;
+        
+        // Make sure that domain is initialized
+        if (! isset($l10n[$domain]) || 
+            ! is_object($l10n[$domain]) || 
+            $l10n[$domain]->error==1)
+            return ($number==1 ? $single : $plural);
+
+        // use ngettext class function
+        return $l10n[$domain]->ngettext($single, $plural, $number);
+    }
+}
 ?>
\ No newline at end of file