Parsed data is an array where keys are nodes from XML file with its attributes
(if any). Only distinguishing attributes are taken into account (see [1]).
Below are examples of parsed data structure.
such XML data:
will be converted to such array:
array(
'dates' => array(
'calendars' => array(
'calendar[@type="gregorian"]' => array(
'months' => ''
),
'calendar[@type="buddhist"]' => array(
'months' => ''
),
)
)
)
/** * @test */ public function parsesCldrDataCorrectly() { $sampleFilenamePath = __DIR__ . '/../Fixtures/MockCldrData.xml'; $sampleParsedData = (require __DIR__ . '/../Fixtures/MockParsedCldrData.php'); $parser = new I18n\Cldr\CldrParser(); $result = $parser->getParsedData($sampleFilenamePath); $this->assertEquals($sampleParsedData, $result); }
/** * Parses given CLDR files using CldrParser and merges parsed data. * * Merging is done with inheritance in mind, as defined in CLDR specification. * * @param array<string> $sourcePaths Absolute paths to CLDR files (can be one file) * @return array Parsed and merged data */ protected function parseFiles(array $sourcePaths) { $parsedFiles = []; foreach ($sourcePaths as $sourcePath) { $parsedFiles[] = $this->cldrParser->getParsedData($sourcePath); } // Merge all data starting with most generic file so we get proper inheritance $parsedData = $parsedFiles[0]; $parsedFilesCount = count($parsedFiles); for ($i = 1; $i < $parsedFilesCount; ++$i) { $parsedData = $this->mergeTwoParsedFiles($parsedData, $parsedFiles[$i]); } return $parsedData; }