public async void CustomRequestCultureProviderThatGetsCultureInfoFromUrl() { using (var server = TestServer.Create(app => { var options = new RequestLocalizationOptions() { SupportedCultures = new List<CultureInfo> { new CultureInfo("ar") }, SupportedUICultures = new List<CultureInfo> { new CultureInfo("ar") } }; options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(context => { var culture = GetCultureInfoFromUrl(context, options.SupportedCultures); var requestCulture = new ProviderCultureResult(culture); return Task.FromResult(requestCulture); })); app.UseRequestLocalization(options, defaultRequestCulture: new RequestCulture("en-US")); app.Run(context => { var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCulture = requestCultureFeature.RequestCulture; Assert.Equal("ar", requestCulture.Culture.Name); return Task.FromResult(0); }); })) { var client = server.CreateClient(); var response = await client.GetAsync("/ar/page"); } }
public override Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext) { string cultureCode = null; if (httpContext.Request.Path.HasValue && httpContext.Request.Path.Value.Length >= 4 && httpContext.Request.Path.Value[0] == '/' && httpContext.Request.Path.Value[3] == '/') cultureCode = httpContext.Request.Path.Value.Substring(1, 2); else cultureCode = "en"; ProviderCultureResult requestCulture = new ProviderCultureResult(cultureCode); return Task.FromResult(requestCulture); }
/// <inheritdoc /> public override Task <ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext) { if (httpContext == null) { throw new ArgumentNullException(nameof(httpContext)); } var request = httpContext.Request; if (!request.QueryString.HasValue) { return(Task.FromResult((ProviderCultureResult)null)); } string queryCulture = null; string queryUICulture = null; if (!string.IsNullOrWhiteSpace(QueryStringKey)) { queryCulture = request.Query[QueryStringKey]; } if (!string.IsNullOrWhiteSpace(UIQueryStringKey)) { queryUICulture = request.Query[UIQueryStringKey]; } if (queryCulture == null && queryUICulture == null) { // No values specified for either so no match return(Task.FromResult((ProviderCultureResult)null)); } if (queryCulture != null && queryUICulture == null) { // Value for culture but not for UI culture so default to culture value for both queryUICulture = queryCulture; } if (queryCulture == null && queryUICulture != null) { // Value for UI culture but not for culture so default to UI culture value for both queryCulture = queryUICulture; } var providerResultCulture = new ProviderCultureResult(queryCulture, queryUICulture); return(Task.FromResult(providerResultCulture)); }
/// <inheritdoc /> public override Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext) { if (httpContext == null) { throw new ArgumentNullException(nameof(httpContext)); } var request = httpContext.Request; if (!request.QueryString.HasValue) { return Task.FromResult((ProviderCultureResult)null); } string queryCulture = null; string queryUICulture = null; if (!string.IsNullOrWhiteSpace(QueryStringKey)) { queryCulture = request.Query[QueryStringKey]; } if (!string.IsNullOrWhiteSpace(UIQueryStringKey)) { queryUICulture = request.Query[UIQueryStringKey]; } if (queryCulture == null && queryUICulture == null) { // No values specified for either so no match return Task.FromResult((ProviderCultureResult)null); } if (queryCulture != null && queryUICulture == null) { // Value for culture but not for UI culture so default to culture value for both queryUICulture = queryCulture; } if (queryCulture == null && queryUICulture != null) { // Value for UI culture but not for culture so default to UI culture value for both queryCulture = queryUICulture; } var providerResultCulture = new ProviderCultureResult(queryCulture, queryUICulture); return Task.FromResult(providerResultCulture); }