public override async Task Invoke(IOwinContext context) { var requestCulture = Options.DefaultRequestCulture; IRequestCultureProvider winningProvider = null; if (Options.RequestCultureProviders != null) { foreach (var provider in this.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 (Options.SupportedUICultures != null) { uiCultureInfo = GetCultureInfo(uiCultures, Options.SupportedUICultures, Options.FallBackToParentUICultures); } if (cultureInfo == null && uiCultureInfo == null) { continue; } if (cultureInfo == null) { cultureInfo = Options.DefaultRequestCulture.Culture; } if (cultureInfo != null && uiCultureInfo == null) { uiCultureInfo = Options.DefaultRequestCulture.UICulture; } var result = new RequestCulture(cultureInfo, uiCultureInfo); requestCulture = result; winningProvider = provider; break; } } //context.Features.Set<IRequestCultureFeature>(new RequestCultureFeature(requestCulture, winningProvider)); SetCurrentThreadCulture(requestCulture); await Next.Invoke(context); }
/// <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("requestCulture"); } var seperator = _cookieSeparator[0].ToString(); return string.Join(seperator, string.Format("{0}{1}", _culturePrefix, requestCulture.Culture.Name), string.Format("{0}{1}", _uiCulturePrefix, requestCulture.UICulture.Name)); }
private static void SetCurrentThreadCulture(RequestCulture requestCulture) { Thread.CurrentThread.CurrentCulture = requestCulture.Culture; Thread.CurrentThread.CurrentUICulture = requestCulture.UICulture; }