/// <summary> /// Creates a string representation of a <see cref="RequestCulture"/> for placement in a cookie. /// </summary> /// <param name="requestCulture">The <see cref="RequestCulture"/>.</param> /// <returns>The cookie value.</returns> public static string MakeCookieValue(RequestCulture requestCulture) { if (requestCulture == null) { throw new ArgumentNullException(nameof(requestCulture)); } var seperator = _cookieSeparator[0].ToString(); return(string.Join(seperator, $"{_culturePrefix}{requestCulture.Culture.Name}", $"{_uiCulturePrefix}{requestCulture.UICulture.Name}")); }
/// <summary> /// Invokes the logic of the middleware. /// </summary> /// <param name="context">The <see cref="HttpContext"/>.</param> /// <returns>A <see cref="Task"/> that completes when the middleware has completed processing.</returns> public async Task Invoke(HttpContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } var requestCulture = _options.DefaultRequestCulture; IRequestCultureProvider winningProvider = null; if (_options.RequestCultureProviders != null) { foreach (var provider in _options.RequestCultureProviders) { var providerResultCulture = await provider.DetermineProviderCultureResult(context); if (providerResultCulture == null) { continue; } var cultures = providerResultCulture.Cultures; var uiCultures = providerResultCulture.UICultures; CultureInfo cultureInfo = null; CultureInfo uiCultureInfo = null; if (_options.SupportedCultures != null) { cultureInfo = GetCultureInfo( cultures, _options.SupportedCultures, _options.FallBackToParentCultures); if (cultureInfo == null) { EnsureLogger(context); _logger?.UnsupportedCultures(provider.GetType().Name, cultures); } } if (_options.SupportedUICultures != null) { uiCultureInfo = GetCultureInfo( uiCultures, _options.SupportedUICultures, _options.FallBackToParentUICultures); if (uiCultureInfo == null) { EnsureLogger(context); _logger?.UnsupportedUICultures(provider.GetType().Name, uiCultures); } } if (cultureInfo == null && uiCultureInfo == null) { continue; } if (cultureInfo == null && uiCultureInfo != null) { cultureInfo = _options.DefaultRequestCulture.Culture; } if (cultureInfo != null && uiCultureInfo == null) { uiCultureInfo = _options.DefaultRequestCulture.UICulture; } var result = new RequestCulture(cultureInfo, uiCultureInfo); if (result != null) { requestCulture = result; winningProvider = provider; break; } } } context.Features.Set <IRequestCultureFeature>(new RequestCultureFeature(requestCulture, winningProvider)); SetCurrentThreadCulture(requestCulture); await _next(context); }
private static void SetCurrentThreadCulture(RequestCulture requestCulture) { CultureInfo.CurrentCulture = requestCulture.Culture; CultureInfo.CurrentUICulture = requestCulture.UICulture; }