using System.Globalization; namespace Yavsc { using Microsoft.AspNet.Mvc.Filters; using Microsoft.Extensions.Logging; public class LanguageActionFilter : ActionFilterAttribute { private readonly ILogger _logger; public LanguageActionFilter(ILoggerFactory loggerFactory) { _logger = loggerFactory.CreateLogger("LanguageActionFilter"); } public override void OnActionExecuting(ActionExecutingContext context) { string culture = null; var routedCulture = context.RouteData.Values["culture"]; if (routedCulture != null) { culture = routedCulture.ToString(); _logger.LogInformation($"Setting the culture from the URL: {culture}"); } else { if (context.HttpContext.Request.Headers.ContainsKey("accept-language")) { // fr,en-US;q=0.7,en;q=0.3 string spec = context.HttpContext.Request.Headers["accept-language"]; _logger.LogInformation($"Setting the culture from language header spec: {spec}"); string firstpart = spec.Split(';')[0]; foreach (string lang in firstpart.Split(',')) { // TODO do it from the given options ... // just take the main part :-) string mainlang = lang.Split('-')[0]; if (mainlang=="fr"||mainlang=="en") { culture = mainlang; _logger.LogInformation($"Setting the culture from header: {culture}"); break; } } } } if (culture != null) { #if DNX451 System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo(culture); System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture); #else CultureInfo.CurrentCulture = new CultureInfo(culture); CultureInfo.CurrentUICulture = new CultureInfo(culture); #endif } base.OnActionExecuting(context); } } }