PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.15.5
Independent Analytics – WordPress Analytics Plugin v2.15.5
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / vendor / symfony / translation / Dumper / PoFileDumper.php
independent-analytics / vendor / symfony / translation / Dumper Last commit date
CsvFileDumper.php 1 month ago DumperInterface.php 2 years ago FileDumper.php 1 month ago IcuResFileDumper.php 1 month ago IniFileDumper.php 1 month ago JsonFileDumper.php 1 month ago MoFileDumper.php 1 month ago PhpFileDumper.php 1 month ago PoFileDumper.php 1 month ago QtFileDumper.php 1 month ago XliffFileDumper.php 1 month ago YamlFileDumper.php 1 month ago
PoFileDumper.php
123 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 IAWPSCOPED\Symfony\Component\Translation\Dumper;
12
13 use IAWPSCOPED\Symfony\Component\Translation\MessageCatalogue;
14 /**
15 * PoFileDumper generates a gettext formatted string representation of a message catalogue.
16 *
17 * @author Stealth35
18 * @internal
19 */
20 class PoFileDumper extends FileDumper
21 {
22 /**
23 * {@inheritdoc}
24 */
25 public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) : string
26 {
27 $output = 'msgid ""' . "\n";
28 $output .= 'msgstr ""' . "\n";
29 $output .= '"Content-Type: text/plain; charset=UTF-8\\n"' . "\n";
30 $output .= '"Content-Transfer-Encoding: 8bit\\n"' . "\n";
31 $output .= '"Language: ' . $messages->getLocale() . '\\n"' . "\n";
32 $output .= "\n";
33 $newLine = \false;
34 foreach ($messages->all($domain) as $source => $target) {
35 if ($newLine) {
36 $output .= "\n";
37 } else {
38 $newLine = \true;
39 }
40 $metadata = $messages->getMetadata($source, $domain);
41 if (isset($metadata['comments'])) {
42 $output .= $this->formatComments($metadata['comments']);
43 }
44 if (isset($metadata['flags'])) {
45 $output .= $this->formatComments(\implode(',', (array) $metadata['flags']), ',');
46 }
47 if (isset($metadata['sources'])) {
48 $output .= $this->formatComments(\implode(' ', (array) $metadata['sources']), ':');
49 }
50 $sourceRules = $this->getStandardRules($source);
51 $targetRules = $this->getStandardRules($target);
52 if (2 == \count($sourceRules) && [] !== $targetRules) {
53 $output .= \sprintf('msgid "%s"' . "\n", $this->escape($sourceRules[0]));
54 $output .= \sprintf('msgid_plural "%s"' . "\n", $this->escape($sourceRules[1]));
55 foreach ($targetRules as $i => $targetRule) {
56 $output .= \sprintf('msgstr[%d] "%s"' . "\n", $i, $this->escape($targetRule));
57 }
58 } else {
59 $output .= \sprintf('msgid "%s"' . "\n", $this->escape($source));
60 $output .= \sprintf('msgstr "%s"' . "\n", $this->escape($target));
61 }
62 }
63 return $output;
64 }
65 private function getStandardRules(string $id)
66 {
67 // Partly copied from TranslatorTrait::trans.
68 $parts = [];
69 if (\preg_match('/^\\|++$/', $id)) {
70 $parts = \explode('|', $id);
71 } elseif (\preg_match_all('/(?:\\|\\||[^\\|])++/', $id, $matches)) {
72 $parts = $matches[0];
73 }
74 $intervalRegexp = <<<'EOF'
75 /^(?P<interval>
76 ({\s*
77 (\-?\d+(\.\d+)?[\s*,\s*\-?\d+(\.\d+)?]*)
78 \s*})
79
80 |
81
82 (?P<left_delimiter>[\[\]])
83 \s*
84 (?P<left>-Inf|\-?\d+(\.\d+)?)
85 \s*,\s*
86 (?P<right>\+?Inf|\-?\d+(\.\d+)?)
87 \s*
88 (?P<right_delimiter>[\[\]])
89 )\s*(?P<message>.*?)$/xs
90 EOF;
91 $standardRules = [];
92 foreach ($parts as $part) {
93 $part = \trim(\str_replace('||', '|', $part));
94 if (\preg_match($intervalRegexp, $part)) {
95 // Explicit rule is not a standard rule.
96 return [];
97 } else {
98 $standardRules[] = $part;
99 }
100 }
101 return $standardRules;
102 }
103 /**
104 * {@inheritdoc}
105 */
106 protected function getExtension() : string
107 {
108 return 'po';
109 }
110 private function escape(string $str) : string
111 {
112 return \addcslashes($str, "\x00..\x1f\"\\");
113 }
114 private function formatComments(string|array $comments, string $prefix = '') : ?string
115 {
116 $output = null;
117 foreach ((array) $comments as $comment) {
118 $output .= \sprintf('#%s %s' . "\n", $prefix, $comment);
119 }
120 return $output;
121 }
122 }
123