the browser-facing portion of osu!
at master 5.7 kB view raw
1<?php 2 3// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0. 4// See the LICENCE file in the repository root for full licence text. 5 6declare(strict_types=1); 7 8namespace App\Libraries; 9 10class LocaleMeta 11{ 12 // Keys must be a superset of app.available_locales. Additional locales are 13 // available for use only in wiki articles 14 const MAPPINGS = [ 15 'ar' => [ 16 'flag' => 'SA', 17 'name' => 'اَلْعَرَبِيَّةُ‎', 18 ], 19 'be' => [ 20 'flag' => 'BY', 21 'name' => 'беларуская мова', 22 ], 23 'bg' => [ 24 'flag' => 'BG', 25 'name' => 'български', 26 ], 27 'ca' => [ 28 'flag' => 'AD', // ES-CA in crowdin 29 'name' => 'català', 30 ], 31 'cs' => [ 32 'flag' => 'CZ', 33 'name' => 'česky', 34 ], 35 'da' => [ 36 'flag' => 'DK', 37 'name' => 'dansk', 38 ], 39 'de' => [ 40 'flag' => 'DE', 41 'name' => 'Deutsch', 42 ], 43 'el' => [ 44 'flag' => 'GR', 45 'name' => 'ελληνικά', 46 ], 47 'en' => [ 48 'flag' => 'GB', 49 'moment' => 'en-gb', 50 'name' => 'English', 51 ], 52 'es' => [ 53 'flag' => 'ES', 54 'name' => 'español', 55 ], 56 'fi' => [ 57 'flag' => 'FI', 58 'name' => 'suomi', 59 ], 60 'fil' => [ 61 'flag' => 'PH', 62 'name' => 'wikang Filipino', 63 ], 64 'fr' => [ 65 'flag' => 'FR', 66 'name' => 'français', 67 ], 68 'he' => [ 69 'flag' => 'IL', 70 'name' => 'עִבְרִית‎', 71 ], 72 'hu' => [ 73 'flag' => 'HU', 74 'name' => 'magyar', 75 ], 76 'id' => [ 77 'flag' => 'ID', 78 'name' => 'bahasa Indonesia', 79 ], 80 'it' => [ 81 'flag' => 'IT', 82 'name' => 'italiano', 83 ], 84 'ja' => [ 85 'flag' => 'JP', 86 'name' => '日本語', 87 ], 88 'ko' => [ 89 'flag' => 'KR', 90 'name' => '한국어', 91 ], 92 'lt' => [ 93 'flag' => 'LT', 94 'name' => 'lietuvių kalba', 95 ], 96 'nl' => [ 97 'flag' => 'NL', 98 'name' => 'Nederlands', 99 ], 100 'no' => [ 101 'flag' => 'NO', 102 'moment' => 'nb', 103 'name' => 'norsk', 104 ], 105 'pl' => [ 106 'flag' => 'PL', 107 'name' => 'polski', 108 ], 109 'pt' => [ 110 'flag' => 'PT', 111 'name' => 'português', 112 ], 113 'pt-br' => [ 114 'flag' => 'BR', 115 'html' => 'pt-BR', 116 'laravelPlural' => 'pt_BR', 117 'name' => 'português brasileiro', 118 ], 119 'ro' => [ 120 'flag' => 'RO', 121 'name' => 'română', 122 ], 123 'ru' => [ 124 'flag' => 'RU', 125 'name' => 'русский', 126 ], 127 'sk' => [ 128 'flag' => 'SK', 129 'name' => 'slovenčina', 130 ], 131 'sl' => [ 132 'flag' => 'SI', 133 'name' => 'slovenščina', 134 ], 135 'sr' => [ 136 'flag' => 'RS', 137 'moment' => 'sr-cyrl', 138 'name' => 'српски', 139 ], 140 'sv' => [ 141 'flag' => 'SE', 142 'name' => 'svenska', 143 ], 144 'th' => [ 145 'flag' => 'TH', 146 'name' => 'ไทย', 147 ], 148 'tr' => [ 149 'flag' => 'TR', 150 'name' => 'Türkçe', 151 ], 152 'uk' => [ 153 'flag' => 'UA', 154 'name' => 'українська мова', 155 ], 156 'vi' => [ 157 'flag' => 'VN', 158 'name' => 'tiếng Việt', 159 ], 160 'zh' => [ 161 'flag' => 'CN', 162 'moment' => 'zh-cn', 163 'name' => '简体中文', 164 ], 165 'zh-tw' => [ 166 'flag' => 'TW', 167 'html' => 'zh-TW', 168 'laravelPlural' => 'zh_TW', 169 'name' => '繁體中文(台灣)', 170 ], 171 ]; 172 173 private array $data; 174 private string $locale; 175 176 /** 177 * Return cached instance of specified locale. 178 * 179 * Only valid locale listed as key in MAPPINGS constant is accepted. 180 * Passing in invalid locale will result in error. 181 */ 182 public static function find(string $locale): self 183 { 184 static $instances = []; 185 186 return $instances[$locale] ??= new static($locale); 187 } 188 189 public static function isValid(?string $locale): bool 190 { 191 return isset(static::MAPPINGS[$locale]); 192 } 193 194 public static function sanitizeCode(?string $locale): ?string 195 { 196 if ($locale === null) { 197 return null; 198 } 199 200 $ret = strtolower($locale); 201 202 return static::isValid($ret) ? $ret : null; 203 } 204 205 public function __construct($locale) 206 { 207 $this->locale = $locale; 208 $this->data = static::MAPPINGS[$locale]; 209 } 210 211 public function flag(): string 212 { 213 return $this->data['flag']; 214 } 215 216 public function html(): string 217 { 218 return $this->data['html'] ?? $this->locale; 219 } 220 221 public function laravelPlural(): string 222 { 223 return $this->data['laravelPlural'] ?? $this->locale; 224 } 225 226 public function locale(): string 227 { 228 return $this->locale; 229 } 230 231 public function moment(): string 232 { 233 return $this->data['moment'] ?? $this->locale; 234 } 235 236 public function name(): string 237 { 238 return $this->data['name']; 239 } 240}