From 75efc234dd6738e48594f3460cfb79305af72183 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Fri, 27 Jul 2018 11:26:15 +0300 Subject: [PATCH] Refactor languages. --- .../LanguageSwitchViewComponent.cs | 19 ++++--------- .../AbpApplicationBuilderExtensions.cs | 10 ++----- .../Volo/Abp/Localization/ILanguageInfo.cs | 13 +++++++++ .../Volo/Abp/Localization/LanguageInfo.cs | 2 +- .../Localization/LanguageInfoExtensions.cs | 27 +++++++++++++++++++ .../Localization/LocalizationSettingHelper.cs | 25 +++++++++++++++++ 6 files changed, 73 insertions(+), 23 deletions(-) create mode 100644 framework/src/Volo.Abp.Localization/Volo/Abp/Localization/ILanguageInfo.cs create mode 100644 framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LanguageInfoExtensions.cs create mode 100644 framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizationSettingHelper.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/LanguageSwitch/LanguageSwitchViewComponent.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/LanguageSwitch/LanguageSwitchViewComponent.cs index 336dccecee..c6921d3210 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/LanguageSwitch/LanguageSwitchViewComponent.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/LanguageSwitch/LanguageSwitchViewComponent.cs @@ -1,10 +1,7 @@ -using System.Collections.Generic; -using System.Globalization; +using System.Globalization; using System.Linq; using System.Threading.Tasks; -using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Options; using Volo.Abp.Localization; namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Themes.Basic.Components.Toolbar.LanguageSwitch @@ -21,7 +18,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Themes.Basic.Components.Toolbar public async Task InvokeAsync() { var languages = await _languageProvider.GetLanguagesAsync(); - var currentLanguage = FindCurrentLanguage(languages); + var currentLanguage = languages.FindByCulture( + CultureInfo.CurrentCulture.Name, + CultureInfo.CurrentUICulture.Name + ); var model = new LanguageSwitchViewComponentModel { @@ -31,14 +31,5 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Themes.Basic.Components.Toolbar return View("~/Themes/Basic/Components/Toolbar/LanguageSwitch/Default.cshtml", model); } - - private LanguageInfo FindCurrentLanguage(IReadOnlyList languages) - { - return languages.FirstOrDefault(l => - l.CultureName == CultureInfo.CurrentCulture.Name && - l.UiCultureName == CultureInfo.CurrentUICulture.Name) - ?? languages.FirstOrDefault(l => l.CultureName == CultureInfo.CurrentCulture.Name) - ?? languages.FirstOrDefault(l => l.UiCultureName == CultureInfo.CurrentUICulture.Name); - } } } diff --git a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs index 9631e0aef2..7441e78130 100644 --- a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs @@ -98,14 +98,8 @@ namespace Microsoft.AspNetCore.Builder return new RequestCulture(firstLanguage.CultureName, firstLanguage.UiCultureName); } - if (!defaultLanguage.Contains(";")) - { - return new RequestCulture(defaultLanguage, defaultLanguage); - } - - var splitted = defaultLanguage.Split(';'); - return new RequestCulture(splitted[0], splitted[1]); - + var (cultureName, uiCultureName) = LocalizationSettingHelper.ParseLanguageSetting(defaultLanguage); + return new RequestCulture(cultureName, uiCultureName); } } } diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/ILanguageInfo.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/ILanguageInfo.cs new file mode 100644 index 0000000000..529278430d --- /dev/null +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/ILanguageInfo.cs @@ -0,0 +1,13 @@ +namespace Volo.Abp.Localization +{ + public interface ILanguageInfo + { + string CultureName { get; } + + string UiCultureName { get; } + + string DisplayName { get; } + + string FlagIcon { get; } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LanguageInfo.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LanguageInfo.cs index 7084e7205c..05d035044a 100644 --- a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LanguageInfo.cs +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LanguageInfo.cs @@ -4,7 +4,7 @@ using JetBrains.Annotations; namespace Volo.Abp.Localization { [Serializable] - public class LanguageInfo + public class LanguageInfo : ILanguageInfo { [NotNull] public virtual string CultureName { get; protected set; } diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LanguageInfoExtensions.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LanguageInfoExtensions.cs new file mode 100644 index 0000000000..bf972df1bd --- /dev/null +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LanguageInfoExtensions.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; +using System.Linq; +using JetBrains.Annotations; + +namespace Volo.Abp.Localization +{ + public static class LanguageInfoExtensions + { + public static T FindByCulture( + [NotNull] this IEnumerable languages, + [NotNull] string cultureName, + [CanBeNull] string uiCultureName = null) + where T : class, ILanguageInfo + { + if (uiCultureName == null) + { + uiCultureName = cultureName; + } + + var languageList = languages.ToList(); + + return languageList.FirstOrDefault(l => l.CultureName == cultureName && l.UiCultureName == uiCultureName) + ?? languageList.FirstOrDefault(l => l.CultureName == cultureName) + ?? languageList.FirstOrDefault(l => l.UiCultureName == uiCultureName); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizationSettingHelper.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizationSettingHelper.cs new file mode 100644 index 0000000000..4d9b222a05 --- /dev/null +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizationSettingHelper.cs @@ -0,0 +1,25 @@ +using JetBrains.Annotations; + +namespace Volo.Abp.Localization +{ + public static class LocalizationSettingHelper + { + /// + /// Gets a setting value like "en-US;en" and returns as splitted values like ("en-US", "en"). + /// + /// + /// + public static (string cultureName, string uiCultureName) ParseLanguageSetting([NotNull] string settingValue) + { + Check.NotNull(settingValue, nameof(settingValue)); + + if (!settingValue.Contains(";")) + { + return (settingValue, settingValue); + } + + var splitted = settingValue.Split(';'); + return (splitted[0], splitted[1]); + } + } +} \ No newline at end of file