PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.12.13
MailPoet – Newsletters, Email Marketing, and Automation v5.12.13
5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / vendor-prefixed / symfony / translation-contracts / TranslatorTrait.php
mailpoet / vendor-prefixed / symfony / translation-contracts Last commit date
Test 1 year ago LocaleAwareInterface.php 1 year ago TranslatableInterface.php 1 year ago TranslatorInterface.php 1 year ago TranslatorTrait.php 1 year ago index.php 3 years ago
TranslatorTrait.php
193 lines
1 <?php
2 namespace MailPoetVendor\Symfony\Contracts\Translation;
3 if (!defined('ABSPATH')) exit;
4 use MailPoetVendor\Symfony\Component\Translation\Exception\InvalidArgumentException;
5 trait TranslatorTrait
6 {
7 private $locale;
8 public function setLocale(string $locale)
9 {
10 $this->locale = $locale;
11 }
12 public function getLocale()
13 {
14 return $this->locale ?: (\class_exists(\Locale::class) ? \Locale::getDefault() : 'en');
15 }
16 public function trans(?string $id, array $parameters = [], ?string $domain = null, ?string $locale = null) : string
17 {
18 if (null === $id || '' === $id) {
19 return '';
20 }
21 if (!isset($parameters['%count%']) || !\is_numeric($parameters['%count%'])) {
22 return \strtr($id, $parameters);
23 }
24 $number = (float) $parameters['%count%'];
25 $locale = $locale ?: $this->getLocale();
26 $parts = [];
27 if (\preg_match('/^\\|++$/', $id)) {
28 $parts = \explode('|', $id);
29 } elseif (\preg_match_all('/(?:\\|\\||[^\\|])++/', $id, $matches)) {
30 $parts = $matches[0];
31 }
32 $intervalRegexp = <<<'EOF'
33 /^(?P<interval>
34 ({\s*
35 (\-?\d+(\.\d+)?[\s*,\s*\-?\d+(\.\d+)?]*)
36 \s*})
37 |
38 (?P<left_delimiter>[\[\]])
39 \s*
40 (?P<left>-Inf|\-?\d+(\.\d+)?)
41 \s*,\s*
42 (?P<right>\+?Inf|\-?\d+(\.\d+)?)
43 \s*
44 (?P<right_delimiter>[\[\]])
45 )\s*(?P<message>.*?)$/xs
46 EOF;
47 $standardRules = [];
48 foreach ($parts as $part) {
49 $part = \trim(\str_replace('||', '|', $part));
50 // try to match an explicit rule, then fallback to the standard ones
51 if (\preg_match($intervalRegexp, $part, $matches)) {
52 if ($matches[2]) {
53 foreach (\explode(',', $matches[3]) as $n) {
54 if ($number == $n) {
55 return \strtr($matches['message'], $parameters);
56 }
57 }
58 } else {
59 $leftNumber = '-Inf' === $matches['left'] ? -\INF : (float) $matches['left'];
60 $rightNumber = \is_numeric($matches['right']) ? (float) $matches['right'] : \INF;
61 if (('[' === $matches['left_delimiter'] ? $number >= $leftNumber : $number > $leftNumber) && (']' === $matches['right_delimiter'] ? $number <= $rightNumber : $number < $rightNumber)) {
62 return \strtr($matches['message'], $parameters);
63 }
64 }
65 } elseif (\preg_match('/^\\w+\\:\\s*(.*?)$/', $part, $matches)) {
66 $standardRules[] = $matches[1];
67 } else {
68 $standardRules[] = $part;
69 }
70 }
71 $position = $this->getPluralizationRule($number, $locale);
72 if (!isset($standardRules[$position])) {
73 // when there's exactly one rule given, and that rule is a standard
74 // rule, use this rule
75 if (1 === \count($parts) && isset($standardRules[0])) {
76 return \strtr($standardRules[0], $parameters);
77 }
78 $message = \sprintf('Unable to choose a translation for "%s" with locale "%s" for value "%d". Double check that this translation has the correct plural options (e.g. "There is one apple|There are %%count%% apples").', $id, $locale, $number);
79 if (\class_exists(InvalidArgumentException::class)) {
80 throw new InvalidArgumentException($message);
81 }
82 throw new \InvalidArgumentException($message);
83 }
84 return \strtr($standardRules[$position], $parameters);
85 }
86 private function getPluralizationRule(float $number, string $locale) : int
87 {
88 $number = \abs($number);
89 switch ('pt_BR' !== $locale && 'en_US_POSIX' !== $locale && \strlen($locale) > 3 ? \substr($locale, 0, \strrpos($locale, '_')) : $locale) {
90 case 'af':
91 case 'bn':
92 case 'bg':
93 case 'ca':
94 case 'da':
95 case 'de':
96 case 'el':
97 case 'en':
98 case 'en_US_POSIX':
99 case 'eo':
100 case 'es':
101 case 'et':
102 case 'eu':
103 case 'fa':
104 case 'fi':
105 case 'fo':
106 case 'fur':
107 case 'fy':
108 case 'gl':
109 case 'gu':
110 case 'ha':
111 case 'he':
112 case 'hu':
113 case 'is':
114 case 'it':
115 case 'ku':
116 case 'lb':
117 case 'ml':
118 case 'mn':
119 case 'mr':
120 case 'nah':
121 case 'nb':
122 case 'ne':
123 case 'nl':
124 case 'nn':
125 case 'no':
126 case 'oc':
127 case 'om':
128 case 'or':
129 case 'pa':
130 case 'pap':
131 case 'ps':
132 case 'pt':
133 case 'so':
134 case 'sq':
135 case 'sv':
136 case 'sw':
137 case 'ta':
138 case 'te':
139 case 'tk':
140 case 'ur':
141 case 'zu':
142 return 1 == $number ? 0 : 1;
143 case 'am':
144 case 'bh':
145 case 'fil':
146 case 'fr':
147 case 'gun':
148 case 'hi':
149 case 'hy':
150 case 'ln':
151 case 'mg':
152 case 'nso':
153 case 'pt_BR':
154 case 'ti':
155 case 'wa':
156 return $number < 2 ? 0 : 1;
157 case 'be':
158 case 'bs':
159 case 'hr':
160 case 'ru':
161 case 'sh':
162 case 'sr':
163 case 'uk':
164 return 1 == $number % 10 && 11 != $number % 100 ? 0 : ($number % 10 >= 2 && $number % 10 <= 4 && ($number % 100 < 10 || $number % 100 >= 20) ? 1 : 2);
165 case 'cs':
166 case 'sk':
167 return 1 == $number ? 0 : ($number >= 2 && $number <= 4 ? 1 : 2);
168 case 'ga':
169 return 1 == $number ? 0 : (2 == $number ? 1 : 2);
170 case 'lt':
171 return 1 == $number % 10 && 11 != $number % 100 ? 0 : ($number % 10 >= 2 && ($number % 100 < 10 || $number % 100 >= 20) ? 1 : 2);
172 case 'sl':
173 return 1 == $number % 100 ? 0 : (2 == $number % 100 ? 1 : (3 == $number % 100 || 4 == $number % 100 ? 2 : 3));
174 case 'mk':
175 return 1 == $number % 10 ? 0 : 1;
176 case 'mt':
177 return 1 == $number ? 0 : (0 == $number || $number % 100 > 1 && $number % 100 < 11 ? 1 : ($number % 100 > 10 && $number % 100 < 20 ? 2 : 3));
178 case 'lv':
179 return 0 == $number ? 0 : (1 == $number % 10 && 11 != $number % 100 ? 1 : 2);
180 case 'pl':
181 return 1 == $number ? 0 : ($number % 10 >= 2 && $number % 10 <= 4 && ($number % 100 < 12 || $number % 100 > 14) ? 1 : 2);
182 case 'cy':
183 return 1 == $number ? 0 : (2 == $number ? 1 : (8 == $number || 11 == $number ? 2 : 3));
184 case 'ro':
185 return 1 == $number ? 0 : (0 == $number || $number % 100 > 0 && $number % 100 < 20 ? 1 : 2);
186 case 'ar':
187 return 0 == $number ? 0 : (1 == $number ? 1 : (2 == $number ? 2 : ($number % 100 >= 3 && $number % 100 <= 10 ? 3 : ($number % 100 >= 11 && $number % 100 <= 99 ? 4 : 5))));
188 default:
189 return 0;
190 }
191 }
192 }
193