Skip to content

Commit 2fb4545

Browse files
authored
Merge pull request #21666 from abpframework/DefaultAbpRequestLocalizationOptionsProvider
Ignore `defaultLanguage` if there is only one language.
2 parents f36ae3d + d091bde commit 2fb4545

File tree

2 files changed

+23
-7
lines changed

2 files changed

+23
-7
lines changed

framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/DefaultAbpRequestLocalizationOptionsProvider.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Linq;
55
using System.Threading;
66
using System.Threading.Tasks;
7+
using DeviceDetectorNET;
78
using Microsoft.AspNetCore.Builder;
89
using Microsoft.AspNetCore.Localization;
910
using Microsoft.Extensions.DependencyInjection;
@@ -57,7 +58,7 @@ public virtual async Task<RequestLocalizationOptions> GetLocalizationOptionsAsyn
5758
? new RequestLocalizationOptions()
5859
: new RequestLocalizationOptions
5960
{
60-
DefaultRequestCulture = DefaultGetRequestCulture(defaultLanguage, languages),
61+
DefaultRequestCulture = GetDefaultRequestCulture(defaultLanguage, languages),
6162
SupportedCultures = languages
6263
.Select(l => l.CultureName)
6364
.Distinct()
@@ -87,15 +88,22 @@ public virtual async Task<RequestLocalizationOptions> GetLocalizationOptionsAsyn
8788
return _requestLocalizationOptions;
8889
}
8990

90-
private static RequestCulture DefaultGetRequestCulture(string? defaultLanguage, IReadOnlyList<LanguageInfo> languages)
91+
private static RequestCulture GetDefaultRequestCulture(string? defaultLanguage, IReadOnlyList<LanguageInfo> languages)
9192
{
9293
if (defaultLanguage == null)
9394
{
94-
var firstLanguage = languages.First();
95+
var firstLanguage = languages.FirstOrDefault() ?? new LanguageInfo("en", "en");
9596
return new RequestCulture(firstLanguage.CultureName, firstLanguage.UiCultureName);
9697
}
9798

9899
var (cultureName, uiCultureName) = LocalizationSettingHelper.ParseLanguageSetting(defaultLanguage);
100+
101+
if (languages.Any() && languages.All(l => l.CultureName != cultureName))
102+
{
103+
var firstLanguage = languages.First();
104+
return new RequestCulture(firstLanguage.CultureName, firstLanguage.UiCultureName);
105+
}
106+
99107
return new RequestCulture(cultureName, uiCultureName);
100108
}
101109

@@ -106,4 +114,4 @@ public virtual async Task HandleEventAsync(LanguageChangedEto eventData)
106114
_requestLocalizationOptions = null;
107115
}
108116
}
109-
}
117+
}

framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizationSettingHelper.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,25 @@ public static class LocalizationSettingHelper
88
/// Gets a setting value like "en-US;en" and returns as splitted values like ("en-US", "en").
99
/// </summary>
1010
/// <param name="settingValue"></param>
11+
/// <param name="defaultCultureName"></param>
1112
/// <returns></returns>
12-
public static (string cultureName, string uiCultureName) ParseLanguageSetting([NotNull] string settingValue)
13+
public static (string cultureName, string uiCultureName) ParseLanguageSetting([NotNull] string settingValue, string defaultCultureName = "en")
1314
{
1415
Check.NotNull(settingValue, nameof(settingValue));
1516

1617
if (!settingValue.Contains(";"))
1718
{
18-
return (settingValue, settingValue);
19+
return CultureHelper.IsValidCultureCode(settingValue)
20+
? (settingValue, settingValue)
21+
: (defaultCultureName, defaultCultureName);
1922
}
2023

2124
var splitted = settingValue.Split(';');
22-
return (splitted[0], splitted[1]);
25+
if (splitted.Length == 2 && CultureHelper.IsValidCultureCode(splitted[0]) && CultureHelper.IsValidCultureCode(splitted[1]))
26+
{
27+
return (splitted[0], splitted[1]);
28+
}
29+
30+
return (defaultCultureName, defaultCultureName);
2331
}
2432
}

0 commit comments

Comments
 (0)