Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
40.00% |
2 / 5 |
CRAP | |
21.05% |
4 / 19 |
FileTranslation | |
0.00% |
0 / 1 |
|
40.00% |
2 / 5 |
39.49 | |
21.05% |
4 / 19 |
__construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
getLanguage | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 4 |
|||
findTranslationFiles | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getTranslationFilesPattern | |
100.00% |
1 / 1 |
2 | |
100.00% |
1 / 1 |
|||
filesToArray | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 9 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\StringTranslation\Translator\FileTranslation. | |
*/ | |
namespace Drupal\Core\StringTranslation\Translator; | |
use Drupal\Component\Gettext\PoStreamReader; | |
use Drupal\Component\Gettext\PoMemoryWriter; | |
/** | |
* File based string translation. | |
* | |
* Translates a string when some systems are not available. | |
* | |
* Used during the install process, when database, theme, and localization | |
* system is possibly not yet available. | |
*/ | |
class FileTranslation extends StaticTranslation { | |
/** | |
* Directory to find translation files in the file system. | |
* | |
* @var string | |
*/ | |
protected $directory; | |
/** | |
* Constructs a StaticTranslation object. | |
* | |
* @param string $directory | |
* The directory to retrieve file translations from. | |
*/ | |
public function __construct($directory) { | |
parent::__construct(); | |
$this->directory = $directory; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
protected function getLanguage($langcode) { | |
// If the given langcode was selected, there should be at least one .po | |
// file with its name in the pattern drupal-$version.$langcode.po. | |
// This might or might not be the entire filename. It is also possible | |
// that multiple files end with the same suffix, even if unlikely. | |
$files = $this->findTranslationFiles($langcode); | |
if (!empty($files)) { | |
return $this->filesToArray($langcode, $files); | |
} | |
else { | |
return array(); | |
} | |
} | |
/** | |
* Finds installer translations either for a specific or all languages. | |
* | |
* Filenames must match the pattern: | |
* - 'drupal-[version].[langcode].po (if langcode is provided) | |
* - 'drupal-[version].*.po (if no langcode is provided) | |
* | |
* @param string $langcode | |
* (optional) The language code corresponding to the language for which we | |
* want to find translation files. If omitted, information on all available | |
* files will be returned. | |
* | |
* @return array | |
* An associative array of file information objects keyed by file URIs as | |
* returned by file_scan_directory(). | |
* | |
* @see file_scan_directory() | |
*/ | |
public function findTranslationFiles($langcode = NULL) { | |
$files = file_scan_directory($this->directory, $this->getTranslationFilesPattern($langcode), array('recurse' => FALSE)); | |
return $files; | |
} | |
/** | |
* Provides translation file name pattern. | |
* | |
* @param string $langcode | |
* (optional) The language code corresponding to the language for which we | |
* want to find translation files. | |
* | |
* @return string | |
* String file pattern. | |
*/ | |
protected function getTranslationFilesPattern($langcode = NULL) { | |
// The file name matches: drupal-[release version].[language code].po | |
// When provided the $langcode is use as language code. If not provided all | |
// language codes will match. | |
return '!drupal-[0-9a-z\.-]+\.' . (!empty($langcode) ? preg_quote($langcode, '!') : '[^\.]+') . '\.po$!'; | |
} | |
/** | |
* Reads the given Gettext PO files into a data structure. | |
* | |
* @param string $langcode | |
* Language code string. | |
* @param array $files | |
* List of file objects with URI properties pointing to read. | |
* | |
* @return array | |
* Structured array as produced by a PoMemoryWriter. | |
* | |
* @see \Drupal\Component\Gettext\PoMemoryWriter | |
*/ | |
public static function filesToArray($langcode, array $files) { | |
$writer = new PoMemoryWriter(); | |
$writer->setLangcode($langcode); | |
foreach ($files as $file) { | |
$reader = new PoStreamReader(); | |
$reader->setURI($file->uri); | |
$reader->setLangcode($langcode); | |
$reader->open(); | |
$writer->writeItems($reader, -1); | |
} | |
return $writer->getData(); | |
} | |
} |