Fix for #38: Fallback to wrong language preference when the top preference is unavailable
This commit is contained in:
parent
efcbb2a664
commit
7b53bdd43e
|
|
@ -57,7 +57,7 @@ namespace Microsoft.AspNet.Localization
|
||||||
|
|
||||||
requestCulture = ValidateRequestCulture(requestCulture);
|
requestCulture = ValidateRequestCulture(requestCulture);
|
||||||
|
|
||||||
if (requestCulture != null)
|
if (requestCulture.Culture == culture)
|
||||||
{
|
{
|
||||||
return Task.FromResult(requestCulture);
|
return Task.FromResult(requestCulture);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ namespace Microsoft.Framework.Localization.Tests
|
||||||
public class AccessLanguageHeaderRequestCultureProviderTest
|
public class AccessLanguageHeaderRequestCultureProviderTest
|
||||||
{
|
{
|
||||||
[Fact]
|
[Fact]
|
||||||
public async void GetFallbackLanguage()
|
public async void GetFallbackLanguage_ReturnsFirstNonNullCultureFromSupportedCultureList()
|
||||||
{
|
{
|
||||||
using (var server = TestServer.Create(app =>
|
using (var server = TestServer.Create(app =>
|
||||||
{
|
{
|
||||||
|
|
@ -44,5 +44,67 @@ namespace Microsoft.Framework.Localization.Tests
|
||||||
var response = await client.GetAsync(string.Empty);
|
var response = await client.GetAsync(string.Empty);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async void GetFallbackLanguage_ReturnsFromSupportedCulture_AcceptLanguageListContainsSupportedCultures()
|
||||||
|
{
|
||||||
|
using (var server = TestServer.Create(app =>
|
||||||
|
{
|
||||||
|
var options = new RequestLocalizationOptions
|
||||||
|
{
|
||||||
|
DefaultRequestCulture = new RequestCulture(new CultureInfo("fr-FR")),
|
||||||
|
SupportedCultures = new List<CultureInfo>
|
||||||
|
{
|
||||||
|
new CultureInfo("ar-SA"),
|
||||||
|
new CultureInfo("en-US")
|
||||||
|
}
|
||||||
|
};
|
||||||
|
app.UseRequestLocalization(options);
|
||||||
|
app.Run(context =>
|
||||||
|
{
|
||||||
|
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
|
||||||
|
var requestCulture = requestCultureFeature.RequestCulture;
|
||||||
|
Assert.Equal("ar-SA", requestCulture.Culture.Name);
|
||||||
|
return Task.FromResult(0);
|
||||||
|
});
|
||||||
|
}))
|
||||||
|
{
|
||||||
|
var client = server.CreateClient();
|
||||||
|
client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("en-GB,ar-SA,en-US");
|
||||||
|
var count = client.DefaultRequestHeaders.AcceptLanguage.Count;
|
||||||
|
var response = await client.GetAsync(string.Empty);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async void GetFallbackLanguage_ReturnsDefault_AcceptLanguageListDoesnotContainSupportedCultures()
|
||||||
|
{
|
||||||
|
using (var server = TestServer.Create(app =>
|
||||||
|
{
|
||||||
|
var options = new RequestLocalizationOptions
|
||||||
|
{
|
||||||
|
DefaultRequestCulture = new RequestCulture(new CultureInfo("fr-FR")),
|
||||||
|
SupportedCultures = new List<CultureInfo>
|
||||||
|
{
|
||||||
|
new CultureInfo("ar-SA"),
|
||||||
|
new CultureInfo("af-ZA")
|
||||||
|
}
|
||||||
|
};
|
||||||
|
app.UseRequestLocalization(options);
|
||||||
|
app.Run(context =>
|
||||||
|
{
|
||||||
|
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
|
||||||
|
var requestCulture = requestCultureFeature.RequestCulture;
|
||||||
|
Assert.Equal("fr-FR", requestCulture.Culture.Name);
|
||||||
|
return Task.FromResult(0);
|
||||||
|
});
|
||||||
|
}))
|
||||||
|
{
|
||||||
|
var client = server.CreateClient();
|
||||||
|
client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("en-GB,ar-MA,en-US");
|
||||||
|
var count = client.DefaultRequestHeaders.AcceptLanguage.Count;
|
||||||
|
var response = await client.GetAsync(string.Empty);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue