3 require_once("include/dba.php");
12 * Get the language setting directly from system variables, bypassing get_config()
13 * as database may not yet be configured.
15 * If possible, we use the value from the browser.
20 if(! function_exists('get_browser_language')) {
21 function get_browser_language() {
23 if (x($_SERVER,'HTTP_ACCEPT_LANGUAGE')) {
24 // break up string into pieces (languages and q factors)
25 preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i',
26 $_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse);
28 if (count($lang_parse[1])) {
29 for ($i=0; $i<count($lang_parse[1]); $i++) {
30 if ( strlen($lang_parse[1][$i])>2 ) {
31 if (! in_array(substr($lang_parse[1][$i], 0, 2), $lang_parse[1] ) ) {
32 array_push($lang_parse[1], substr($lang_parse[1][$i], 0, 2));
33 if (floatval($lang_parse[4][$i])>0)
34 array_push($lang_parse[4], strval(floatval($lang_parse[4][$i])-0.0001));
36 array_push($lang_parse[4], '0.9999');
40 // create a list like "en" => 0.8
41 $langs = array_combine($lang_parse[1], $lang_parse[4]);
43 // set default to 1 for any without q factor
44 foreach ($langs as $lang => $val) {
45 if ($val === '') $langs[$lang] = 1;
46 if ($val === '0') $langs[$lang] = 1;
49 // sort list based on value
50 arsort($langs, SORT_NUMERIC);
55 if(isset($langs) && count($langs)) {
56 foreach ($langs as $lang => $v) {
57 if(file_exists("view/lang/$lang") && is_dir("view/lang/$lang")) {
68 return ((isset($a->config['system']['language'])) ? $a->config['system']['language'] : 'en');
72 function push_lang($language) {
77 if($language === $lang)
80 if(isset($a->strings) && count($a->strings)) {
81 $a->stringsave = $a->strings;
83 $a->strings = array();
84 load_translation_table($language);
91 if($lang === $a->langsave)
94 if(isset($a->stringsave))
95 $a->strings = $a->stringsave;
97 $a->strings = array();
105 if(! function_exists('load_translation_table')) {
107 * load string translation table for alternate language
109 * first plugin strings are loaded, then globals
111 * @param string $lang language code to load
113 function load_translation_table($lang) {
116 $a->strings = array();
117 // load enabled plugins strings
118 $plugins = q("SELECT name FROM addon WHERE installed=1;");
119 if ($plugins!==false) {
120 foreach($plugins as $p) {
122 if(file_exists("addon/$name/lang/$lang/strings.php")) {
123 include("addon/$name/lang/$lang/strings.php");
128 if(file_exists("view/lang/$lang/strings.php")) {
129 include("view/lang/$lang/strings.php");
134 // translate string if translation exists
136 if(! function_exists('t')) {
141 if(x($a->strings,$s)) {
142 $t = $a->strings[$s];
143 return is_array($t)?$t[0]:$t;
148 if(! function_exists('tt')){
149 function tt($singular, $plural, $count){
153 if(x($a->strings,$singular)) {
154 $t = $a->strings[$singular];
155 $f = 'string_plural_select_' . str_replace('-','_',$lang);
156 if(! function_exists($f))
157 $f = 'string_plural_select_default';
159 return is_array($t)?$t[$k]:$t;
169 // provide a fallback which will not collide with
170 // a function defined in any language file
172 if(! function_exists('string_plural_select_default')) {
173 function string_plural_select_default($n) {
179 * Return installed languages as associative array
185 function get_avaiable_languages() {
186 $lang_choices = array();
187 $langs = glob('view/lang/*/strings.php'); /**/
189 if(is_array($langs) && count($langs)) {
190 if(! in_array('view/lang/en/strings.php',$langs))
191 $langs[] = 'view/lang/en/';
193 foreach($langs as $l) {
194 $t = explode("/",$l);
195 $lang_choices[$t[1]] = $t[1];
198 return $lang_choices;