credit silk (famfamfam)
[maps-routes-comparison] / i18n.phpi
1 <?php
2
3     session_start();
4
5     $supported_languages = array("fr" => 1, "en" => 1);
6
7     function load($language) {
8         $datafile_fd = fopen("messages.$language", "r");
9         $messages = array();
10         while (!feof($datafile_fd) && ($line = fgets($datafile_fd, 4096))) {
11             $ary = explode('=', $line, 2);
12             if (count($ary) == 2) {
13                 $messages[$ary[0]] = trim($ary[1]);
14             }
15         }
16         fclose($datafile_fd);
17         return $messages;
18     }
19
20     function t($msg) {
21         global $language;
22         global $messages_language;
23         global $messages_default;
24         if (!$messages_language) {
25             $messages_language = load($language);
26         }
27         if (!$messages_default) {
28             $messages_default = load('en');
29         }
30         if (isset($messages_language[$msg])) {
31             $msg = $messages_language[$msg];
32         } else {
33             error_log("ERROR " . $msg . " missing in " . $language);
34             if (isset($messages_default[$msg])) {
35                 $msg = $messages_default[$msg];
36             } else {
37                 error_log("ERROR " . $msg . " missing in en");
38                 $msg = "???$msg???";
39             }
40         }
41         for ($i = 0; $i < func_num_args() - 1; $i++){
42             $arg = func_get_arg($i+1);
43             $msg = preg_replace('/\{' . $i . '}/', $arg, $msg);
44         }
45         return $msg;
46     }
47
48     $language = $_SESSION['language'];
49     if (isset($_REQUEST['language']) && $supported_languages[$_REQUEST['language']]) { 
50         $language = $_REQUEST['language'];
51     } 
52     if (!$language && $_SERVER['HTTP_ACCEPT_LANGUAGE']) { 
53         $accepted = explode( ",", $_SERVER['HTTP_ACCEPT_LANGUAGE']); 
54         for ($i = 0; $i < count($accepted); $i++) { 
55             $entry = explode(";", $accepted[$i]);
56             $lang = $entry[0];
57             if ($supported_languages[$lang]) { 
58                 $language = $lang;
59                 break;
60             } 
61         } 
62     }
63     if (!$language) {
64         $language = 'en';
65     }
66     $_SESSION['language'] = $language;
67
68 ?>