Move getSig, which can produce error output, after the point where the template syste...
[squirrelmail.git] / include / languages.php
index 592f1f543c5ad267079c6742ce6f4441e550586f..7ecea5b13a5f5e83da7dfcb7045e50ce92685b24 100644 (file)
  * plugins when changing into their own text domain 
  * and back again.
  *
- * Note that plugins using this function must have
+ * Note that if plugins using this function have 
  * their translation files located in the SquirrelMail
- * locale directory.
+ * locale directory, the second argument is optional.
  *
  * @param string $domain_name The name of the text domain 
  *                            (usually the plugin name, or 
  *                            "squirrelmail") being switched to.                 
+ * @param string $directory   The directory that contains 
+ *                            all translations for the domain
+ *                            (OPTIONAL; default is SquirrelMail
+ *                            locale directory).
  *
- * @return void
+ * @return string The name of the text domain that was set
+ *                *BEFORE* it is changed herein - NOTE that
+ *                this differs from PHP's textdomain() 
  *
  * @since 1.5.2 and 1.4.10 
  */
-function sq_change_text_domain($domain_name) {
+function sq_change_text_domain($domain_name, $directory='') {
 
-    global $languages, $sm_notAlias;
     static $domains_already_seen = array();
+    global $gettext_domain;
+    $return_value = $gettext_domain;
 
     // only need to call bindtextdomain() once 
     //
     if (in_array($domain_name, $domains_already_seen)) {
         sq_textdomain($domain_name);
-        return;
+        return $return_value;
     }
 
     $domains_already_seen[] = $domain_name;
 
-    sq_bindtextdomain($domain_name, SM_PATH . 'locale/');
-    sq_textdomain($domain_name);
+    if (empty($directory)) $directory = SM_PATH . 'locale/';
 
-    // set codeset in order to avoid gettext charset conversions
-    if (function_exists('bind_textdomain_codeset') 
-     && isset($languages[$sm_notAlias]['CHARSET'])) {
-
-        // Japanese translation uses different internal charset
-        if ($sm_notAlias == 'ja_JP') {
-            bind_textdomain_codeset ($domain_name, 'EUC-JP');
-        } else {
-            bind_textdomain_codeset ($domain_name, $languages[$sm_notAlias]['CHARSET']);
-        }
+    sq_bindtextdomain($domain_name, $directory);
+    sq_textdomain($domain_name);
 
-    }
+    return $return_value;
 }
 
 /**
@@ -77,14 +75,22 @@ function sq_change_text_domain($domain_name) {
  * Wrapper solves differences between php versions in order to provide
  * ngettext support. Should be used if translation uses ngettext
  * functions.
- * @since 1.5.1
+ *
+ * This also provides a bind_textdomain_codeset call to make sure the
+ * domain's encoding will not be overridden.
+ *
+ * @since 1.4.10 and 1.5.1
  * @param string $domain gettext domain name
- * @param string $dir directory that contains all translations
+ * @param string $dir directory that contains all translations (OPTIONAL;
+ *                    if not specified, defaults to SquirrelMail locale 
+ *                    directory)
  * @return string path to translation directory
  */
-function sq_bindtextdomain($domain,$dir) {
+function sq_bindtextdomain($domain,$dir='') {
     global $l10n, $gettext_flags, $sm_notAlias;
 
+    if (empty($dir)) $dir = SM_PATH . 'locale/';
+
     if ($gettext_flags==7) {
         // gettext extension without ngettext
         if (substr($dir, -1) != '/') $dir .= '/';
@@ -95,6 +101,19 @@ function sq_bindtextdomain($domain,$dir) {
 
     $dir=bindtextdomain($domain,$dir);
 
+    // set codeset in order to avoid gettext charset conversions
+    if (function_exists('bind_textdomain_codeset') 
+     && isset($languages[$sm_notAlias]['CHARSET'])) {
+
+        // Japanese translation uses different internal charset
+        if ($sm_notAlias == 'ja_JP') {
+            bind_textdomain_codeset ($domain_name, 'EUC-JP');
+        } else {
+            bind_textdomain_codeset ($domain_name, $languages[$sm_notAlias]['CHARSET']);
+        }
+
+    }
+
     return $dir;
 }
 
@@ -430,16 +449,6 @@ function set_up_language($sm_language, $do_search = false, $default = false) {
         sq_bindtextdomain( 'squirrelmail', SM_PATH . 'locale/' );
         sq_textdomain( 'squirrelmail' );
 
-        // set codeset in order to avoid gettext charset conversions
-        if (function_exists('bind_textdomain_codeset')) {
-            // Japanese translation uses different internal charset
-            if ($sm_notAlias == 'ja_JP') {
-                bind_textdomain_codeset ('squirrelmail', 'EUC-JP');
-            } else {
-                bind_textdomain_codeset ('squirrelmail', $languages[$sm_notAlias]['CHARSET'] );
-            }
-        }
-
         // Use LOCALE key, if it is set.
         if (isset($languages[$sm_notAlias]['LOCALE'])){
             $longlocale=$languages[$sm_notAlias]['LOCALE'];