Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?php
#########################################################
# Copyright 2008 Darrin Yeager #
# http://www.dyeager.org/ #
# Licensed under BSD license. #
# http://www.dyeager.org/downloads/license-bsd.txt #
#########################################################
function getDefaultLanguage() {
if (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"]))
return parseDefaultLanguage($_SERVER["HTTP_ACCEPT_LANGUAGE"]);
else
return parseDefaultLanguage(NULL);
}
function parseDefaultLanguage($http_accept, $deflang = "en") {
if(isset($http_accept) && strlen($http_accept) > 1) {
# Split possible languages into array
$x = explode(",",$http_accept);
foreach ($x as $val) {
#check for q-value and create associative array. No q-value means 1 by rule
if(preg_match("/(.*);q=([0-1]{0,1}\.\d{0,4})/i",$val,$matches))
$lang[$matches[1]] = (float)$matches[2];
else
$lang[$val] = 1.0;
}
#return default language (highest q-value)
$qval = 0.0;
foreach ($lang as $key => $value) {
if ($value > $qval) {
$qval = (float)$value;
$deflang = $key;
}
}
}
return strtolower($deflang);
}
$language=getDefaultLanguage();
echo "Your browser preferred language is: '".$language."'<br>";
//get the first and second part of the language code
if(strpos($language,'_')!==false)
{
$language=substr($language,0,strpos($language,'_'));
$lang_dialect=substr($language,strpos($language,'_'));
}
elseif(strpos($language,'-')!==false)
{
$language=substr($language,0,strpos($language,'-'));
$lang_dialect=substr($language,strpos($language,'-'));
}
if(!isset($lang_dialect))
{
$lang_dialect=$language;
}
$tmplangcode=$language.'-'.strtolower($lang_dialect);
if(!file_exists('include/locale/'.$tmplangcode)||!is_dir('include/locale/'.$tmplangcode))
{
$tmplangcode=$language.'_'.strtolower($lang_dialect);
if(!file_exists('include/locale/'.$tmplangcode)||!is_dir('include/locale/'.$tmplangcode))
{
$tmplangcode=$language.'_'.strtoupper($lang_dialect);
if(!file_exists('include/locale/'.$tmplangcode)||!is_dir('include/locale/'.$tmplangcode))
{
$tmplangcode=$language.'-'.strtoupper($lang_dialect);
if(!file_exists('include/locale/'.$tmplangcode)||!is_dir('include/locale/'.$tmplangcode))
{
if(!file_exists('include/locale/'.$language)||!is_dir('include/locale/'.$language)) //check short langcode
{
$language='en'; //set as default
}
}
else
{
$language=$tmplangcode;
}
}
else
{
$language=$tmplangcode;
}
}
else
{
$language=$tmplangcode;
}
}
else
{
$language=$tmplangcode;
}
//check if a redirect file is in there
if(file_exists('include/locale/'.$language.'/redirect'))
{
$f = fopen('include/locale/'.$language.'/redirect','r');
if($f!==false)
{
$line = fgets($f);
if(strlen($line)>=2) //safety check
{
echo "using the redirect file include/locale/".$language."/redirect<br>";
$language=$line; //redirect language
echo "redirecting to '".$language."'<br>";
}
fclose($f);
}
}
echo "The following folder will be used to translate your osticket: '".$language."'";
$old_error_reporting = error_reporting();
error_reporting (E_ERROR);
$f = fopen('include/locale/'.$language.'/LC_MESSAGES/messages.mo', 'r');
$meta = stream_get_meta_data($f);
if($meta['mode']==NULL)
{
echo '<br><b>ERROR: The translation file "include/locale/'.$language.'/LC_MESSAGES/messages.mo" isn\'t readable, check permissions.</b><br>';
}
else
{
fclose($f);
}
error_reporting($old_error_reporting);
?>