46 $targetPath = $this->languageKey !==
'default' && @is_file($localizedTargetPath) ? $localizedTargetPath :
$this->sourcePath;
49 }
catch (\
TYPO3\CMS\Core\Localization\
Exception\InvalidXmlFileException $e) {
66 $bodyOfFileTag = $root->data->languageKey;
68 $localizedBodyOfFileTag = $root->data->xpath(
'languageKey[@index=\'' . $this->languageKey .
'\']
'); 69 if ($element === 'source
' || $this->languageKey === 'default') { 70 $parsedData = $this->getParsedDataForElement($bodyOfFileTag, $element); 72 $parsedData = array(); 74 if ($element === 'target
' && isset($localizedBodyOfFileTag[0]) && $localizedBodyOfFileTag[0] instanceof \SimpleXMLElement) { 75 $parsedDataTarget = $this->getParsedDataForElement($localizedBodyOfFileTag[0], $element); 76 $mergedData = $parsedDataTarget + $parsedData; 77 if ($this->languageKey === 'default') { 78 $parsedData = array_intersect_key($mergedData, $parsedData, $parsedDataTarget); 80 $parsedData = array_intersect_key($mergedData, $parsedDataTarget); 93 protected function getParsedDataForElement(\SimpleXMLElement $bodyOfFileTag, $element) { 94 $parsedData = array(); 95 $children = $bodyOfFileTag->children(); 96 if ($children->count() == 0) { 97 // Check for externally-referenced resource: 98 // <languageKey index="fr">EXT:yourext/path/to/localized/locallang.xml</languageKey> 99 $reference = sprintf('%s
', $bodyOfFileTag); 100 if (substr($reference, -4) === '.xml
') { 101 return $this->getParsedTargetData(\TYPO3\CMS\Core\Utility\GeneralUtility::getFileAbsFileName($reference)); 105 foreach ($children as $translationElement) { 106 if ($translationElement->getName() === 'label
') { 107 // If restype would be set, it could be metadata from Gettext to XLIFF conversion (and we don't need
this data)
108 $parsedData[(string) $translationElement[
'index']][0] = array(
109 $element => (
string) $translationElement
145 if (!isset($this->parsedTargetFiles[$path])) {
148 return $this->parsedTargetFiles[$path];
159 $rootXmlNode = FALSE;
160 if (file_exists($targetPath)) {
161 $xmlContent = file_get_contents($targetPath);
163 $previousValueOfEntityLoader = libxml_disable_entity_loader(TRUE);
164 $rootXmlNode = simplexml_load_string($xmlContent,
'SimpleXmlElement', \LIBXML_NOWARNING);
165 libxml_disable_entity_loader($previousValueOfEntityLoader);
167 if (!isset($rootXmlNode) || $rootXmlNode === FALSE) {
168 throw new \TYPO3\CMS\Core\Localization\Exception\InvalidXmlFileException(
'The path provided does not point to existing and accessible well-formed XML file (' . $targetPath .
').', 1278155987);
static mergeRecursiveWithOverrule(array &$original, array $overrule, $addKeys=TRUE, $includeEmptyValues=TRUE, $enableUnsetFeature=TRUE)
doParsingTargetFromRoot(\SimpleXMLElement $root)
static llXmlAutoFileName($fileRef, $language, $sameLocation=FALSE)
parseXmlTargetFile($targetPath)
getParsedTargetData($path)
getParsedData($sourcePath, $languageKey, $charset='')
doParsingFromRootForElement(\SimpleXMLElement $root, $element)
static getFileAbsFileName($filename, $onlyRelative=TRUE, $relToTYPO3_mainDir=FALSE)
doParsingFromRoot(\SimpleXMLElement $root)