PluginProbe ʕ •ᴥ•ʔ
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress / trunk
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress vtrunk
4.17.2 4.17.1 4.17.0 4.16.19 4.16.18 4.16.17 4.16.16 trunk 1.0 1.0.1 1.0.2 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.5a 1.1.6 1.1.7 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.4 1.4.1 1.4.2 1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.7 1.7.1 1.7.2 1.8 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.1.9 2.2.10 2.2.11 2.2.12 2.2.13 2.2.14 2.2.15 2.2.16 2.2.2 2.2.5 2.2.6 2.2.7 2.2.8 2.2.9 3.0 3.1 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 3.1.19 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.10 3.2.11 3.2.12 3.2.13 3.2.14 3.2.15 3.2.16 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 4.0.0 4.0.1 4.0.2 4.0.3 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.10.2 4.10.3 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.13.3 4.13.4 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.15.0 4.15.1 4.15.10 4.15.11 4.15.12 4.15.13 4.15.14 4.15.15 4.15.16 4.15.17 4.15.18 4.15.19 4.15.2 4.15.20 4.15.20.1 4.15.21 4.15.22 4.15.23 4.15.24 4.15.25 4.15.3 4.15.4 4.15.5 4.15.6 4.15.7 4.15.8 4.15.9 4.16.0 4.16.1 4.16.10 4.16.11 4.16.12 4.16.13 4.16.14 4.16.15 4.16.2 4.16.3 4.16.4 4.16.5 4.16.6 4.16.7 4.16.8 4.16.9 4.2.0 4.3.0 4.3.1 4.3.2 4.4.0 4.4.1 4.5.0 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.6.0 4.7.0 4.8.0 4.9.0
wp-user-avatar / third-party / vendor / symfony / translation / Dumper / XliffFileDumper.php
wp-user-avatar / third-party / vendor / symfony / translation / Dumper Last commit date
CsvFileDumper.php 2 months ago DumperInterface.php 2 months ago FileDumper.php 2 months ago IcuResFileDumper.php 2 months ago IniFileDumper.php 2 months ago JsonFileDumper.php 2 months ago MoFileDumper.php 2 months ago PhpFileDumper.php 2 months ago PoFileDumper.php 2 months ago QtFileDumper.php 2 months ago XliffFileDumper.php 2 months ago YamlFileDumper.php 2 months ago
XliffFileDumper.php
167 lines
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11 namespace ProfilePressVendor\Symfony\Component\Translation\Dumper;
12
13 use ProfilePressVendor\Symfony\Component\Translation\Exception\InvalidArgumentException;
14 use ProfilePressVendor\Symfony\Component\Translation\MessageCatalogue;
15 /**
16 * XliffFileDumper generates xliff files from a message catalogue.
17 *
18 * @author Michel Salib <michelsalib@hotmail.com>
19 */
20 class XliffFileDumper extends FileDumper
21 {
22 /**
23 * {@inheritdoc}
24 */
25 public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = [])
26 {
27 $xliffVersion = '1.2';
28 if (\array_key_exists('xliff_version', $options)) {
29 $xliffVersion = $options['xliff_version'];
30 }
31 if (\array_key_exists('default_locale', $options)) {
32 $defaultLocale = $options['default_locale'];
33 } else {
34 $defaultLocale = \Locale::getDefault();
35 }
36 if ('1.2' === $xliffVersion) {
37 return $this->dumpXliff1($defaultLocale, $messages, $domain, $options);
38 }
39 if ('2.0' === $xliffVersion) {
40 return $this->dumpXliff2($defaultLocale, $messages, $domain);
41 }
42 throw new InvalidArgumentException(sprintf('No support implemented for dumping XLIFF version "%s".', $xliffVersion));
43 }
44 /**
45 * {@inheritdoc}
46 */
47 protected function getExtension()
48 {
49 return 'xlf';
50 }
51 private function dumpXliff1(string $defaultLocale, MessageCatalogue $messages, ?string $domain, array $options = [])
52 {
53 $toolInfo = ['tool-id' => 'symfony', 'tool-name' => 'Symfony'];
54 if (\array_key_exists('tool_info', $options)) {
55 $toolInfo = array_merge($toolInfo, $options['tool_info']);
56 }
57 $dom = new \DOMDocument('1.0', 'utf-8');
58 $dom->formatOutput = \true;
59 $xliff = $dom->appendChild($dom->createElement('xliff'));
60 $xliff->setAttribute('version', '1.2');
61 $xliff->setAttribute('xmlns', 'urn:oasis:names:tc:xliff:document:1.2');
62 $xliffFile = $xliff->appendChild($dom->createElement('file'));
63 $xliffFile->setAttribute('source-language', str_replace('_', '-', $defaultLocale));
64 $xliffFile->setAttribute('target-language', str_replace('_', '-', $messages->getLocale()));
65 $xliffFile->setAttribute('datatype', 'plaintext');
66 $xliffFile->setAttribute('original', 'file.ext');
67 $xliffHead = $xliffFile->appendChild($dom->createElement('header'));
68 $xliffTool = $xliffHead->appendChild($dom->createElement('tool'));
69 foreach ($toolInfo as $id => $value) {
70 $xliffTool->setAttribute($id, $value);
71 }
72 $xliffBody = $xliffFile->appendChild($dom->createElement('body'));
73 foreach ($messages->all($domain) as $source => $target) {
74 $translation = $dom->createElement('trans-unit');
75 $translation->setAttribute('id', strtr(substr(base64_encode(hash('sha256', $source, \true)), 0, 7), '/+', '._'));
76 $translation->setAttribute('resname', $source);
77 $s = $translation->appendChild($dom->createElement('source'));
78 $s->appendChild($dom->createTextNode($source));
79 // Does the target contain characters requiring a CDATA section?
80 $text = 1 === preg_match('/[&<>]/', $target) ? $dom->createCDATASection($target) : $dom->createTextNode($target);
81 $targetElement = $dom->createElement('target');
82 $metadata = $messages->getMetadata($source, $domain);
83 if ($this->hasMetadataArrayInfo('target-attributes', $metadata)) {
84 foreach ($metadata['target-attributes'] as $name => $value) {
85 $targetElement->setAttribute($name, $value);
86 }
87 }
88 $t = $translation->appendChild($targetElement);
89 $t->appendChild($text);
90 if ($this->hasMetadataArrayInfo('notes', $metadata)) {
91 foreach ($metadata['notes'] as $note) {
92 if (!isset($note['content'])) {
93 continue;
94 }
95 $n = $translation->appendChild($dom->createElement('note'));
96 $n->appendChild($dom->createTextNode($note['content']));
97 if (isset($note['priority'])) {
98 $n->setAttribute('priority', $note['priority']);
99 }
100 if (isset($note['from'])) {
101 $n->setAttribute('from', $note['from']);
102 }
103 }
104 }
105 $xliffBody->appendChild($translation);
106 }
107 return $dom->saveXML();
108 }
109 private function dumpXliff2(string $defaultLocale, MessageCatalogue $messages, ?string $domain)
110 {
111 $dom = new \DOMDocument('1.0', 'utf-8');
112 $dom->formatOutput = \true;
113 $xliff = $dom->appendChild($dom->createElement('xliff'));
114 $xliff->setAttribute('xmlns', 'urn:oasis:names:tc:xliff:document:2.0');
115 $xliff->setAttribute('version', '2.0');
116 $xliff->setAttribute('srcLang', str_replace('_', '-', $defaultLocale));
117 $xliff->setAttribute('trgLang', str_replace('_', '-', $messages->getLocale()));
118 $xliffFile = $xliff->appendChild($dom->createElement('file'));
119 if (str_ends_with($domain, MessageCatalogue::INTL_DOMAIN_SUFFIX)) {
120 $xliffFile->setAttribute('id', substr($domain, 0, -\strlen(MessageCatalogue::INTL_DOMAIN_SUFFIX)) . '.' . $messages->getLocale());
121 } else {
122 $xliffFile->setAttribute('id', $domain . '.' . $messages->getLocale());
123 }
124 foreach ($messages->all($domain) as $source => $target) {
125 $translation = $dom->createElement('unit');
126 $translation->setAttribute('id', strtr(substr(base64_encode(hash('sha256', $source, \true)), 0, 7), '/+', '._'));
127 if (\strlen($source) <= 80) {
128 $translation->setAttribute('name', $source);
129 }
130 $metadata = $messages->getMetadata($source, $domain);
131 // Add notes section
132 if ($this->hasMetadataArrayInfo('notes', $metadata)) {
133 $notesElement = $dom->createElement('notes');
134 foreach ($metadata['notes'] as $note) {
135 $n = $dom->createElement('note');
136 $n->appendChild($dom->createTextNode($note['content'] ?? ''));
137 unset($note['content']);
138 foreach ($note as $name => $value) {
139 $n->setAttribute($name, $value);
140 }
141 $notesElement->appendChild($n);
142 }
143 $translation->appendChild($notesElement);
144 }
145 $segment = $translation->appendChild($dom->createElement('segment'));
146 $s = $segment->appendChild($dom->createElement('source'));
147 $s->appendChild($dom->createTextNode($source));
148 // Does the target contain characters requiring a CDATA section?
149 $text = 1 === preg_match('/[&<>]/', $target) ? $dom->createCDATASection($target) : $dom->createTextNode($target);
150 $targetElement = $dom->createElement('target');
151 if ($this->hasMetadataArrayInfo('target-attributes', $metadata)) {
152 foreach ($metadata['target-attributes'] as $name => $value) {
153 $targetElement->setAttribute($name, $value);
154 }
155 }
156 $t = $segment->appendChild($targetElement);
157 $t->appendChild($text);
158 $xliffFile->appendChild($translation);
159 }
160 return $dom->saveXML();
161 }
162 private function hasMetadataArrayInfo(string $key, ?array $metadata = null): bool
163 {
164 return is_iterable($metadata[$key] ?? null);
165 }
166 }
167