Integrierte Mehrsprachigkeit (Deutsch und Englisch) mit Cookie-basierter Sprachauswahl
This commit is contained in:
@@ -4,7 +4,6 @@
|
||||
@{
|
||||
ViewData["Title"] = "Dokument geschützt";
|
||||
var userLanguage = ViewData["UserLanguage"] as string;
|
||||
var languages = ViewData["Languages"] as string[];
|
||||
}
|
||||
<div class="page container py-5 px-2">
|
||||
<header class="text-center">
|
||||
@@ -14,72 +13,60 @@
|
||||
<path d="M9.5 6.5a1.5 1.5 0 0 1-1 1.415l.385 1.99a.5.5 0 0 1-.491.595h-.788a.5.5 0 0 1-.49-.595l.384-1.99a1.5 1.5 0 1 1 2-1.415" />
|
||||
</svg>
|
||||
</div>
|
||||
<h1>Dokument erfordert einen Zugriffscode</h1>
|
||||
<h1>@_localizer[WebKey.LockedTitle]</h1>
|
||||
</header>
|
||||
<section class="text-center">
|
||||
<p>Wir haben Ihnen gerade den Zugriffscode an die hinterlegte Email Adresse gesendet. Dies kann evtl. einige Minuten dauern.</p>
|
||||
<p>@_localizer[WebKey.LockedBody]</p>
|
||||
</section>
|
||||
<div class="row m-0 p-0">
|
||||
<div class="row m-0 p-0 justify-content-center">
|
||||
<div class="col-8">
|
||||
<form id="form-access-code" class="form ms-5" method="post">
|
||||
<div class="input">
|
||||
<label class="visually-hidden" for="access_code">Zugriffscode</label>
|
||||
<input type="password" id="access_code" class="form-control" name="access_code" placeholder="Zugriffscode" required="required">
|
||||
<label class="visually-hidden" for="access_code">@_localizer[WebKey.LockedTitle]</label>
|
||||
<input type="password" id="access_code" class="form-control" name="access_code" placeholder="@_localizer[WebKey.LockedAccessCode]" required="required">
|
||||
</div>
|
||||
<div class="button">
|
||||
<button type="submit" class="btn btn-primary">Öffnen</button>
|
||||
<button type="submit" class="btn btn-primary">@_localizer[WebKey.LocakedOpen]</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<form class="form ps-4" method="post" action="/lang">
|
||||
<div class="dropdown dropdown-flag">
|
||||
<select class="form-select select-flag" name="language" onchange="this.form.submit()">
|
||||
@if (languages is not null)
|
||||
foreach (var lang in languages)
|
||||
{
|
||||
<option class="select-option option-flag" value="@lang.TrySanitize(_sanitizer)">@_localizer[lang].Value.TrySanitize(_sanitizer)</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
</form>
|
||||
<div class="col-4 d-flex justify-content-center align-items-center">
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-outline-secondary dropdown-toggle" type="button" id="langDropdownMenuButton" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<span class="fi @_cultures.FIClassOf(userLanguage).TrySanitize(_sanitizer) me-2" id="selectedFlag"></span><span id="selectedLanguage"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu" aria-labelledby="langDropdownMenuButton">
|
||||
@foreach(var lang in _cultures.Languages)
|
||||
{
|
||||
<li>
|
||||
<a class="dropdown-item" data-language="@lang.TrySanitize(_sanitizer)" data-flag="@_cultures.FIClassOf(lang).TrySanitize(_sanitizer)">
|
||||
<span class="fi @_cultures.FIClassOf(lang).TrySanitize(_sanitizer) me-2"></span>@_localizer[lang].Value.TrySanitize(_sanitizer)
|
||||
</a>
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<section class="text-center">
|
||||
<details>
|
||||
<summary>Sie haben keinen Zugriffscode erhalten?</summary>
|
||||
<p>Bitte überprüfen Sie Ihr Email Postfach inklusive Spam-Ordner. Sie können auch den Absender bitten, Ihnen den Code auf anderem Wege zukommen zu lassen.</p>
|
||||
<summary>@_localizer[WebKey.LockedFooterTitle]</summary>
|
||||
<p>@_localizer[WebKey.LockedFooterBody]</p>
|
||||
</details>
|
||||
</section>
|
||||
</div>
|
||||
<footer class="container" id="page-footer">© SignFlow 2023-2024 <a href="https://digitaldata.works">Digital Data GmbH</a></footer>
|
||||
<script nonce="@nonce">
|
||||
$(document).ready(function () {
|
||||
$('.select-flag').select2({
|
||||
templateResult: formatResult,
|
||||
templateSelection: formatSelection
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
var dropdownItems = document.querySelectorAll('.dropdown-item');
|
||||
dropdownItems.forEach(function (item) {
|
||||
item.addEventListener('click', async function(event) {
|
||||
event.preventDefault();
|
||||
var language = this.getAttribute('data-language');
|
||||
var flagCode = this.getAttribute('data-flag');
|
||||
document.getElementById('selectedFlag').className = 'fi ' + flagCode + ' me-2';
|
||||
await setLanguage(language);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function formatResult(state) {
|
||||
if (!state.id) {
|
||||
return state.text;
|
||||
}
|
||||
var baseUrl = "/img/flags";
|
||||
var $state = $(
|
||||
`<span><img src="${baseUrl}/${state.element.value}.png" class="img-flag me-3" />${state.text}</span>`
|
||||
);
|
||||
return $state;
|
||||
};
|
||||
|
||||
function formatSelection(state) {
|
||||
if (!state.id) {
|
||||
return state.text;
|
||||
}
|
||||
var baseUrl = "/img/flags";
|
||||
var $state = $(
|
||||
`<span class="d-flex justify-content-center align-items-center"><img src="${baseUrl}/${state.element.value}.png" class="img-flag pt-1"/></span>`
|
||||
);
|
||||
return $state;
|
||||
};
|
||||
</script>
|
||||
</script>
|
||||
@@ -8,6 +8,7 @@
|
||||
<link rel="stylesheet" href="~/lib/sweetalert2/sweetalert2.min.css" />
|
||||
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true"/>
|
||||
<link rel="stylesheet" href="~/EnvelopeGenerator.Web.styles.css" asp-append-version="true"/>
|
||||
<link rel="stylesheet" href="~/lib/flag-icons-main/css/flag-icons.min.css" asp-append-version="true" />
|
||||
<link href="~/lib/select2/dist/css/select2.min.css" rel="stylesheet"/>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
@using EnvelopeGenerator.Web
|
||||
@using EnvelopeGenerator.Web.Models
|
||||
@using Microsoft.Extensions.Localization;
|
||||
@using EnvelopeGenerator.Application.Resources;
|
||||
@inject IStringLocalizer<Resource> _localizer;
|
||||
@using Microsoft.Extensions.Localization
|
||||
@using EnvelopeGenerator.Application
|
||||
@inject IStringLocalizer<Resource> _localizer
|
||||
@inject System.Text.Encodings.Web.UrlEncoder _encoder
|
||||
@inject Ganss.Xss.HtmlSanitizer _sanitizer
|
||||
@inject Microsoft.AspNetCore.Http.IHttpContextAccessor _accessor
|
||||
@inject Cultures _cultures
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||
Reference in New Issue
Block a user