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);
|
||||
|
||||
if (requestCulture != null)
|
||||
if (requestCulture.Culture == culture)
|
||||
{
|
||||
return Task.FromResult(requestCulture);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ namespace Microsoft.Framework.Localization.Tests
|
|||
public class AccessLanguageHeaderRequestCultureProviderTest
|
||||
{
|
||||
[Fact]
|
||||
public async void GetFallbackLanguage()
|
||||
public async void GetFallbackLanguage_ReturnsFirstNonNullCultureFromSupportedCultureList()
|
||||
{
|
||||
using (var server = TestServer.Create(app =>
|
||||
{
|
||||
|
|
@ -44,5 +44,67 @@ namespace Microsoft.Framework.Localization.Tests
|
|||
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