* PHP-only gettext replacement
[squirrelmail.git] / functions / gettext.php
CommitLineData
bb48d62e 1<?PHP
2
3 /* Alternate to the system's built-in gettext.
4 * relies on .po files (can't read .mo easily).
5 * Uses the session for caching (speed increase)
6 */
7
8 if (defined('gettext_php'))
9 return;
10 define('gettext_php', true);
11
12 global $gettext_php_domain, $gettext_php_dir, $gettext_php_loaded,
13 $gettext_php_translateStrings;
14
15 if (! isset($gettext_php_loaded)) {
16 $gettext_php_loaded = false;
17 session_register('gettext_php_loaded');
18 }
19
20 function gettext_php_load_strings() {
21 global $sm_language, $gettext_php_translateStrings,
22 $gettext_php_domain, $gettext_php_dir, $gettext_php_loaded;
23
24 // $sm_language gives 'en' for English, 'de' for German, etc.
25 // I didn't wanna use getenv or similar.
26
27 $gettext_php_translateStrings = array();
28 session_register('gettext_php_translateStrings');
29
30 $filename = $gettext_php_dir;
31 if (substr($filename, -1) != '/')
32 $filename .= '/';
33 $filename .= $sm_language . '/LC_MESSAGES/' . $gettext_php_domain . '.po';
34
35 $file = fopen($filename, 'r');
36 if ($file === false)
37 return;
38
39 $key = '';
40 $SkipRead = false;
41 while (! feof($file)) {
42 if (! $SkipRead)
43 $line = trim(fgets($file, 4096));
44 else
45 $SkipRead = false;
46
47 if (ereg('^msgid "(.*)"$', $line, $match)) {
48 if ($match[1] == '') {
49 // Potential multi-line
50 $key = '';
51 $line = trim(fgets($file, 4096));
52 while (ereg('^[ ]*"(.*)"[ ]*$', $line, $match)) {
53 $key .= $match[1];
54 $line = trim(fgets($file, 4096));
55 }
56 } else {
57 $key = $match[1];
58 }
59 } elseif (ereg('^msgstr "(.*)"$', $line, $match)) {
60 if ($match[1] == '') {
61 // Potential multi-line
62 $gettext_php_translateStrings[$key] = '';
63 $line = trim(fgets($file, 4096));
64 while (ereg('^[ ]*"(.*)"[ ]*$', $line, $match)) {
65 $gettext_php_translateStrings[$key] .= $match[1];
66 $line = trim(fgets($file, 4096));
67 }
68 } else {
69 $gettext_php_translateStrings[$key] = $match[1];
70 }
71 $key = '';
72 }
73 }
74 fclose($file);
75
76 $gettext_php_loaded = true;
77 }
78
79 function _($str) {
80 global $gettext_php_loaded;
81
82 if (! $gettext_php_loaded)
83 gettext_php_load_strings();
84
85 if (isset($gettext_php_translateStrings[$str]))
86 return $gettext_php_translateStrings[$str];
87
88 return $str;
89 }
90
91 function bindtextdomain($name, $dir) {
92 global $gettext_php_domain;
93
94 $gettext_php_domain = $name;
95 $gettext_php_dir = $dir;
96 $gettext_php_loaded = false;
97
98 return $dir;
99 }
100
101 function textdomain($name = false) {
102 global $gettext_php_domain;
103
104 if ($name != false)
105 {
106 $gettext_php_domain = $name;
107 $gettext_php_loaded = false;
108 }
109 return $gettext_php_domain;
110 }
111