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