Локализация необработанных исключений приложения
Я пытаюсь отображать сообщения об ошибках на языке локали, и для всех обработанных исключений моя команда использует файл ресурсов для отображения на местном языке, но есть ли способ перехватить промежуточное ПО для отображения необработанных исключений приложения на языке локали?
2 ответа
Стандартные исключения.NET локализованы, и язык сообщений будет зависеть от текущей культуры потоков. Таким образом, для того, чтобы заставить его работать, вам нужно реализовать RequestCultureMiddleware, который бы изменял язык в зависимости от ваших потребностей. Вот пример:
public class RequestCultureMiddleware
{
private readonly RequestDelegate next;
public RequestCultureMiddleware(RequestDelegate next)
{
this.next = next;
}
public async Task Invoke(HttpContext context)
{
// Get it from HTTP context as needed
var language = "fr-FR";
var culture = new System.Globalization.CultureInfo(language);
System.Threading.Thread.CurrentThread.CurrentCulture = culture;
await next(context);
}
}
Зарегистрируйте это до MVC в Startup
учебный класс:
app.UseMiddleware(typeof(RequestCultureMiddleware));
app.UseMvc();
Обратите внимание: отображение сообщения об исключении здесь не рассматривается.
В начале нашего приложения у нас есть строка кода, похожая на
config.Services.Replace(typeof(IExceptionHandler), new UnhandledExceptionHandler());
и это, кажется, ловит ошибки.
У нас также есть универсальный маршрут в конце наших таблиц маршрутов, который выглядит как
config.Routes.MapHttpRoute(
name: "NotImplemented",
routeTemplate: "{*data}",
defaults: new { controller = "Error", action = "notimplemented", data = UrlParameter.Optional });
где мы называем один и тот же код. Вы можете проверить заголовок Accept-Language, чтобы сделать предположение, какую локаль может использовать ваш абонент. Повторно опубликуйте конкретный вопрос, если вам нужна помощь с этим аспектом.