41 if (!isset($this->cache)) {
43 $this->cache = $cacheManager->getFileCache(
44 'locale', md5($this->filename),
45 array($this,
'_cacheMiss')
52 $cacheTime = $this->cache->getCacheTime();
53 if ($cacheTime ===
null || $cacheTime < filemtime($this->filename)) {
92 $message =
$cache->get($key);
93 if (!isset($message)) {
98 if (isset($message)) {
99 if (!empty($params)) {
101 foreach ($params as $key => $value) {
102 $message = str_replace(
"{\$$key}", $value, $message);
107 if (LOCALE_ENCODING ==
"iso-8859-1") $message = utf8_decode($message);
121 $localeData = array();
126 $translations = Gettext\Translations::fromPoFile(
$filename);
127 foreach ($translations as $translation) {
128 $localeData[$translation->getOriginal()] = $translation->getTranslation();
132 $xmlFilename = preg_replace(
'/\.po$/',
'.xml',
$filename);
133 if ($xmlFilename && file_exists($xmlFilename)) {
135 $data = $xmlDao->parseStruct(
$filename, array(
'message'));
138 if (isset($data[
'message'])) {
139 foreach ($data[
'message'] as $messageData) {
140 $localeData[$messageData[
'attributes'][
'key']] = $messageData[
'value'];
154 return isset($this->locale) && file_exists($this->filename);
165 LOCALE_ERROR_MISSING_KEY => array(),
166 LOCALE_ERROR_EXTRA_KEY => array(),
167 LOCALE_ERROR_DIFFERING_PARAMS => array(),
168 LOCALE_ERROR_MISSING_FILE => array()
171 if ($referenceLocaleFile->isValid()) {
173 $errors[LOCALE_ERROR_MISSING_FILE][] = array(
174 'locale' => $this->locale,
175 'filename' => $this->filename
188 foreach ($referenceContents as $key => $referenceValue) {
189 if (!isset($localeContents[$key])) {
190 $errors[LOCALE_ERROR_MISSING_KEY][] = array(
192 'locale' => $this->locale,
193 'filename' => $this->filename,
194 'reference' => $referenceValue
198 $value = $localeContents[$key];
202 if (
count(array_diff($referenceParams, $params)) > 0) {
203 $errors[LOCALE_ERROR_DIFFERING_PARAMS][] = array(
205 'locale' => $this->locale,
206 'mismatch' => array_diff($referenceParams, $params),
207 'filename' => $this->filename,
208 'reference' => $referenceValue,
215 unset($localeContents[$key]);
219 foreach ($localeContents as $key => $value) {
220 $errors[LOCALE_ERROR_EXTRA_KEY][] = array(
222 'locale' => $this->locale,
223 'filename' => $this->filename