Code
·
39 lines
·
1217 bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39using MailSharp.MailClient.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace MailSharp.MailClient.Controllers.Api;
// Translations must be available on the (logged-out) login page too, so this whole
// controller stays anonymous-accessible even though most other API controllers now require login.
[AllowAnonymous]
[ApiController]
[Route("api/language")]
public class LanguageApiController(LocalizationService localizer) : ControllerBase
{
[HttpGet("state")]
public IActionResult State() => Ok(BuildState(localizer.CurrentLanguage));
[HttpPost("set")]
public IActionResult Set(SetLanguageRequest request)
{
if (!localizer.LanguageExists(request.Lang)) return BadRequest();
Response.Cookies.Append("lang", request.Lang, new CookieOptions
{
Expires = DateTimeOffset.UtcNow.AddYears(1),
IsEssential = true,
SameSite = SameSiteMode.Lax,
HttpOnly = true
});
return Ok(BuildState(request.Lang));
}
private LanguageStateDto BuildState(string lang) => new()
{
Current = lang,
Languages = [.. localizer.AvailableLanguages().Select(l => new LanguageOptionDto { Code = l.Code, Name = l.Name })],
Strings = localizer.GetAllStrings(lang)
};
}