* 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'))
define('gettext_php', true);
global $gettext_php_domain, $gettext_php_dir, $gettext_php_loaded,
- $gettext_php_translateStrings;
+ $gettext_php_translateStrings, $gettext_php_loaded_language;
if (! isset($gettext_php_loaded)) {
$gettext_php_loaded = false;
}
if (! isset($gettext_php_domain)) {
$gettext_php_domain = '';
- session_register('gettext_php_translateStrings');
+ session_register('gettext_php_domain');
}
if (! isset($gettext_php_dir)) {
$gettext_php_dir = '';
- session_register('gettext_php_translateStrings');
+ session_register('gettext_php_dir');
}
if (! isset($gettext_php_translateStrings)) {
$gettext_php_translateStrings = array();
session_register('gettext_php_translateStrings');
}
+ if (! isset($gettext_php_loaded_language)) {
+ $gettext_php_loaded_language = '';
+ session_register('gettext_php_loaded_language');
+ }
function gettext_php_load_strings() {
- global $sm_language, $gettext_php_translateStrings,
- $gettext_php_domain, $gettext_php_dir, $gettext_php_loaded;
+ global $squirrelmail_language, $gettext_php_translateStrings,
+ $gettext_php_domain, $gettext_php_dir, $gettext_php_loaded,
+ $gettext_php_loaded_language;
- // $sm_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.
+ // $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();
-
+
$filename = $gettext_php_dir;
if (substr($filename, -1) != '/')
$filename .= '/';
- $filename .= $sm_language . '/LC_MESSAGES/' . $gettext_php_domain . '.po';
+ $filename .= $squirrelmail_language . '/LC_MESSAGES/' .
+ $gettext_php_domain . '.po';
- $file = fopen($filename, 'r');
- if ($file === false)
- // Uh-ho
+ $file = @fopen($filename, 'r');
+ if ($file === false) {
+ // Uh-ho -- we can't load the file.
+ // Just fake it. :-)
+ $gettext_php_loaded = true;
return;
+ }
$key = '';
$SkipRead = false;
$key .= $match[1];
$line = trim(fgets($file, 4096));
}
+ $SkipRead = true;
} else {
// msgid "string string"
$key = $match[1];
$gettext_php_translateStrings[$key] .= $match[1];
$line = trim(fgets($file, 4096));
}
+ $SkipRead = true;
} else {
// msgstr "string string"
$gettext_php_translateStrings[$key] = $match[1];
}
+ $gettext_php_translateStrings[$key] =
+ stripslashes($gettext_php_translateStrings[$key]);
$key = '';
}
}
fclose($file);
-
+
$gettext_php_loaded = true;
+ $gettext_php_loaded_language = $squirrelmail_language;
}
-
+
function _($str) {
- global $gettext_php_loaded;
+ global $gettext_php_loaded, $gettext_php_translateStrings,
+ $squirrelmail_language, $gettext_php_loaded_language;
- if (! $gettext_php_loaded)
+ if (! $gettext_php_loaded ||
+ $gettext_php_loaded_language != $squirrelmail_language)
gettext_php_load_strings();
-
+
+ // Try finding the exact string
if (isset($gettext_php_translateStrings[$str]))
return $gettext_php_translateStrings[$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);
+ if ($newPercent > $oldPercent) {
+ $oldStr = $v;
+ $oldPercent = $newPercent;
+ }
+ }
+ // Require 80% match or better
+ // Adjust to suit your needs
+ if ($oldPercent > 80) {
+ // Remember this so we don't need to search again
+ $gettext_php_translateStrings[$str] = $oldStr;
+ return $oldStr;
+ }
+ // Remember this so we don't need to search again
+ $gettext_php_translateStrings[$str] = $str;
return $str;
}
function bindtextdomain($name, $dir) {
- global $gettext_php_domain;
-
- $gettext_php_domain = $name;
- $gettext_php_dir = $dir;
- $gettext_php_loaded = false;
+ global $gettext_php_domain, $gettext_php_dir, $gettext_php_loaded;
+
+ if ($gettext_php_domain != $name) {
+ $gettext_php_domain = $name;
+ $gettext_php_loaded = false;
+ }
+ if ($gettext_php_dir != $dir) {
+ $gettext_php_dir = $dir;
+ $gettext_php_loaded = false;
+ }
return $dir;
}
function textdomain($name = false) {
- global $gettext_php_domain;
-
- if ($name != false)
- {
+ global $gettext_php_domain, $gettext_php_loaded;
+
+ if ($name != false && $gettext_php_domain != $name) {
$gettext_php_domain = $name;
$gettext_php_loaded = false;
}