PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 5.12.1
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v5.12.1
5.12.1 5.12.0 5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.10.0 4.11.0 4.12.0 4.13.0 4.13.2 4.13.3 4.13.4 4.13.5 4.14.0 4.14.1 4.14.2 4.15.0 4.15.1 4.15.2 4.15.3 4.2.0 4.3.0 4.3.1 4.4.1 4.4.2 4.5.0 4.6.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.10.0 5.2.0 5.2.1 5.2.2 5.3.0 5.3.1 5.3.2 5.3.3 5.6.0 5.6.1 5.7.0 5.7.1 5.8.0 5.8.1 5.8.2
matomo / app / core / Translation / Loader / DevelopmentLoader.php
matomo / app / core / Translation / Loader Last commit date
DevelopmentLoader.php 2 months ago JsonFileLoader.php 2 months ago LoaderCache.php 2 years ago LoaderInterface.php 2 months ago
DevelopmentLoader.php
79 lines
1 <?php
2
3 /**
4 * Matomo - free/libre analytics platform
5 *
6 * @link https://matomo.org
7 * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
8 */
9 namespace Piwik\Translation\Loader;
10
11 /**
12 * Loads a pseudo-language for developers.
13 */
14 class DevelopmentLoader implements \Piwik\Translation\Loader\LoaderInterface
15 {
16 public const LANGUAGE_ID = 'dev';
17 private const MAP = ["a" => 'ȧ', "A" => 'Ȧ', "b" => 'ƀ', "B" => 'Ɓ', "c" => 'ƈ', "C" => 'Ƈ', "d" => '', "D" => '', "e" => '', "E" => '', "f" => 'ƒ', "F" => 'Ƒ', "g" => 'ɠ', "G" => 'Ɠ', "h" => 'ħ', "H" => 'Ħ', "i" => 'ī', "I" => 'Ī', "j" => 'ĵ', "J" => 'Ĵ', "k" => 'ķ', "K" => 'Ķ', "l" => 'ŀ', "L" => 'Ŀ', "m" => 'ḿ', "M" => '', "n" => 'ƞ', "N" => 'Ƞ', "o" => 'ǿ', "O" => 'Ǿ', "p" => 'ƥ', "P" => 'Ƥ', "q" => 'ɋ', "Q" => 'Ɋ', "r" => 'ř', "R" => 'Ř', "s" => 'ş', "S" => 'Ş', "t" => 'ŧ', "T" => 'Ŧ', "v" => '', "V" => '', "u" => 'ŭ', "U" => 'Ŭ', "w" => '', "W" => '', "x" => '', "X" => '', "y" => '', "Y" => '', "z" => '', "Z" => ''];
18 /**
19 * @var LoaderInterface
20 */
21 private $loader;
22 /**
23 * @var string
24 */
25 private $fallbackLanguage = 'en';
26 /**
27 * @param LoaderInterface $loader Decorate another loader to add the pseudo-language.
28 */
29 public function __construct(\Piwik\Translation\Loader\LoaderInterface $loader)
30 {
31 $this->loader = $loader;
32 }
33 public function load($language, array $directories)
34 {
35 if ($language !== self::LANGUAGE_ID) {
36 return $this->loader->load($language, $directories);
37 }
38 return $this->getPseudoLocale($directories);
39 }
40 /**
41 * @param string[] $directories
42 * @return array<string, array<string, string>>
43 */
44 private function getPseudoLocale(array $directories) : array
45 {
46 $fallbackTranslations = $this->loader->load($this->fallbackLanguage, $directories);
47 $translations = [];
48 foreach ($fallbackTranslations as $section => $sectionFallbackTranslations) {
49 if ($section === 'Intl') {
50 $translations[$section] = $sectionFallbackTranslations;
51 continue;
52 }
53 $sectionTranslations = [];
54 foreach ($sectionFallbackTranslations as $key => $translation) {
55 $sectionTranslations[$key] = $this->pseudoLocalize($translation);
56 }
57 $translations[$section] = $sectionTranslations;
58 }
59 return $translations;
60 }
61 private function pseudoLocalize(string $translation) : string
62 {
63 $protectedTokens = [];
64 $tokenized = preg_replace_callback("/<[^>]+>|&[A-Za-z0-9#]+;|%%|%(?:[0-9]+[\$])?[+\\-0'#]*[0-9]*(?:\\.[0-9]+)?[bcdeEfFgGosuxX]/", function ($matches) use(&$protectedTokens) {
65 $token = "\x1d" . count($protectedTokens) . "\x1e";
66 $protectedTokens[$token] = $matches[0];
67 return $token;
68 }, $translation);
69 if ($tokenized === null) {
70 $tokenized = $translation;
71 }
72 $accented = strtr($tokenized, self::MAP);
73 if (!empty($protectedTokens)) {
74 $accented = strtr($accented, $protectedTokens);
75 }
76 return "[" . $accented . "]";
77 }
78 }
79