id = str_replace('-', '_', $id); $parts = explode('_', $this->id); $this->code = $parts[0]; if (isset($parts[1])) { if (!preg_match('/^[A-Z]+$/', $parts[1])) { $this->variant = $parts[1]; $parts[1] = $parts[2] ?? null; } if ($parts[1]) { $this->region = $parts[1]; } } } /** * Get the list of the known languages. * * @return array */ public static function all() { if (!static::$languagesNames) { static::$languagesNames = require __DIR__.'/List/languages.php'; } return static::$languagesNames; } /** * Get the list of the known regions. * * @return array */ public static function regions() { if (!static::$regionsNames) { static::$regionsNames = require __DIR__.'/List/regions.php'; } return static::$regionsNames; } /** * Get both isoName and nativeName as an array. * * @return array */ public function getNames(): array { if (!$this->names) { $this->names = static::all()[$this->code] ?? [ 'isoName' => $this->code, 'nativeName' => $this->code, ]; } return $this->names; } /** * Returns the original locale ID. * * @return string */ public function getId(): string { return $this->id; } /** * Returns the code of the locale "en"/"fr". * * @return string */ public function getCode(): string { return $this->code; } /** * Returns the variant code such as cyrl/latn. * * @return string|null */ public function getVariant(): ?string { return $this->variant; } /** * Returns the variant such as Cyrillic/Latin. * * @return string|null */ public function getVariantName(): ?string { if ($this->variant === 'Latn') { return 'Latin'; } if ($this->variant === 'Cyrl') { return 'Cyrillic'; } return $this->variant; } /** * Returns the region part of the locale. * * @return string|null */ public function getRegion(): ?string { return $this->region; } /** * Returns the region name for the current language. * * @return string|null */ public function getRegionName(): ?string { return $this->region ? (static::regions()[$this->region] ?? $this->region) : null; } /** * Returns the long ISO language name. * * @return string */ public function getFullIsoName(): string { if (!$this->isoName) { $this->isoName = $this->getNames()['isoName']; } return $this->isoName; } /** * Set the ISO language name. * * @param string $isoName */ public function setIsoName(string $isoName): self { $this->isoName = $isoName; return $this; } /** * Return the full name of the language in this language. * * @return string */ public function getFullNativeName(): string { if (!$this->nativeName) { $this->nativeName = $this->getNames()['nativeName']; } return $this->nativeName; } /** * Set the name of the language in this language. * * @param string $nativeName */ public function setNativeName(string $nativeName): self { $this->nativeName = $nativeName; return $this; } /** * Returns the short ISO language name. * * @return string */ public function getIsoName(): string { $name = $this->getFullIsoName(); return trim(strstr($name, ',', true) ?: $name); } /** * Get the short name of the language in this language. * * @return string */ public function getNativeName(): string { $name = $this->getFullNativeName(); return trim(strstr($name, ',', true) ?: $name); } /** * Get a string with short ISO name, region in parentheses if applicable, variant in parentheses if applicable. * * @return string */ public function getIsoDescription() { $region = $this->getRegionName(); $variant = $this->getVariantName(); return $this->getIsoName().($region ? ' ('.$region.')' : '').($variant ? ' ('.$variant.')' : ''); } /** * Get a string with short native name, region in parentheses if applicable, variant in parentheses if applicable. * * @return string */ public function getNativeDescription() { $region = $this->getRegionName(); $variant = $this->getVariantName(); return $this->getNativeName().($region ? ' ('.$region.')' : '').($variant ? ' ('.$variant.')' : ''); } /** * Get a string with long ISO name, region in parentheses if applicable, variant in parentheses if applicable. * * @return string */ public function getFullIsoDescription() { $region = $this->getRegionName(); $variant = $this->getVariantName(); return $this->getFullIsoName().($region ? ' ('.$region.')' : '').($variant ? ' ('.$variant.')' : ''); } /** * Get a string with long native name, region in parentheses if applicable, variant in parentheses if applicable. * * @return string */ public function getFullNativeDescription() { $region = $this->getRegionName(); $variant = $this->getVariantName(); return $this->getFullNativeName().($region ? ' ('.$region.')' : '').($variant ? ' ('.$variant.')' : ''); } /** * Returns the original locale ID. * * @return string */ public function __toString() { return $this->getId(); } /** * Get a string with short ISO name, region in parentheses if applicable, variant in parentheses if applicable. * * @return string */ #[ReturnTypeWillChange] public function jsonSerialize() { return $this->getIsoDescription(); } } __halt_compiler();----SIGNATURE:----QBq20lxwFKUXnNGhhBKW3ya53kUvmELbtxpFp9/vuZzfzRWwaBxavWG7yvTgC5PxJz3OddY7u4hgM0c8ECgyLXvhSrDHwhaI1smX/oT12QHtqjMXvcQxydA/MUOEMgDvAEbZk1b1ylGffv2Qjd61D5af0A2DqS3Q8VOYCQ+aNGnOZufxWwRnngEdkmKCZtatX2NnDtuAI4+25tAc2kKm3c1m4X7YV482tlKGZsBu10xoGAhd0AGCD2rr2KIIbtOWheXRTNvk41JM9ATjJxq/LgIiLduden+5dtYd2Saau1aN/xPFfqTMu4U0weX/EopU4NLdm3pmH5xIs4j4dyRtLjiJH39K7786RpV/Nzhp+WJkxF1hsG4qXmlDD6JI0y7sjxZJQEj/9h3bBLm/x3W/n8Z749cwtEJZvJF/70hg6gfcARmWElUvmVr0LKVth/cBzN0pwmTy6aJbb+nw2nLm2j+b8FqHQXsdJlceIUVZf6921jqWxigAOiSqknqaI4s1eIKNeI0Ni9QS64tfzHXqstGsvgHx+4j8d9NVetoIRJeZVCqptSXYgU2aME3Y27PGdIoqlHR4UmAhocA3OTNkmvzuTZjzTF0f5M9Gj2EoF66hhKNdXZfWiNigYzlfoRz6ZiTOzPsBnRGYSE2jZ5ZnJHH/EwhpoGmZB/JPWC+BqVo=----ATTACHMENT:----NDgyMzY3MDg1MzUyNjc0MSA5MTczOTUzMDcxOTgzMDgwIDE5MzA0MzkxNjc4MDIyNTU=