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);
        }
Beispiel #3
0
        /// <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);
        }