49 lines
1.6 KiB
C#

using EnvelopeGenerator.Application.Resources;
using EnvelopeGenerator.Web.Extensions;
using EnvelopeGenerator.Web.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Localization;
namespace EnvelopeGenerator.Web.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class LocalizationController : ControllerBase
{
private readonly ILogger<LocalizationController> _logger;
private readonly IStringLocalizer<Resource> _localizer;
private readonly Cultures _cultures;
public LocalizationController(IStringLocalizer<Resource> localizer, Cultures cultures, ILogger<LocalizationController> logger)
{
_localizer = localizer;
_cultures = cultures;
_logger = logger;
}
[HttpGet]
public IActionResult GetLocalized([FromQuery] string[]? name = null, [FromQuery] string[]? ignore = null)
{
ignore ??= Array.Empty<string>();
var pairs = name?.ToDictionary(n => n, n => _localizer[n].Value)
?? _localizer.GetAllStrings().Where(ls => !ignore.Contains(ls.Name)).ToDictionary(ls => ls.Name, ls => ls.Value); ;
return Ok(pairs);
}
[HttpPost("lang/{culture}")]
public IActionResult SetLanguage([FromRoute] string culture)
{
if (!_cultures.Languages.Contains(culture))
return BadRequest();
Response.Cookies.SetCulture(culture);
return Redirect(Request.Headers["Referer"].ToString());
}
[HttpGet("lang")]
public IActionResult GetLanguages() => Ok(_cultures.Languages);
}
}