Skip to content

Commit 7b53bdd

Browse files
committed
Fix for #38: Fallback to wrong language preference when the top preference is unavailable
1 parent efcbb2a commit 7b53bdd

File tree

2 files changed

+64
-2
lines changed

2 files changed

+64
-2
lines changed

src/Microsoft.AspNet.Localization/AcceptLanguageHeaderRequestCultureProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public override Task<RequestCulture> DetermineRequestCulture([NotNull] HttpConte
5757

5858
requestCulture = ValidateRequestCulture(requestCulture);
5959

60-
if (requestCulture != null)
60+
if (requestCulture.Culture == culture)
6161
{
6262
return Task.FromResult(requestCulture);
6363
}

test/Microsoft.AspNet.Localization.Tests/AccessLanguageHeaderRequestCultureProviderTest.cs

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ namespace Microsoft.Framework.Localization.Tests
1616
public class AccessLanguageHeaderRequestCultureProviderTest
1717
{
1818
[Fact]
19-
public async void GetFallbackLanguage()
19+
public async void GetFallbackLanguage_ReturnsFirstNonNullCultureFromSupportedCultureList()
2020
{
2121
using (var server = TestServer.Create(app =>
2222
{
@@ -44,5 +44,67 @@ public async void GetFallbackLanguage()
4444
var response = await client.GetAsync(string.Empty);
4545
}
4646
}
47+
48+
[Fact]
49+
public async void GetFallbackLanguage_ReturnsFromSupportedCulture_AcceptLanguageListContainsSupportedCultures()
50+
{
51+
using (var server = TestServer.Create(app =>
52+
{
53+
var options = new RequestLocalizationOptions
54+
{
55+
DefaultRequestCulture = new RequestCulture(new CultureInfo("fr-FR")),
56+
SupportedCultures = new List<CultureInfo>
57+
{
58+
new CultureInfo("ar-SA"),
59+
new CultureInfo("en-US")
60+
}
61+
};
62+
app.UseRequestLocalization(options);
63+
app.Run(context =>
64+
{
65+
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
66+
var requestCulture = requestCultureFeature.RequestCulture;
67+
Assert.Equal("ar-SA", requestCulture.Culture.Name);
68+
return Task.FromResult(0);
69+
});
70+
}))
71+
{
72+
var client = server.CreateClient();
73+
client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("en-GB,ar-SA,en-US");
74+
var count = client.DefaultRequestHeaders.AcceptLanguage.Count;
75+
var response = await client.GetAsync(string.Empty);
76+
}
77+
}
78+
79+
[Fact]
80+
public async void GetFallbackLanguage_ReturnsDefault_AcceptLanguageListDoesnotContainSupportedCultures()
81+
{
82+
using (var server = TestServer.Create(app =>
83+
{
84+
var options = new RequestLocalizationOptions
85+
{
86+
DefaultRequestCulture = new RequestCulture(new CultureInfo("fr-FR")),
87+
SupportedCultures = new List<CultureInfo>
88+
{
89+
new CultureInfo("ar-SA"),
90+
new CultureInfo("af-ZA")
91+
}
92+
};
93+
app.UseRequestLocalization(options);
94+
app.Run(context =>
95+
{
96+
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
97+
var requestCulture = requestCultureFeature.RequestCulture;
98+
Assert.Equal("fr-FR", requestCulture.Culture.Name);
99+
return Task.FromResult(0);
100+
});
101+
}))
102+
{
103+
var client = server.CreateClient();
104+
client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("en-GB,ar-MA,en-US");
105+
var count = client.DefaultRequestHeaders.AcceptLanguage.Count;
106+
var response = await client.GetAsync(string.Empty);
107+
}
108+
}
47109
}
48110
}

0 commit comments

Comments
 (0)