blob: cd8ba0765e5314e55d617c01db709fb785a0d7d6 (
plain)
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
|
<?php
class I18nData {
const REFERENCE_LANGUAGE = 'en';
private $data = array();
private $originalData = array();
public function __construct($data) {
$this->data = $data;
$this->originalData = $data;
}
public function getData() {
return $this->data;
}
/**
* Return the available languages
*
* @return array
*/
public function getAvailableLanguages() {
$languages = array_keys($this->data);
sort($languages);
return $languages;
}
/**
* Add a new language. It's a copy of the reference language.
*
* @param string $language
*/
public function addLanguage($language) {
if (array_key_exists($language, $this->data)) {
throw new Exception('The selected language already exist.');
}
$this->data[$language] = $this->data[static::REFERENCE_LANGUAGE];
}
/**
* Add a key in the reference language
*
* @param string $key
* @param string $value
*/
public function addKey($key, $value) {
if (array_key_exists($key, $this->data[static::REFERENCE_LANGUAGE][$this->getFilenamePrefix($key)])) {
throw new Exception('The selected key already exist.');
}
$this->data[static::REFERENCE_LANGUAGE][$this->getFilenamePrefix($key)][$key] = $value;
}
/**
* Duplicate a key from the reference language to all other languages
*
* @param string $key
*/
public function duplicateKey($key) {
if (!array_key_exists($key, $this->data[static::REFERENCE_LANGUAGE][$this->getFilenamePrefix($key)])) {
throw new Exception('The selected key does not exist.');
}
$value = $this->data[static::REFERENCE_LANGUAGE][$this->getFilenamePrefix($key)][$key];
foreach ($this->getAvailableLanguages() as $language) {
if (static::REFERENCE_LANGUAGE === $language) {
continue;
}
if (array_key_exists($key, $this->data[$language][$this->getFilenamePrefix($key)])) {
throw new Exception(sprintf('The selected key already exist in %s.', $language));
}
$this->data[$language][$this->getFilenamePrefix($key)][$key] = $value;
}
}
/**
* Remove a key in all languages
*
* @param string $key
*/
public function removeKey($key) {
if (!array_key_exists($key, $this->data[static::REFERENCE_LANGUAGE][$this->getFilenamePrefix($key)])) {
throw new Exception('The selected key does not exist.');
}
foreach ($this->getAvailableLanguages() as $language) {
if (array_key_exists($key, $this->data[$language][$this->getFilenamePrefix($key)])) {
unset($this->data[$language][$this->getFilenamePrefix($key)][$key]);
}
}
}
/**
* Check if the data has changed
*
* @return bool
*/
public function hasChanged() {
return $this->data !== $this->originalData;
}
public function getLanguage($language) {
return $this->data[$language];
}
public function getReferenceLanguage() {
return $this->getLanguage(static::REFERENCE_LANGUAGE);
}
/**
* @param string $key
* @return string
*/
private function getFilenamePrefix($key) {
return preg_replace('/\..*/', '.php', $key);
}
}
|