default localization fix
This commit is contained in:
		
							parent
							
								
									623e5dbbc8
								
							
						
					
					
						commit
						975d434add
					
				| @ -102,7 +102,7 @@ namespace Core\API { | |||||||
|       $sql = $this->context->getSQL(); |       $sql = $this->context->getSQL(); | ||||||
| 
 | 
 | ||||||
|       $user = new User(); |       $user = new User(); | ||||||
|       $user->language = Language::DEFAULT_LANGUAGE(false); |       $user->language = Language::DEFAULT_LANGUAGE(); | ||||||
|       $user->registeredAt = new \DateTime(); |       $user->registeredAt = new \DateTime(); | ||||||
|       $user->password = $this->hashPassword($password); |       $user->password = $this->hashPassword($password); | ||||||
|       $user->name = $username; |       $user->name = $username; | ||||||
|  | |||||||
| @ -63,6 +63,17 @@ class Context { | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   public function setLanguage(Language $language): void { |   public function setLanguage(Language $language): void { | ||||||
|  | 
 | ||||||
|  |     // 1st: check if the language really exists...
 | ||||||
|  |     if ($language->getId() === null) { | ||||||
|  |       $language = Language::findBy(Language::createBuilder($this->sql, true) | ||||||
|  |         ->whereEq("code", $language->getCode())); | ||||||
|  |       if ($language === false || $language === null) { | ||||||
|  |         // if not, load the default language
 | ||||||
|  |         $language = Language::DEFAULT_LANGUAGE(); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     $this->language = $language; |     $this->language = $language; | ||||||
|     $this->language->activate(); |     $this->language->activate(); | ||||||
| 
 | 
 | ||||||
| @ -120,13 +131,15 @@ class Context { | |||||||
|       } |       } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // set language by priority: 1. GET parameter, 2. cookie, 3. user's settings
 |     // set language by priority: 1. GET parameter, 2. cookie, 3. user's settings, 4. accept-language header
 | ||||||
|     if (isset($_GET['lang']) && is_string($_GET["lang"]) && !empty($_GET["lang"])) { |     if (isset($_GET['lang']) && is_string($_GET["lang"]) && !empty($_GET["lang"])) { | ||||||
|       $this->updateLanguage($_GET['lang']); |       $this->updateLanguage($_GET['lang']); | ||||||
|     } else if (isset($_COOKIE['lang']) && is_string($_COOKIE["lang"]) && !empty($_COOKIE["lang"])) { |     } else if (isset($_COOKIE['lang']) && is_string($_COOKIE["lang"]) && !empty($_COOKIE["lang"])) { | ||||||
|       $this->updateLanguage($_COOKIE['lang']); |       $this->updateLanguage($_COOKIE['lang']); | ||||||
|     } else if ($this->user) { |     } else if ($this->user) { | ||||||
|       $this->setLanguage($this->user->language); |       $this->setLanguage($this->user->language); | ||||||
|  |     } else { | ||||||
|  |       $this->setLanguage(Language::fromHeader()); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -6,7 +6,6 @@ namespace Core\Objects\DatabaseEntity { | |||||||
|   use Core\Objects\DatabaseEntity\Attribute\Transient; |   use Core\Objects\DatabaseEntity\Attribute\Transient; | ||||||
|   use Core\Objects\DatabaseEntity\Controller\DatabaseEntity; |   use Core\Objects\DatabaseEntity\Controller\DatabaseEntity; | ||||||
| 
 | 
 | ||||||
|   // TODO: language from cookie?
 |  | ||||||
|   class Language extends DatabaseEntity { |   class Language extends DatabaseEntity { | ||||||
| 
 | 
 | ||||||
|     const AMERICAN_ENGLISH = 1; |     const AMERICAN_ENGLISH = 1; | ||||||
| @ -20,7 +19,7 @@ namespace Core\Objects\DatabaseEntity { | |||||||
| 
 | 
 | ||||||
|     #[Transient] protected array $entries = [];
 |     #[Transient] protected array $entries = [];
 | ||||||
| 
 | 
 | ||||||
|     public function __construct(int $id, string $code, string $name) { |     public function __construct(?int $id, string $code, string $name) { | ||||||
|       parent::__construct($id); |       parent::__construct($id); | ||||||
|       $this->code = $code; |       $this->code = $code; | ||||||
|       $this->name = $name; |       $this->name = $name; | ||||||
| @ -62,24 +61,7 @@ namespace Core\Objects\DatabaseEntity { | |||||||
|       return $LANGUAGE; |       return $LANGUAGE; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public static function DEFAULT_LANGUAGE(bool $fromCookie = true): Language { |     public static function DEFAULT_LANGUAGE(): Language { | ||||||
|       if ($fromCookie && isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { |  | ||||||
|         $acceptLanguage = $_SERVER['HTTP_ACCEPT_LANGUAGE']; |  | ||||||
|         $acceptedLanguages = explode(',', $acceptLanguage); |  | ||||||
|         foreach ($acceptedLanguages as $code) { |  | ||||||
|           if (strlen($code) == 2) { |  | ||||||
|             $code = $code . '_' . strtoupper($code); |  | ||||||
|           } |  | ||||||
| 
 |  | ||||||
|           $code = str_replace("-", "_", $code); |  | ||||||
|           if (!preg_match(self::LANG_CODE_PATTERN, $code)) { |  | ||||||
|             continue; |  | ||||||
|           } |  | ||||||
| 
 |  | ||||||
|           return new Language(0, $code, ""); |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       return self::getPredefinedValues()[0]; |       return self::getPredefinedValues()[0]; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -146,6 +128,27 @@ namespace Core\Objects\DatabaseEntity { | |||||||
|         new Language(Language::GERMAN_STANDARD, "de_DE", 'Deutsch (Standard)'), |         new Language(Language::GERMAN_STANDARD, "de_DE", 'Deutsch (Standard)'), | ||||||
|       ]; |       ]; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     public static function fromHeader(): ?Language { | ||||||
|  |       if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { | ||||||
|  |         $acceptLanguage = $_SERVER['HTTP_ACCEPT_LANGUAGE']; | ||||||
|  |         $acceptedLanguages = explode(',', $acceptLanguage); | ||||||
|  |         foreach ($acceptedLanguages as $code) { | ||||||
|  |           if (strlen($code) == 2) { | ||||||
|  |             $code = $code . '_' . strtoupper($code); | ||||||
|  |           } | ||||||
|  | 
 | ||||||
|  |           $code = str_replace("-", "_", $code); | ||||||
|  |           if (!preg_match(self::LANG_CODE_PATTERN, $code)) { | ||||||
|  |             continue; | ||||||
|  |           } | ||||||
|  | 
 | ||||||
|  |           return new Language(NULL, $code, ""); | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       return null; | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user