GIF files changed to PNG
[squirrelmail.git] / functions / gettext.php
index 852f4c346831ef099a935904c2f087451e26314f..2bbf221d46c353ce8b584812c203bd7cf9cea27f 100644 (file)
@@ -1,21 +1,39 @@
 <?PHP
 
-   /* Alternate to the system's built-in gettext.
-    * relies on .po files (can't read .mo easily).
-    * Uses the session for caching (speed increase)
-    * Possible use in other PHP scripts?  The only SM-specific thing is
-    *   $sm_language, I think
-    *
-    * Very special thanks to Konstantin Riabitsev for letting me use a
-    * server that didn't already have gettext on it!
-    */
-     
-   if (defined('gettext_php'))
-      return;
-   define('gettext_php', true);
-   
-   global $gettext_php_domain, $gettext_php_dir, $gettext_php_loaded,
-      $gettext_php_translateStrings, $gettext_php_loaded_language;
+/**
+ * gettext.php
+ *
+ * Copyright (c) 1999-2001 The SquirrelMail Development Team
+ * Licensed under the GNU GPL. For full terms see the file COPYING.
+ *
+ * Alternate to the system's built-in gettext.
+ * relies on .po files (can't read .mo easily).
+ * Uses the session for caching (speed increase)
+ * Possible use in other PHP scripts?  The only SM-specific thing is
+ *   $sm_language, I think
+ *
+ * $Id$
+ */
+
+/*****************************************************************/
+/*** THIS FILE NEEDS TO HAVE ITS FORMATTING FIXED!!!           ***/
+/*** PLEASE DO SO AND REMOVE THIS COMMENT SECTION.             ***/
+/***    + Base level indent should begin at left margin, as    ***/
+/***      the global definition below.                         ***/
+/***    + All identation should consist of four space blocks   ***/
+/***    + Tab characters are evil.                             ***/
+/***    + all comments should use "slash-star ... star-slash"  ***/
+/***      style -- no pound characters, no slash-slash style   ***/
+/***    + FLOW CONTROL STATEMENTS (if, while, etc) SHOULD      ***/
+/***      ALWAYS USE { AND } CHARACTERS!!!                     ***/
+/***    + Please use ' instead of ", when possible. Note "     ***/
+/***      should always be used in _( ) function calls.        ***/
+/*** Thank you for your help making the SM code more readable. ***/
+/*****************************************************************/
+
+global $gettext_php_domain, $gettext_php_dir, $gettext_php_loaded,
+       $gettext_php_translateStrings, $gettext_php_loaded_language,
+       $gettext_php_short_circuit;
    
    if (! isset($gettext_php_loaded)) {
       $gettext_php_loaded = false;
       $gettext_php_loaded_language = '';
       session_register('gettext_php_loaded_language');
    }
+   if (! isset($gettext_php_short_circuit)) {
+      $gettext_php_short_circuit = false;
+      session_register('gettext_php_short_circuit');
+   }
 
    function gettext_php_load_strings() {
       global $squirrelmail_language, $gettext_php_translateStrings,
          $gettext_php_domain, $gettext_php_dir, $gettext_php_loaded,
-         $gettext_php_loaded_language;
+         $gettext_php_loaded_language, $gettext_php_short_circuit;
       
       // $squirrelmail_language gives 'en' for English, 'de' for German,
       // etc.  I didn't wanna use getenv or similar, but you easily could
       // change my code to do that.
       
       $gettext_php_translateStrings = array();
+      
+      $gettext_php_short_circuit = false;  // initialization
 
       $filename = $gettext_php_dir;
       if (substr($filename, -1) != '/')
          $gettext_php_domain . '.po';
       
       $file = @fopen($filename, 'r');
-      if ($file === false) {
-         // Uh-ho -- we can't load the file.
-         // Just fake it.  :-)
+      if ($file == false) {
+         // Uh-ho -- we can't load the file.  Just fake it.  :-)
+        // This is also for English, which doesn't use translations
          $gettext_php_loaded = true;
+         $gettext_php_loaded_language = $squirrelmail_language;
+        $gettext_php_short_circuit = true;  // Avoid fuzzy matching when we
+                                            // didn't load strings
          return;
       }
          
 
    function _($str) {
       global $gettext_php_loaded, $gettext_php_translateStrings, 
-         $squirrelmail_language, $gettext_php_loaded_language;
+         $squirrelmail_language, $gettext_php_loaded_language,
+        $gettext_php_short_circuit;
         
       if (! $gettext_php_loaded || 
           $gettext_php_loaded_language != $squirrelmail_language)
       // Try finding the exact string      
       if (isset($gettext_php_translateStrings[$str]))
          return $gettext_php_translateStrings[$str];
-
+        
+      // See if we should short-circuit
+      if ($gettext_php_short_circuit) {
+         $gettext_php_translateStrings[$str] = $str;
+        return $str;
+      }
+      
       // Look for a string that is very close to the one we want
       // Very computationally expensive
       $oldPercent = 0;
       $oldStr = '';
       $newPercent = 0;
       foreach ($gettext_php_translateStrings as $k => $v) {
-         similar_text($str, $k, &$newPercent);
+         similar_text($str, $k, $newPercent);
          if ($newPercent > $oldPercent) {
             $oldStr = $v;
             $oldPercent = $newPercent;