PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 4.17.1
MailPoet – Newsletters, Email Marketing, and Automation v4.17.1
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 / nesbot / carbon / src / Carbon / AbstractTranslator.php
mailpoet / vendor-prefixed / nesbot / carbon / src / Carbon Last commit date
Exceptions 3 years ago Lang 3 years ago List 3 years ago Traits 3 years ago AbstractTranslator.php 3 years ago Carbon.php 4 years ago CarbonConverterInterface.php 4 years ago CarbonImmutable.php 4 years ago CarbonInterface.php 3 years ago CarbonInterval.php 3 years ago CarbonPeriod.php 3 years ago CarbonTimeZone.php 3 years ago Factory.php 4 years ago FactoryImmutable.php 4 years ago Language.php 4 years ago Translator.php 4 years ago TranslatorImmutable.php 4 years ago TranslatorStrongTypeInterface.php 4 years ago index.php 3 years ago
AbstractTranslator.php
190 lines
1 <?php
2 namespace MailPoetVendor\Carbon;
3 if (!defined('ABSPATH')) exit;
4 use Closure;
5 use ReflectionException;
6 use ReflectionFunction;
7 use MailPoetVendor\Symfony\Component\Translation;
8 use MailPoetVendor\Symfony\Component\Translation\Formatter\MessageFormatterInterface;
9 use MailPoetVendor\Symfony\Component\Translation\Loader\ArrayLoader;
10 abstract class AbstractTranslator extends Translation\Translator
11 {
12 protected static $singletons = [];
13 protected $messages = [];
14 protected $directories = [];
15 protected $initializing = \false;
16 protected $aliases = ['me' => 'sr_Latn_ME', 'scr' => 'sh'];
17 public static function get($locale = null)
18 {
19 $locale = $locale ?: 'en';
20 $key = static::class === Translator::class ? $locale : static::class . '|' . $locale;
21 if (!isset(static::$singletons[$key])) {
22 static::$singletons[$key] = new static($locale);
23 }
24 return static::$singletons[$key];
25 }
26 public function __construct($locale, MessageFormatterInterface $formatter = null, $cacheDir = null, $debug = \false)
27 {
28 parent::setLocale($locale);
29 $this->initializing = \true;
30 $this->directories = [__DIR__ . '/Lang'];
31 $this->addLoader('array', new ArrayLoader());
32 parent::__construct($locale, $formatter, $cacheDir, $debug);
33 $this->initializing = \false;
34 }
35 public function getDirectories() : array
36 {
37 return $this->directories;
38 }
39 public function setDirectories(array $directories)
40 {
41 $this->directories = $directories;
42 return $this;
43 }
44 public function addDirectory(string $directory)
45 {
46 $this->directories[] = $directory;
47 return $this;
48 }
49 public function removeDirectory(string $directory)
50 {
51 $search = \rtrim(\strtr($directory, '\\', '/'), '/');
52 return $this->setDirectories(\array_filter($this->getDirectories(), function ($item) use($search) {
53 return \rtrim(\strtr($item, '\\', '/'), '/') !== $search;
54 }));
55 }
56 public function resetMessages($locale = null)
57 {
58 if ($locale === null) {
59 $this->messages = [];
60 return \true;
61 }
62 foreach ($this->getDirectories() as $directory) {
63 $data = @(include \sprintf('%s/%s.php', \rtrim($directory, '\\/'), $locale));
64 if ($data !== \false) {
65 $this->messages[$locale] = $data;
66 $this->addResource('array', $this->messages[$locale], $locale);
67 return \true;
68 }
69 }
70 return \false;
71 }
72 public function getLocalesFiles($prefix = '')
73 {
74 $files = [];
75 foreach ($this->getDirectories() as $directory) {
76 $directory = \rtrim($directory, '\\/');
77 foreach (\glob("{$directory}/{$prefix}*.php") as $file) {
78 $files[] = $file;
79 }
80 }
81 return \array_unique($files);
82 }
83 public function getAvailableLocales($prefix = '')
84 {
85 $locales = [];
86 foreach ($this->getLocalesFiles($prefix) as $file) {
87 $locales[] = \substr($file, \strrpos($file, '/') + 1, -4);
88 }
89 return \array_unique(\array_merge($locales, \array_keys($this->messages)));
90 }
91 protected function translate(?string $id, array $parameters = [], ?string $domain = null, ?string $locale = null) : string
92 {
93 if ($domain === null) {
94 $domain = 'messages';
95 }
96 $catalogue = $this->getCatalogue($locale);
97 $format = $this instanceof TranslatorStrongTypeInterface ? $this->getFromCatalogue($catalogue, (string) $id, $domain) : $this->getCatalogue($locale)->get((string) $id, $domain);
98 // @codeCoverageIgnore
99 if ($format instanceof Closure) {
100 // @codeCoverageIgnoreStart
101 try {
102 $count = (new ReflectionFunction($format))->getNumberOfRequiredParameters();
103 } catch (ReflectionException $exception) {
104 $count = 0;
105 }
106 // @codeCoverageIgnoreEnd
107 return $format(...\array_values($parameters), ...\array_fill(0, \max(0, $count - \count($parameters)), null));
108 }
109 return parent::trans($id, $parameters, $domain, $locale);
110 }
111 protected function loadMessagesFromFile($locale)
112 {
113 return isset($this->messages[$locale]) || $this->resetMessages($locale);
114 }
115 public function setMessages($locale, $messages)
116 {
117 $this->loadMessagesFromFile($locale);
118 $this->addResource('array', $messages, $locale);
119 $this->messages[$locale] = \array_merge($this->messages[$locale] ?? [], $messages);
120 return $this;
121 }
122 public function setTranslations($messages)
123 {
124 return $this->setMessages($this->getLocale(), $messages);
125 }
126 public function getMessages($locale = null)
127 {
128 return $locale === null ? $this->messages : $this->messages[$locale];
129 }
130 public function setLocale($locale)
131 {
132 $locale = \preg_replace_callback('/[-_]([a-z]{2,}|\\d{2,})/', function ($matches) {
133 // _2-letters or YUE is a region, _3+-letters is a variant
134 $upper = \strtoupper($matches[1]);
135 if ($upper === 'YUE' || $upper === 'ISO' || \strlen($upper) < 3) {
136 return "_{$upper}";
137 }
138 return '_' . \ucfirst($matches[1]);
139 }, \strtolower($locale));
140 $previousLocale = $this->getLocale();
141 if ($previousLocale === $locale && isset($this->messages[$locale])) {
142 return \true;
143 }
144 unset(static::$singletons[$previousLocale]);
145 if ($locale === 'auto') {
146 $completeLocale = \setlocale(\LC_TIME, '0');
147 $locale = \preg_replace('/^([^_.-]+).*$/', '$1', $completeLocale);
148 $locales = $this->getAvailableLocales($locale);
149 $completeLocaleChunks = \preg_split('/[_.-]+/', $completeLocale);
150 $getScore = function ($language) use($completeLocaleChunks) {
151 return self::compareChunkLists($completeLocaleChunks, \preg_split('/[_.-]+/', $language));
152 };
153 \usort($locales, function ($first, $second) use($getScore) {
154 return $getScore($second) <=> $getScore($first);
155 });
156 $locale = $locales[0];
157 }
158 if (isset($this->aliases[$locale])) {
159 $locale = $this->aliases[$locale];
160 }
161 // If subtag (ex: en_CA) first load the macro (ex: en) to have a fallback
162 if (\str_contains($locale, '_') && $this->loadMessagesFromFile($macroLocale = \preg_replace('/^([^_]+).*$/', '$1', $locale))) {
163 parent::setLocale($macroLocale);
164 }
165 if (!$this->loadMessagesFromFile($locale) && !$this->initializing) {
166 return \false;
167 }
168 parent::setLocale($locale);
169 return \true;
170 }
171 public function __debugInfo()
172 {
173 return ['locale' => $this->getLocale()];
174 }
175 private static function compareChunkLists($referenceChunks, $chunks)
176 {
177 $score = 0;
178 foreach ($referenceChunks as $index => $chunk) {
179 if (!isset($chunks[$index])) {
180 $score++;
181 continue;
182 }
183 if (\strtolower($chunks[$index]) === \strtolower($chunk)) {
184 $score += 10;
185 }
186 }
187 return $score;
188 }
189 }
190