From 1a630eb3e16c700615dfda7bd4a25e9d3e075a35 Mon Sep 17 00:00:00 2001 From: Dominik Hebeler <dominik@suma-ev.de> Date: Tue, 13 Sep 2022 13:49:13 +0200 Subject: [PATCH] added basic language selection page --- metager/app/Localization.php | 24 +++++++++++++++++++ metager/config/laravellocalization.php | 8 +++---- metager/lang/de/lang-selector.php | 13 ++++++++++ metager/lang/en/lang-selector.php | 9 +++++++ .../less/metager/pages/lang-selector.less | 3 +++ metager/resources/views/index.blade.php | 2 +- .../resources/views/lang-selector.blade.php | 18 ++++++++++++++ .../views/layouts/researchandtabs.blade.php | 2 +- .../views/layouts/subPages.blade.php | 2 +- metager/routes/web.php | 5 ++++ metager/webpack.mix.js | 1 + 11 files changed, 80 insertions(+), 7 deletions(-) create mode 100644 metager/lang/de/lang-selector.php create mode 100644 metager/lang/en/lang-selector.php create mode 100644 metager/resources/less/metager/pages/lang-selector.less create mode 100644 metager/resources/views/lang-selector.blade.php diff --git a/metager/app/Localization.php b/metager/app/Localization.php index f1a3e08df..ba8e306f8 100644 --- a/metager/app/Localization.php +++ b/metager/app/Localization.php @@ -70,4 +70,28 @@ class Localization } return $current_region; } + + /** + * Returns the supported Locales grouped by language and sorted by native name within the group + */ + public static function getLanguageSelectorLocales() + { + $locales = []; + + foreach (LaravelLocalization::getSupportedLocales() as $locale => $locale_details) { + if (\preg_match("/^([a-zA-Z]+)-/", $locale, $matches)) { + $locales[$matches[1]][$locale] = $locale_details["native"]; + } + } + + // Sort languages + \ksort($locales); + + // Sort locales in the languages + foreach ($locales as $language => &$tmp_locales) { + ksort($tmp_locales); + } + + return $locales; + } } diff --git a/metager/config/laravellocalization.php b/metager/config/laravellocalization.php index ee42f932a..bdab54ba7 100644 --- a/metager/config/laravellocalization.php +++ b/metager/config/laravellocalization.php @@ -44,11 +44,11 @@ return [ //'guz' => ['name' => 'Ekegusii', 'script' => 'Latn', 'native' => 'Ekegusii', 'regional' => ''], //'en' => ['name' => 'English', 'script' => 'Latn', 'native' => 'English', 'regional' => 'en_GB'], //'en-AU' => ['name' => 'Australian English', 'script' => 'Latn', 'native' => 'Australian English', 'regional' => 'en_AU'], - 'en-UK' => ['name' => 'English (UK)', 'script' => 'Latn', 'native' => 'English (UK)', 'regional' => 'en_UK'], + 'en-UK' => ['name' => 'English (UK)', 'script' => 'Latn', 'native' => 'English (United Kingdom)', 'regional' => 'en_UK'], //'en-CA' => ['name' => 'Canadian English', 'script' => 'Latn', 'native' => 'Canadian English', 'regional' => 'en_CA'], - 'en-US' => ['name' => 'English (US)', 'script' => 'Latn', 'native' => 'English (US)', 'regional' => 'en_US'], - 'en-IE' => ['name' => 'English (Ireland)', 'script' => 'Latn', 'native' => 'English (IE)', 'regional' => 'en_IE'], - 'es-ES' => ['name' => 'Spanish (Spain)', 'script' => 'Latn', 'native' => 'Español (ES)', 'regional' => 'es_ES'], + 'en-US' => ['name' => 'English (US)', 'script' => 'Latn', 'native' => 'English (USA)', 'regional' => 'en_US'], + 'en-IE' => ['name' => 'English (Ireland)', 'script' => 'Latn', 'native' => 'English (Ireland)', 'regional' => 'en_IE'], + 'es-ES' => ['name' => 'Spanish (Spain)', 'script' => 'Latn', 'native' => 'Español (España)', 'regional' => 'es_ES'], //'eo' => ['name' => 'Esperanto', 'script' => 'Latn', 'native' => 'esperanto', 'regional' => ''], //'eu' => ['name' => 'Basque', 'script' => 'Latn', 'native' => 'euskara', 'regional' => 'eu_ES'], //'ewo' => ['name' => 'Ewondo', 'script' => 'Latn', 'native' => 'ewondo', 'regional' => ''], diff --git a/metager/lang/de/lang-selector.php b/metager/lang/de/lang-selector.php new file mode 100644 index 000000000..8342aba67 --- /dev/null +++ b/metager/lang/de/lang-selector.php @@ -0,0 +1,13 @@ +<?php + +return [ + "h1.1" => "Sprachauswahl", + + "p.1" => "Nachfolgend finden Sie eine Liste aller derzeit von der MetaGer-Suche unterstützten Sprachen/Regionen. Ihre Suchergebnisse werden für die ausgewählte Region optimiert. Wir arbeiten daran auch in weiteren Regionen verfügbar zu sein.", + + "lang" => [ + "de" => "Deutsch", + "en" => "Englisch", + "es" => "Spanisch" + ], +]; diff --git a/metager/lang/en/lang-selector.php b/metager/lang/en/lang-selector.php new file mode 100644 index 000000000..42381e1ec --- /dev/null +++ b/metager/lang/en/lang-selector.php @@ -0,0 +1,9 @@ +<?php + +return [ + "lang" => [ + "de" => "German", + "en" => "English", + "es" => "Spanish", + ], +]; diff --git a/metager/resources/less/metager/pages/lang-selector.less b/metager/resources/less/metager/pages/lang-selector.less new file mode 100644 index 000000000..a159a9c9d --- /dev/null +++ b/metager/resources/less/metager/pages/lang-selector.less @@ -0,0 +1,3 @@ +a.active { + text-decoration: underline; +} \ No newline at end of file diff --git a/metager/resources/views/index.blade.php b/metager/resources/views/index.blade.php index 1c3be273d..63c84f21d 100644 --- a/metager/resources/views/index.blade.php +++ b/metager/resources/views/index.blade.php @@ -9,7 +9,7 @@ <a class="logo" href="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), "/") }}"> <img src="/img/metager.svg" alt="MetaGer" /> </a> - <a class="lang" href="#"> + <a class="lang" href="{{ LaravelLocalization::getLocalizedURL(null, route("lang-selector")) }}"> <span>{{ App\Localization::getRegion() }}</span> </a> </h1> diff --git a/metager/resources/views/lang-selector.blade.php b/metager/resources/views/lang-selector.blade.php new file mode 100644 index 000000000..80bdb400a --- /dev/null +++ b/metager/resources/views/lang-selector.blade.php @@ -0,0 +1,18 @@ +@extends('layouts.subPages', ['page' => 'key']) + +@section('title', $title ) + +@section('content') +<h1>{{ __("lang-selector.h1.1") }}</h1> +<p>{{ __("lang-selector.p.1") }}</p> +<div id="languages"> + @foreach(App\Localization::getLanguageSelectorLocales() as $language => $locales) + <h2>{{ trans("lang-selector.lang.$language", [], $language) }}</h2> + <ul> + @foreach($locales as $locale => $locale_native) + <li><a @if(LaravelLocalization::getCurrentLocale() === $locale)class="active" @endif rel="alternate" hreflang="{{ LaravelLocalization::getSupportedLocales()[$locale]["regional"] }}" href="{{ LaravelLocalization::getLocalizedURL($locale) }}">{{ $locale_native }}</a></li> + @endforeach + </ul> + @endforeach +</div> +@endsection \ No newline at end of file diff --git a/metager/resources/views/layouts/researchandtabs.blade.php b/metager/resources/views/layouts/researchandtabs.blade.php index 73c8646ae..09637e9dc 100644 --- a/metager/resources/views/layouts/researchandtabs.blade.php +++ b/metager/resources/views/layouts/researchandtabs.blade.php @@ -9,7 +9,7 @@ <a class="screen-small" href="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), "/") }}" @if(!empty($metager) && $metager->isFramed())target="_top" @endif> <h1><img src="/img/metager-schloss-orange.svg" alt="MetaGer" /></h1> </a> - <a class="lang" href="#"> + <a class="lang" href="{{ LaravelLocalization::getLocalizedURL(null, route("lang-selector")) }}"> <span>{{ App\Localization::getRegion() }}</span> </a> </div> diff --git a/metager/resources/views/layouts/subPages.blade.php b/metager/resources/views/layouts/subPages.blade.php index cfb7ab405..6e17e95cb 100644 --- a/metager/resources/views/layouts/subPages.blade.php +++ b/metager/resources/views/layouts/subPages.blade.php @@ -5,7 +5,7 @@ <a class="navbar-brand" href="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), "/") }}"> <h1><img src="/img/metager.svg" alt="MetaGer" /></h1> </a> - <a class="lang" href="#"> + <a class="lang" href="{{ LaravelLocalization::getLocalizedURL(null, route("lang-selector")) }}"> <span>{{ App\Localization::getRegion() }}</span> </a> </div> diff --git a/metager/routes/web.php b/metager/routes/web.php index ee88c1676..5f7d87c50 100644 --- a/metager/routes/web.php +++ b/metager/routes/web.php @@ -303,6 +303,11 @@ Route::get('MG20', function () { Route::get('databund', function () { return redirect('https://metager.de/klassik/databund'); }); +Route::get("lang", function () { + return view('lang-selector') + ->with("title", trans("titles.lang-selector")) + ->with('css', [mix('css/lang-selector.css')]); +})->name("lang-selector"); Route::get('languages', 'LanguageController@createOverview'); Route::get('synoptic/{exclude?}/{chosenFile?}', 'LanguageController@createSynopticEditPage'); Route::post('synoptic/{exclude?}/{chosenFile?}', 'LanguageController@processSynopticPageInput'); diff --git a/metager/webpack.mix.js b/metager/webpack.mix.js index ff2773147..02496b4ae 100644 --- a/metager/webpack.mix.js +++ b/metager/webpack.mix.js @@ -26,6 +26,7 @@ mix .less("resources/less/metager/pages/key.less", "public/css/key.css") .less("resources/less/metager/pages/key-dark.less", "public/css/key-dark.css") .less("resources/less/utility.less", "public/css/utility.css") + .less("resources/less/metager/pages/lang-selector.less", "public/css/lang-selector.css") .less("resources/less/metager/pages/plugin-page.less", "public/css/plugin-page.css") .less("resources/less/metager/pages/count/style-dark.less", "public/css/count/dark.css") .less("resources/less/metager/pages/count/style.less", "public/css/count/style.css") -- GitLab