1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
<?php
namespace Gettext\Extractors;
use Gettext\Translations; use Gettext\Translation; use SimpleXMLElement;
/** * Class to get gettext strings from xliff format. */ class Xliff extends Extractor implements ExtractorInterface { /** * {@inheritdoc} */ public static function fromString($string, Translations $translations, array $options = []) { $xml = new SimpleXMLElement($string, null, false);
foreach ($xml->file as $file) { if (isset($file->notes)) { foreach ($file->notes->note as $note) { $translations->setHeader($note['id'], (string) $note); } }
foreach ($file->unit as $unit) { foreach ($unit->segment as $segment) { $targets = [];
foreach ($segment->target as $target) { $targets[] = (string) $target; }
$translation = new Translation(null, (string) $segment->source); $translation->setTranslation(array_shift($targets)); $translation->setPluralTranslations($targets);
if (isset($unit->notes)) { foreach ($unit->notes->note as $note) { switch ($note['category']) { case 'context': $translation = $translation->getClone((string) $note); break;
case 'extracted-comment': $translation->addExtractedComment((string) $note); break;
case 'flag': $translation->addFlag((string) $note); break;
case 'reference': $ref = explode(':', (string) $note, 2); $translation->addReference($ref[0], isset($ref[1]) ? $ref[1] : null); break;
default: $translation->addComment((string) $note); break; } } }
$translations[] = $translation; } } } } }
|