Repository navigation
Expand file tree
/
Copy path_intl.php
More file actions
78 lines (68 loc) · 1.9 KB
/
Copy path_intl.php
File metadata and controls
78 lines (68 loc) · 1.9 KB
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
<?php
function getLanguageRequestParam()
{
if (array_key_exists("lang", $_REQUEST)) return "?lang=".urlencode($_REQUEST["lang"]);
else return "";
}
function getPreferredLanguages()
{
if (array_key_exists("lang", $_REQUEST)) return array($_REQUEST["lang"]);
$httpAcceptLanguage = array_key_exists('HTTP_ACCEPT_LANGUAGE', $_SERVER) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : "";
$languagesWithWeights = explode(',', $httpAcceptLanguage);
$result = array();
foreach ($languagesWithWeights as $languageWithWeight) {
$language = explode(';q=', $languageWithWeight);
// ;q=... is optional
$result[$language[0]] = isset($language[1]) ? floatval($language[1]) : 1;
}
arsort($result);
return array_keys($result);
}
function getSupportedLanguages()
{
return array_filter(scandir("res"), function($f) {
return is_dir("res/".$f) && !str_starts_with($f, ".");
});
}
function findPreferredSupportedLanguage()
{
$languages = getPreferredLanguages();
$supported = getSupportedLanguages();
foreach ($languages as $language) {
if (in_array($language, $supported)) {
return $language;
}
}
return "en";
}
function getStrings($language)
{
$file = "res/".$language."/strings.json";
if (file_exists($file)) {
return json_decode(file_get_contents($file), true);
} else {
return null;
}
}
function getDir($language)
{
// and more... but we don't have translations for these anyway
$rtl = array("ar", "fa", "he", "ps", "ur", "yi");
if (in_array($language, $rtl)) {
return "rtl";
} else {
return "ltr";
}
}
$language = findPreferredSupportedLanguage();
$supportedLanguages = getSupportedLanguages();
$stringsEn = getStrings("en");
$strings = getStrings($language) ?? $stringsEn;
$dir = getDir($language);
// fill missing strings in chosen language with default string from "en"
if ($language != "en") {
foreach($stringsEn as $key => $string) {
if (!array_key_exists($key, $strings)) $strings[$key] = $string;
}
}
?>