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