49 lines
1.6 KiB
C#
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);
|
|
}
|
|
} |