]> dev.renevier.net Git - syp.git/blob - inc/langutils.php
fixes notices
[syp.git] / inc / langutils.php
1 <?php
2 /* Copyright (c) 2009 Arnaud Renevier, Inc, published under the modified BSD
3    license. */
4
5     $language_list = Array ();
6
7 function ptrans ($str) {
8     echo trans ($str);
9 }
10
11 function trans ($str) {
12     global $translations, $lang;
13
14     if (isset ($translations[$lang]) and isset($translations[$lang][$str])) {
15         $res = $translations[$lang][$str];
16     }
17     if (!isset ($res) || strlen ($res) == 0) {
18         return $str;
19     } else {
20         return $res;
21     }
22 }
23
24 function parse_accept_language () {
25     global $translations;
26     $possibilities = array();
27     if (isset ($_SERVER ['HTTP_ACCEPT_LANGUAGE'])) {
28         // set to lower case now
29         $accepts = explode (',',
30                         strtolower ($_SERVER ['HTTP_ACCEPT_LANGUAGE']));
31         foreach ($accepts as $acc) {
32             if (preg_match ('/^\s*([a-zA-Z]+)(-[a-zA-Z]+)?\s*$/', $acc, $matches)) {
33                 $possibilities [$matches [1]] = 1.0;
34             }
35             if (preg_match ('/^\s*([a-zA-Z]+)(-[a-zA-Z]+)?\s*;\s*q\s*=\s*([0-9\.]+)\s*$/',
36                             $acc, $matches)) {
37                 $val = floatval ($matches [3]);
38                 if ($val > 1.0) {
39                     $val = 1.0;
40                 }
41                 $ceil = (isset ($possibilities[$matches[1]]))? $possibilities[$matches[1]]: 0;
42                 $possibilities [$matches [1]] = max ($val, $ceil);
43             }
44         }
45         arsort ($possibilities);
46         foreach ($possibilities as $lang => $value) {
47             if (isset ($translations [$lang])) {
48                 return $lang;
49             }
50         }
51     }
52     return "en"; // nothing found; default to english
53 }
54
55 function other_languages ($current_lang) {
56  $script = pathinfo ($_SERVER ["SCRIPT_NAME"], PATHINFO_FILENAME);
57     $dotpos = strpos ($script, '.');
58     if ($dotpos !== false) {
59         $script = substr ($script, 0, $dotpos);
60     }
61
62     global $translations;
63     $links = Array ();
64     foreach ($translations as $lang => $obj) {
65         $lang_name = $obj ["_language_name"];
66         if ($lang == $current_lang) {
67             array_push ($links, "<a>$lang_name</a>");
68         } else  {
69             array_push ($links, "<a href=\"$script.$lang.php\" title=\"$lang_name\" lang=\"$lang\" hreflang=\"$lang\">$lang_name</a>");
70         }
71     }                                                                                                                      
72     echo "<div id=\"other-language\">" . join("", $links) . "</div>\n";
73 }
74
75 // load languages
76 foreach (scandir ("inc/i10n/") as $entry) {
77     if (is_dir ("inc/i10n/$entry") && ($entry [0] != ".")) {
78         $target = "inc/i10n/$entry/syp.php";
79         if (is_file ($target)) {
80             include $target;
81         }
82     }
83 }
84
85 // detects language                                                                                                         
86 $fname = pathinfo ($_SERVER ["SCRIPT_NAME"], PATHINFO_FILENAME);                                                            
87 $lang = ltrim (strstr ($fname, '.'), '.');
88 if ((!isset ($lang)) ||
89     (strlen ($lang) == 0) ||
90     (!isset ($translations [$lang]))) {
91     $lang = parse_accept_language ();
92 }