lang selection (fix #7)

This commit is contained in:
DrMaxNix 2024-02-25 18:06:26 +01:00
parent 7a491122d1
commit 442da207d2
5 changed files with 85 additions and 4 deletions

28
init.php Normal file
View File

@ -0,0 +1,28 @@
<?php
declare(strict_types = 1);
namespace Kimendisch\Thi_Hub;
use Flake\Lang;
use Flake\Lang_Dict;
// DATA CLASS FOR STORING GLOBAL DATA //
class Data {
/**
* @var string $lang Lang code for current client.
*/
public static string $lang;
/**
* @var Lang $lang_object Lang object for current client.
*/
public static Lang $lang_object;
/**
* @var Lang_Dict $dict Dict object for current client.
*/
public static Lang_Dict $dict;
}
?>

View File

@ -5,7 +5,10 @@
// DEPENDENCIES // // DEPENDENCIES //
// used extensions // used extensions
static::$ext[] = "excuse"; static::$ext[] = "project";
static::$ext[] = "lang";
static::$ext[] = "request";
static::$ext[] = "url";
// ROUTES // // ROUTES //
@ -16,6 +19,7 @@
// pages // pages
static::$route["thi-hub.de"] = [ static::$route["thi-hub.de"] = [
["path" => "", "target" => "page/start"] ["path" => "", "target" => "page/start"],
["path" => ":lang", "target" => "page/start"],
]; ];
?> ?>

41
page/lang_autoselect.php Normal file
View File

@ -0,0 +1,41 @@
<?php
declare(strict_types = 1);
namespace Kimendisch\Thi_Hub;
use Flake\Project;
use Flake\Lang;
use Flake\Lang_Dict;
use Flake\Request;
use Flake\Url_redirect;
// MAYBE REDIRECT //
// get selected language
$param_lang = Project::param("lang");
// validate
if(!in_array($param_lang, ["de", "en"])){
// try to find best language
unset($_GET["lang"]);
if(isset($_COOKIE[Lang::COOKIE_NAME])) unset($_COOKIE[Lang::COOKIE_NAME]);
$lang = new Lang(list: ["de", "en"], default: "de");
// redirect
$path_raw = Request::path_raw();
if($param_lang !== null) $path_raw = array_splice($path_raw, 1);
array_unshift($path_raw, $lang->get());
$path_raw_full = implode("/", $path_raw);
Url_redirect::path_modify($path_raw_full);
}
// LANGUAGE MANAGER //
// hack: fake get param from url path
$_GET["lang"] = $param_lang;
// initialize
Data::$lang_object = new Lang(list: ["de", "en"], default: "de");
Data::$lang = Data::$lang_object->get();
// load dict
Data::$dict = new Lang_Dict(Data::$lang_object);
require("./page/strings.php");
?>

View File

@ -1,7 +1,7 @@
<?php <?php
declare(strict_types = 1); declare(strict_types = 1);
namespace Kimendisch\Thi_Hub; namespace Kimendisch\Thi_Hub;
use Flake\Excuse;
Excuse::show("service_unavailable"); // AUTOSELECT LANGUAGE //
require("./page/lang_autoselect.php");
?> ?>

8
page/strings.php Normal file
View File

@ -0,0 +1,8 @@
<?php
declare(strict_types = 1);
namespace Kimendisch\Thi_Hub;
$dict->define([
]);
?>