Added language selector at the panel

This commit is contained in:
Pinga 2023-08-29 12:41:26 +03:00
parent 01caf929a1
commit 75073dae34
4 changed files with 44 additions and 18 deletions

View file

@ -9,10 +9,10 @@ use Psr\Container\ContainerInterface;
class HomeController extends Controller
{
public function index(Request $request, Response $response)
{
public function index(Request $request, Response $response)
{
return view($response,'index.twig');
}
}
public function dashboard(Request $request, Response $response)
{
@ -20,21 +20,21 @@ class HomeController extends Controller
$users = $userModel->getAllUsers();
return view($response,'admin/dashboard/index.twig', compact('users'));
}
public function mode(Request $request, Response $response)
{
if ($_SESSION['_screen_mode'] == 'dark') {
$_SESSION['_screen_mode'] = 'light';
} else {
$_SESSION['_screen_mode'] = 'dark';
}
if ($_SESSION['_screen_mode'] == 'dark') {
$_SESSION['_screen_mode'] = 'light';
} else {
$_SESSION['_screen_mode'] = 'dark';
}
$referer = $request->getHeaderLine('Referer');
if (!empty($referer)) {
return $response->withHeader('Location', $referer)->withStatus(302);
}
return $response->withHeader('Location', '/dashboard')->withStatus(302);
}
public function avatar(Request $request, Response $response)
{
$avatar = new \LasseRafn\InitialAvatarGenerator\InitialAvatar();
@ -44,4 +44,19 @@ class HomeController extends Controller
return $psrResponse;
}
public function lang(Request $request, Response $response)
{
$data = $request->getQueryParams();
if (!empty($data)) {
$_SESSION['_lang'] = array_key_first($data);
} else {
unset($_SESSION['_lang']);
}
$referer = $request->getHeaderLine('Referer');
if (!empty($referer)) {
return $response->withHeader('Location', $referer)->withStatus(302);
}
return $response->withHeader('Location', '/dashboard')->withStatus(302);
}
}

View file

@ -44,11 +44,18 @@ $routeParser = $app->getRouteCollector()->getRouteParser();
require_once __DIR__ . '/database.php';
$desiredLanguage = 'en_US'; // Default language
// Known set of languages
$allowedLanguages = ['en_US', 'uk_UA', 'es_ES']; // Add more as needed
// Check for a URL parameter
if (isset($_GET['lang'])) {
$desiredLanguage = $_GET['lang'];
if (isset($_SESSION['_lang']) && in_array($_SESSION['_lang'], $allowedLanguages)) {
// Use regex to validate the format: two letters, underscore, two letters
if (preg_match('/^[a-z]{2}_[A-Z]{2}$/', $_SESSION['_lang'])) {
$desiredLanguage = $_SESSION['_lang'];
} else {
$desiredLanguage = 'en_US';
}
} else {
$desiredLanguage = 'en_US';
}
$languageFile = '../lang/' . $desiredLanguage . '/messages.po';

View file

@ -30,10 +30,13 @@
<div class="navbar-nav flex-row order-md-last">
<div class="nav-item d-none d-md-flex me-3">
<div class="btn-list">
<a href="https://github.com/getnamingo/registry" class="btn" target="_blank" rel="noreferrer">
<svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" /></svg>
Source code
</a>
<div class="dropdown">
<a href="#" class="btn dropdown-toggle" data-bs-toggle="dropdown"><span class="flag flag-country-gb-eng"></span>&nbsp;English</a>
<div class="dropdown-menu">
<a href="/lang?en_US" class="dropdown-item"><span class="flag flag-country-gb-eng"></span>&nbsp;English</a>
<a href="/lang?uk_UA" class="dropdown-item"><span class="flag flag-country-ua"></span>&nbsp;Ukrainian</a>
</div>
</div>
</div>
</div>
<div class="d-none d-md-flex">

View file

@ -45,6 +45,7 @@ $app->group('', function ($route) {
$route->get('/profile/plans', ProfileController::class .':plans')->setName('plans');
$route->get('/profile/invoices', ProfileController::class .':invoices')->setName('invoices');
$route->get('/mode', HomeController::class .':mode')->setName('mode');
$route->get('/lang', HomeController::class .':lang')->setName('lang');
$route->get('/avatar', HomeController::class .':avatar')->setName('avatar');
$route->get('/logout', AuthController::class . ':logout')->setName('logout');
$route->post('/change-password', PasswordController::class . ':changePassword')->setName('change.password');