Я использую пакет Nuget Askmethat.Aspnet.JsonLocalizer для локализации файлов Json. Однако я заметил, что это работает только для уникального файла Json. На самом деле, в моем запуске, CS файл, я написал этот код:
services.AddJsonLocalization(options =>
{
options.ResourcesPath = "Json";
options.CacheDuration = TimeSpan.FromMinutes(15);
});
services.Configure<RequestLocalizationOptions>(options =>
{
var supportedCultures = new[]
{
new CultureInfo("en-US"),
new CultureInfo("fr-FR")
};
options.DefaultRequestCulture = new RequestCulture(culture: "en-US", uiCulture: "en-US");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
});
Поскольку путь к ресурсу был обозначен как «Json», мне пришлось поместить второй файл Json рядом с первым (было бы замечательно, если бы два файла Json не находились в одной папке). Поэтому я поместил два файла Json в папку с именем Json: AllMessages.json и localisation.json.
Теперь, чтобы прочитать AllMessages.son, я написал этот код в моем контроллере:
[Route("api/[controller]")]
[ApiController]
public class BotMessagesController : ControllerBase
{
private readonly IStringLocalizerFactory _sharedLocalizerFactory;
public BotMessagesController(IStringLocalizerFactory sharedLocalizerFactory)
{
_sharedLocalizerFactory = sharedLocalizerFactory;
}
// GET api/messages
[HttpGet()]
public ActionResult<IEnumerable<LocalizedString>> GetAllBotMessages()
{
IStringLocalizer jsonLocalizer = _sharedLocalizerFactory.Create("AllMessages", "S4B.Diagnostic.API.Json");
IEnumerable<LocalizedString> jsonResult = jsonLocalizer.GetAllStrings();
return Ok(jsonResult);
}
}
Однако в моем результате json я получаю ресурсы из обоих файлов json, как будто имя файла json, переданное в качестве параметра методу _sharedLocalizerFactory.Create, не имеет значения.