91 lines
3.0 KiB
C#
91 lines
3.0 KiB
C#
using DigitalData.Core.API;
|
|
using EnvelopeGenerator.Application.Resources;
|
|
using EnvelopeGenerator.Common;
|
|
using Microsoft.AspNetCore.Localization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.Extensions.Caching.Memory;
|
|
using Microsoft.Extensions.Localization;
|
|
|
|
namespace EnvelopeGenerator.GeneratorAPI.Controllers
|
|
{
|
|
[Route("api/[controller]")]
|
|
[ApiController]
|
|
public class LocalizationController : ControllerBase
|
|
{
|
|
private static readonly Guid L_KEY = Guid.NewGuid();
|
|
|
|
private readonly ILogger<LocalizationController> _logger;
|
|
private readonly IStringLocalizer<Model> _mLocalizer;
|
|
private readonly IStringLocalizer<Resource> _localizer;
|
|
private readonly IMemoryCache _cache;
|
|
|
|
public LocalizationController(
|
|
ILogger<LocalizationController> logger,
|
|
IStringLocalizer<Resource> localizer,
|
|
IMemoryCache memoryCache,
|
|
IStringLocalizer<Model> _modelLocalizer)
|
|
{
|
|
_logger = logger;
|
|
_localizer = localizer;
|
|
_cache = memoryCache;
|
|
_mLocalizer = _modelLocalizer;
|
|
}
|
|
|
|
[HttpGet]
|
|
public IActionResult GetAll() => Ok(_cache.GetOrCreate(Language ?? string.Empty + L_KEY, _ => _mLocalizer.ToDictionary()));
|
|
|
|
[HttpGet("lang")]
|
|
public IActionResult GetLanguage() => Language is null ? NotFound() : Ok(Language);
|
|
|
|
[HttpPost("lang")]
|
|
public IActionResult SetLanguage([FromQuery] string language)
|
|
{
|
|
if (string.IsNullOrEmpty(language))
|
|
return BadRequest();
|
|
|
|
Language = language;
|
|
return Ok();
|
|
}
|
|
|
|
[HttpDelete("lang")]
|
|
public IActionResult DeleteLanguage()
|
|
{
|
|
Language = null;
|
|
return Ok();
|
|
}
|
|
|
|
private string? Language
|
|
{
|
|
get
|
|
{
|
|
var cookieValue = Request.Cookies[CookieRequestCultureProvider.DefaultCookieName];
|
|
|
|
if (string.IsNullOrEmpty(cookieValue))
|
|
return null;
|
|
|
|
var culture = CookieRequestCultureProvider.ParseCookieValue(cookieValue)?.Cultures[0];
|
|
return culture?.Value ?? null;
|
|
}
|
|
set
|
|
{
|
|
if (value is null)
|
|
Response.Cookies.Delete(CookieRequestCultureProvider.DefaultCookieName);
|
|
else
|
|
{
|
|
var cookieOptions = new CookieOptions()
|
|
{
|
|
Expires = DateTimeOffset.UtcNow.AddYears(1),
|
|
Secure = false,
|
|
SameSite = SameSiteMode.Strict,
|
|
HttpOnly = true
|
|
};
|
|
|
|
Response.Cookies.Append(
|
|
CookieRequestCultureProvider.DefaultCookieName,
|
|
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(value)),
|
|
cookieOptions);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |