diff --git a/metager/app/Localization.php b/metager/app/Localization.php index f1a3e08dfd7139d9b22987a994a147710873b60e..ba8e306f816c020203d735de0580f07bcf5bc45a 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 ee42f932a447f7aea7c9527164191e2300373002..bdab54ba764659396acc54dcfeb0c4aa4bc7c666 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 0000000000000000000000000000000000000000..8342aba67edc96d93ed9e9875b4da43a7c10e1bd --- /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 0000000000000000000000000000000000000000..42381e1ec474ebc1d754b8c49d8f893e59e88ab1 --- /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 0000000000000000000000000000000000000000..a159a9c9de2a58322c3eee947b5e28628209c3a5 --- /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 1c3be273d659a50cc04f2106cbfc2c10faa27edb..63c84f21d3c86cf3d8e0537b28135b8a053f85c1 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 0000000000000000000000000000000000000000..80bdb400a81b8d5abc76aed12716be097a96c82f --- /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 73c8646aedf70e3c756c0b4de65a7bd6113d011e..09637e9dc793404531cebda211ccff7e9ddad426 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 cfb7ab4052d192df686577bc662692e4e7f31dcb..6e17e95cb9d3419a4e0ef0370cb92d9443cc4392 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 ee88c1676e77c8b97a0aa70f7a7eaf70d7ca6bd1..5f7d87c508b65ce36bea38c026b225f9d39c55a1 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 ff2773147fc2cfad2ee38d969432f1a09bbddf85..02496b4aeade17e0a1d8d36d0b410d60085035f7 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")