Browse Source

Refactor languages.

pull/395/head
Halil ibrahim Kalkan 8 years ago
parent
commit
75efc234dd
  1. 19
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/LanguageSwitch/LanguageSwitchViewComponent.cs
  2. 10
      framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs
  3. 13
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/ILanguageInfo.cs
  4. 2
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LanguageInfo.cs
  5. 27
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LanguageInfoExtensions.cs
  6. 25
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizationSettingHelper.cs

19
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<IViewComponentResult> 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<LanguageInfo> 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);
}
}
}

10
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);
}
}
}

13
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; }
}
}

2
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; }

27
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<T>(
[NotNull] this IEnumerable<T> 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);
}
}
}

25
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
{
/// <summary>
/// Gets a setting value like "en-US;en" and returns as splitted values like ("en-US", "en").
/// </summary>
/// <param name="settingValue"></param>
/// <returns></returns>
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]);
}
}
}
Loading…
Cancel
Save