<?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;