2 namespace TYPO3\CMS\Core\Localization\Parser;
50 $targetPath = $this->languageKey !==
'default' && @is_file($localizedTargetPath) ? $localizedTargetPath :
$this->sourcePath;
56 $LOCAL_LANG = array();
71 $bodyOfFileTag = $root->data->languageKey;
73 $localizedBodyOfFileTag = $root->data->xpath(
'languageKey[@index=\'' . $this->languageKey .
'\']
');
74 if ($element === 'source
' || $this->languageKey === 'default') {
75 $parsedData = $this->getParsedDataForElement($bodyOfFileTag, $element);
77 $parsedData = array();
79 if ($element === 'target
' && isset($localizedBodyOfFileTag[0]) && $localizedBodyOfFileTag[0] instanceof \SimpleXMLElement) {
80 $parsedDataTarget = $this->getParsedDataForElement($localizedBodyOfFileTag[0], $element);
81 $mergedData = $parsedDataTarget + $parsedData;
82 if ($this->languageKey === 'default') {
83 $parsedData = array_intersect_key($mergedData, $parsedData, $parsedDataTarget);
85 $parsedData = array_intersect_key($mergedData, $parsedDataTarget);
98 protected function getParsedDataForElement(\SimpleXMLElement $bodyOfFileTag, $element)
100 $parsedData = array();
101 $children = $bodyOfFileTag->children();
102 if ($children->count() === 0) {
103 // Check for externally-referenced resource:
104 // <languageKey index="fr">EXT:yourext/path/to/localized/locallang.xml</languageKey>
105 $reference = sprintf('%s
', $bodyOfFileTag);
106 if (substr($reference, -4) === '.xml
') {
107 return $this->getParsedTargetData(GeneralUtility::getFileAbsFileName($reference));
111 foreach ($children as $translationElement) {
112 if ($translationElement->getName() === 'label
') {
113 $parsedData[(string)$translationElement['index
']][0] = array(
114 $element => (string)$translationElement
127 protected function doParsingFromRoot(\SimpleXMLElement $root)
129 return $this->doParsingFromRootForElement($root, 'source
');
138 protected function doParsingTargetFromRoot(\SimpleXMLElement $root)
140 return $this->doParsingFromRootForElement($root, 'target
');
151 public function getParsedTargetData($path)
153 if (!isset($this->parsedTargetFiles[$path])) {
154 $this->parsedTargetFiles[$path] = $this->parseXmlTargetFile($path);
156 return $this->parsedTargetFiles[$path];
166 protected function parseXmlTargetFile($targetPath)
168 $rootXmlNode = false;
169 if (file_exists($targetPath)) {
170 $rootXmlNode = simplexml_load_file($targetPath, 'SimpleXMLElement
', LIBXML_NOWARNING);
172 if (!isset($rootXmlNode) || $rootXmlNode === false) {
173 throw new InvalidXmlFileException('The
path provided does not point to existing and accessible well-formed XML file (
' . $targetPath . ').
', 1278155987);
175 return $this->doParsingTargetFromRoot($rootXmlNode);