1c3437056SNickeau<?php 2c3437056SNickeau 3c3437056SNickeau 4c3437056SNickeaunamespace ComboStrap; 5c3437056SNickeau 6c3437056SNickeau 7*04fd306cSNickeauuse ComboStrap\Meta\Api\Metadata; 8*04fd306cSNickeauuse ComboStrap\Meta\Api\MetadataText; 9*04fd306cSNickeau 10c3437056SNickeauclass Locale extends MetadataText 11c3437056SNickeau{ 12c3437056SNickeau 13c3437056SNickeau const PROPERTY_NAME = "locale"; 14c3437056SNickeau 15*04fd306cSNickeau private string $separator = "_"; 16*04fd306cSNickeau 17*04fd306cSNickeau public static function createForPage(MarkupPath $page, string $separator = "_"): Locale 18c3437056SNickeau { 19c3437056SNickeau return (new Locale()) 20*04fd306cSNickeau ->setSeparator($separator) 21c3437056SNickeau ->setResource($page); 22c3437056SNickeau } 23c3437056SNickeau 24*04fd306cSNickeau static public function getTab(): string 25c3437056SNickeau { 26c3437056SNickeau return MetaManagerForm::TAB_LANGUAGE_VALUE; 27c3437056SNickeau } 28c3437056SNickeau 29*04fd306cSNickeau static public function getDescription(): string 30c3437056SNickeau { 31c3437056SNickeau return "The locale define the language and the formatting of numbers and time for the page. It's generated from the language and region metadata."; 32c3437056SNickeau } 33c3437056SNickeau 34*04fd306cSNickeau static public function getLabel(): string 35c3437056SNickeau { 36c3437056SNickeau return "Locale"; 37c3437056SNickeau } 38c3437056SNickeau 39*04fd306cSNickeau /** 40*04fd306cSNickeau * @return string 41*04fd306cSNickeau */ 42*04fd306cSNickeau public function getValue(): string 43c3437056SNickeau { 44c3437056SNickeau 45*04fd306cSNickeau $page = $this->getResource(); 46*04fd306cSNickeau if (!($page instanceof MarkupPath)) { 47*04fd306cSNickeau LogUtility::internalError("The locale is only implemented for page resources"); 48*04fd306cSNickeau return $this->getDefaultValue(); 49c3437056SNickeau } 50*04fd306cSNickeau $lang = $page->getLangOrDefault(); 51*04fd306cSNickeau $country = $page->getRegionOrDefault(); 52c3437056SNickeau 53*04fd306cSNickeau return $lang . $this->separator . strtoupper($country); 54*04fd306cSNickeau 55*04fd306cSNickeau 56c3437056SNickeau } 57c3437056SNickeau 58c3437056SNickeau 59c3437056SNickeau public static function getName(): string 60c3437056SNickeau { 61c3437056SNickeau return self::PROPERTY_NAME; 62c3437056SNickeau } 63c3437056SNickeau 64*04fd306cSNickeau static public function getPersistenceType(): string 65c3437056SNickeau { 66c3437056SNickeau return Metadata::DERIVED_METADATA; 67c3437056SNickeau } 68c3437056SNickeau 69*04fd306cSNickeau static public function isMutable(): bool 70c3437056SNickeau { 71c3437056SNickeau return false; 72c3437056SNickeau } 73c3437056SNickeau 74*04fd306cSNickeau /** 75*04fd306cSNickeau * @return string 76*04fd306cSNickeau */ 77*04fd306cSNickeau public function getDefaultValue(): string 78c3437056SNickeau { 79c3437056SNickeau /** 80c3437056SNickeau * The value of {@link locale_get_default()} is with an underscore 81c3437056SNickeau * We follow this lead 82c3437056SNickeau */ 83*04fd306cSNickeau return Site::getLocale($this->separator); 84c3437056SNickeau } 85c3437056SNickeau 86*04fd306cSNickeau static public function getCanonical(): string 87c3437056SNickeau { 88c3437056SNickeau return "locale"; 89c3437056SNickeau } 90c3437056SNickeau 91*04fd306cSNickeau /** 92*04fd306cSNickeau * @return string 93*04fd306cSNickeau */ 94*04fd306cSNickeau public function getValueOrDefault(): string 95*04fd306cSNickeau { 96*04fd306cSNickeau return $this->getValue(); 97*04fd306cSNickeau } 98c3437056SNickeau 99*04fd306cSNickeau public function setSeparator(string $separator): Locale 100*04fd306cSNickeau { 101*04fd306cSNickeau $this->separator = $separator; 102*04fd306cSNickeau return $this; 103*04fd306cSNickeau } 104*04fd306cSNickeau 105*04fd306cSNickeau 106*04fd306cSNickeau static public function isOnForm(): bool 107*04fd306cSNickeau { 108*04fd306cSNickeau return true; 109*04fd306cSNickeau } 110c3437056SNickeau} 111