-
Notifications
You must be signed in to change notification settings - Fork 10
/
LanguageParser.php
127 lines (113 loc) · 2.96 KB
/
LanguageParser.php
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
127
<?php
// All rights for this file are owned by Mark Scholten
// This file is called LanguageParser.php
fix_is_included($index);
/*
De languageParser wordt gebruikt om de vertalingen voor de verschillende talen te kunnen weergeven.
De taalbestanden dienen .csv bestanden te zijn (bijvoorbeeld: nl.csv en en.csv).
De bestanden dienen volgens de volgende structuur opgezet te worden
De codes in de csv dienen numeriek te zijn.
code,vertaling;code2,vertaling; enz
Vertalingen kunnen verkregen worden op de onderstaande manier:
Eerst dien er een instance van de Languageparser gemaakt te worden voor een bepaalde taal: $parser=LanguageParser::getInstance(taal);
daarna kan er een vertaling voor een bepaalde code verkregen worden op de volgende manier:
$parser->translate(code);
*/
class LanguageParser
{
private static $instance;
private static $language;
private static $lang_dir;
private static $languageArray = array();
private function __construct($language,$lang_dir)
{
$this->language=$language;
$this->setupLanguageArray($language,$lang_dir);
}
public function __destruct()
{
unset($instance);
}
private function setupLanguageArray($language,$lang_dir)
{
$file=$lang_dir.'/'.$language.'.csv';
if($fileHandler=@fopen($file, 'rb'))
{
LanguageParser::$languageArray = LanguageParser::parseLanguageCSV(fread($fileHandler, filesize($file)));
}
else
{
trigger_error("Language File not found, searched for: ".$language.".csv in lang directory (".$lang_dir.") ", 512);
}
}
private function parseLanguageCSV($content)
{
$content = str_replace("\n", "", $content);
$content = str_replace("\r", "", $content);
$splitted = explode(";",$content);
if(strlen($splitted[count($splitted)-1]<1))
{
array_pop($splitted);
}
foreach($splitted as $translation)
{
$temp=explode(",",$translation,2);
$code=$temp[0];
$translation=$temp[1];
$this->languageArray[$code]=$translation;
}
}
public static function getInstance($language,$lang_dir)
{
if(strlen($language)<1)
{
trigger_error("No language passed to getInstance", 512);
}
if(strlen($lang_dir)<1)
{
trigger_error("No language dir passed to getInstance", 512);
}
else
{
if(LanguageParser::$language==$language)
{
return $this->instance;
}
elseif(LanguageParser::$lang_dir==$lang_dir)
{
return $this->instance;
}else
{
LanguageParser::$instance = new LanguageParser($language,$lang_dir);
return LanguageParser::$instance;
}
}
}
public function translate($code)
{
if(is_numeric($code))
{
if(is_array($this->languageArray))
{
if(array_key_exists($code, $this->languageArray))
{
return $this->languageArray[$code];
}
else
{
trigger_error("Translation code not found, code:".$code, 512);
return "Not Found";
}
}
else
{
trigger_error("languageArray not constructed", 512);
}
}
else
{
trigger_error("Translation code not numeric, code:".$code, 512);
}
}
}
?>