PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / trunk
Matomo Analytics – Powerful, Privacy-First Insights for WordPress vtrunk
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 1 month ago JsonFileLoader.php 1 month ago LoaderCache.php 2 years ago LoaderInterface.php 1 month 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