Browse Source

Merge pull request #21666 from abpframework/DefaultAbpRequestLocalizationOptionsProvider

Ignore `defaultLanguage` if there is only one language.
pull/21685/head
Engincan VESKE 2 years ago
committed by GitHub
parent
commit
2fb4545e00
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 16
      framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/DefaultAbpRequestLocalizationOptionsProvider.cs
  2. 14
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizationSettingHelper.cs

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

@ -4,6 +4,7 @@ using System.Globalization;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using DeviceDetectorNET;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Localization; using Microsoft.AspNetCore.Localization;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
@ -57,7 +58,7 @@ public class DefaultAbpRequestLocalizationOptionsProvider :
? new RequestLocalizationOptions() ? new RequestLocalizationOptions()
: new RequestLocalizationOptions : new RequestLocalizationOptions
{ {
DefaultRequestCulture = DefaultGetRequestCulture(defaultLanguage, languages), DefaultRequestCulture = GetDefaultRequestCulture(defaultLanguage, languages),
SupportedCultures = languages SupportedCultures = languages
.Select(l => l.CultureName) .Select(l => l.CultureName)
.Distinct() .Distinct()
@ -87,15 +88,22 @@ public class DefaultAbpRequestLocalizationOptionsProvider :
return _requestLocalizationOptions; return _requestLocalizationOptions;
} }
private static RequestCulture DefaultGetRequestCulture(string? defaultLanguage, IReadOnlyList<LanguageInfo> languages) private static RequestCulture GetDefaultRequestCulture(string? defaultLanguage, IReadOnlyList<LanguageInfo> languages)
{ {
if (defaultLanguage == null) if (defaultLanguage == null)
{ {
var firstLanguage = languages.First(); var firstLanguage = languages.FirstOrDefault() ?? new LanguageInfo("en", "en");
return new RequestCulture(firstLanguage.CultureName, firstLanguage.UiCultureName); return new RequestCulture(firstLanguage.CultureName, firstLanguage.UiCultureName);
} }
var (cultureName, uiCultureName) = LocalizationSettingHelper.ParseLanguageSetting(defaultLanguage); var (cultureName, uiCultureName) = LocalizationSettingHelper.ParseLanguageSetting(defaultLanguage);
if (languages.Any() && languages.All(l => l.CultureName != cultureName))
{
var firstLanguage = languages.First();
return new RequestCulture(firstLanguage.CultureName, firstLanguage.UiCultureName);
}
return new RequestCulture(cultureName, uiCultureName); return new RequestCulture(cultureName, uiCultureName);
} }
@ -106,4 +114,4 @@ public class DefaultAbpRequestLocalizationOptionsProvider :
_requestLocalizationOptions = null; _requestLocalizationOptions = null;
} }
} }
} }

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

@ -8,17 +8,25 @@ public static class LocalizationSettingHelper
/// Gets a setting value like "en-US;en" and returns as splitted values like ("en-US", "en"). /// Gets a setting value like "en-US;en" and returns as splitted values like ("en-US", "en").
/// </summary> /// </summary>
/// <param name="settingValue"></param> /// <param name="settingValue"></param>
/// <param name="defaultCultureName"></param>
/// <returns></returns> /// <returns></returns>
public static (string cultureName, string uiCultureName) ParseLanguageSetting([NotNull] string settingValue) public static (string cultureName, string uiCultureName) ParseLanguageSetting([NotNull] string settingValue, string defaultCultureName = "en")
{ {
Check.NotNull(settingValue, nameof(settingValue)); Check.NotNull(settingValue, nameof(settingValue));
if (!settingValue.Contains(";")) if (!settingValue.Contains(";"))
{ {
return (settingValue, settingValue); return CultureHelper.IsValidCultureCode(settingValue)
? (settingValue, settingValue)
: (defaultCultureName, defaultCultureName);
} }
var splitted = settingValue.Split(';'); var splitted = settingValue.Split(';');
return (splitted[0], splitted[1]); if (splitted.Length == 2 && CultureHelper.IsValidCultureCode(splitted[0]) && CultureHelper.IsValidCultureCode(splitted[1]))
{
return (splitted[0], splitted[1]);
}
return (defaultCultureName, defaultCultureName);
} }
} }

Loading…
Cancel
Save