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 _logger; private readonly IStringLocalizer _localizer; private readonly Cultures _cultures; public LocalizationController(IStringLocalizer localizer, Cultures cultures, ILogger logger) { _localizer = localizer; _cultures = cultures; _logger = logger; } [HttpGet] public IActionResult GetLocalized([FromQuery] string[]? name = null, [FromQuery] string[]? ignore = null) { ignore ??= Array.Empty(); 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); } }