Browse Source

Refatoring BundleContributor Make it support LocalizationMapOptions

Resolve #4574
pull/4713/head
maliming 6 years ago
parent
commit
ef3cab9b08
  1. 13
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/AbpAspNetCoreMvcUiPackagesModule.cs
  2. 21
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/BootstrapDatepicker/BootstrapDatepickerScriptContributor.cs
  3. 40
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JQueryValidation/JQueryValidationScriptContributor.cs
  4. 18
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/Timeago/TimeagoScriptContributor.cs
  5. 11
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpLocalizationOptionsExtensions.cs

13
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/AbpAspNetCoreMvcUiPackagesModule.cs

@ -1,5 +1,7 @@
using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.BootstrapDatepicker; using Volo.Abp.AspNetCore.Mvc.UI.Packages.BootstrapDatepicker;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.JQueryValidation;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.Timeago;
using Volo.Abp.Localization; using Volo.Abp.Localization;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
@ -12,6 +14,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Packages
{ {
Configure<AbpLocalizationOptions>(options => Configure<AbpLocalizationOptions>(options =>
{ {
//BootstrapDatepicker
options.AddLanguagesMapOrUpdate(BootstrapDatepickerScriptContributor.PackageName, options.AddLanguagesMapOrUpdate(BootstrapDatepickerScriptContributor.PackageName,
new NameValue("zh-Hans", "zh-CN"), new NameValue("zh-Hans", "zh-CN"),
new NameValue("zh-Hant", "zh-TW")); new NameValue("zh-Hant", "zh-TW"));
@ -19,6 +22,16 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Packages
options.AddLanguageFilesMapOrUpdate(BootstrapDatepickerScriptContributor.PackageName, options.AddLanguageFilesMapOrUpdate(BootstrapDatepickerScriptContributor.PackageName,
new NameValue("zh-Hans", "zh-CN"), new NameValue("zh-Hans", "zh-CN"),
new NameValue("zh-Hant", "zh-TW")); new NameValue("zh-Hant", "zh-TW"));
//Timeago
options.AddLanguageFilesMapOrUpdate(TimeagoScriptContributor.PackageName,
new NameValue("zh-Hans", "zh_CN"),
new NameValue("zh-Hant", "zh_TW"));
//JQueryValidation
options.AddLanguageFilesMapOrUpdate(JQueryValidationScriptContributor.PackageName,
new NameValue("zh-Hans", "zh"),
new NameValue("zh-Hant", "zh_TW"));
}); });
} }
} }

21
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/BootstrapDatepicker/BootstrapDatepickerScriptContributor.cs

@ -1,5 +1,4 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization;
using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.JQuery; using Volo.Abp.AspNetCore.Mvc.UI.Packages.JQuery;
using Volo.Abp.Localization; using Volo.Abp.Localization;
@ -19,26 +18,12 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.BootstrapDatepicker
public override void ConfigureDynamicResources(BundleConfigurationContext context) public override void ConfigureDynamicResources(BundleConfigurationContext context)
{ {
var cultureName = CultureInfo.CurrentUICulture.DateTimeFormat.Calendar.AlgorithmType == var fileName = context.LocalizationOptions.GetCurrentUICultureLanguageFilesMap(PackageName);
CalendarAlgorithmType.LunarCalendar
? "en"
: CultureInfo.CurrentUICulture.Name;
TryAddCultureFile(context, cultureName);
}
protected virtual bool TryAddCultureFile(BundleConfigurationContext context, string cultureName)
{
var fileName = context.LocalizationOptions.GetLanguageFilesMap(PackageName, cultureName);
var filePath = $"/libs/bootstrap-datepicker/locales/bootstrap-datepicker.{fileName}.min.js"; var filePath = $"/libs/bootstrap-datepicker/locales/bootstrap-datepicker.{fileName}.min.js";
if (context.FileProvider.GetFileInfo(filePath).Exists)
if (!context.FileProvider.GetFileInfo(filePath).Exists)
{ {
return false; context.Files.AddIfNotContains(filePath);
} }
context.Files.AddIfNotContains(filePath);
return true;
} }
} }
} }

40
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JQueryValidation/JQueryValidationScriptContributor.cs

@ -1,5 +1,4 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization;
using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.JQuery; using Volo.Abp.AspNetCore.Mvc.UI.Packages.JQuery;
using Volo.Abp.Localization; using Volo.Abp.Localization;
@ -10,8 +9,6 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.JQueryValidation
[DependsOn(typeof(JQueryScriptContributor))] [DependsOn(typeof(JQueryScriptContributor))]
public class JQueryValidationScriptContributor : BundleContributor public class JQueryValidationScriptContributor : BundleContributor
{ {
public const string DefaultLocalizationFolder = "/libs/jquery-validation/localization/";
public const string PackageName = "jquery-validation"; public const string PackageName = "jquery-validation";
public override void ConfigureBundle(BundleConfigurationContext context) public override void ConfigureBundle(BundleConfigurationContext context)
@ -21,41 +18,12 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.JQueryValidation
public override void ConfigureDynamicResources(BundleConfigurationContext context) public override void ConfigureDynamicResources(BundleConfigurationContext context)
{ {
//TODO: Can we optimize these points: var fileName = context.LocalizationOptions.GetCurrentUICultureLanguageFilesMap(PackageName);
// - Can we get rid of context.FileProvider.GetFileInfo call? var filePath = $"/libs/jquery-validation/localization/messages_{fileName}.js";
// - What if the same Contributor is used twice for a page. if (context.FileProvider.GetFileInfo(filePath).Exists)
// Duplication is prevented by the bundle manager, however the logic below will execute twice
var cultureName = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName.Replace('-', '_');
var fileName = context.LocalizationOptions.GetLanguageFilesMap(PackageName, cultureName);
if (TryAddCultureFile(context, fileName))
{
return;
}
if (!cultureName.Contains("_"))
{
return;
}
fileName = context.LocalizationOptions.GetLanguageFilesMap(PackageName,
cultureName.Substring(0, cultureName.IndexOf('_')));
TryAddCultureFile(context, fileName);
}
protected virtual bool TryAddCultureFile(BundleConfigurationContext context, string cultureName)
{
var filePath = DefaultLocalizationFolder + "messages_" + cultureName + ".js";
var fileInfo = context.FileProvider.GetFileInfo(filePath);
if (!fileInfo.Exists)
{ {
return false; context.Files.AddIfNotContains(filePath);
} }
context.Files.AddIfNotContains(filePath);
return true;
} }
} }
} }

18
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/Timeago/TimeagoScriptContributor.cs

@ -1,7 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization;
using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.JQuery; using Volo.Abp.AspNetCore.Mvc.UI.Packages.JQuery;
using Volo.Abp.Localization;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.Timeago namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.Timeago
@ -9,6 +9,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.Timeago
[DependsOn(typeof(JQueryScriptContributor))] [DependsOn(typeof(JQueryScriptContributor))]
public class TimeagoScriptContributor : BundleContributor public class TimeagoScriptContributor : BundleContributor
{ {
public const string PackageName = "jquery.timeago";
public override void ConfigureBundle(BundleConfigurationContext context) public override void ConfigureBundle(BundleConfigurationContext context)
{ {
context.Files.AddIfNotContains("/libs/timeago/jquery.timeago.js"); context.Files.AddIfNotContains("/libs/timeago/jquery.timeago.js");
@ -16,17 +18,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.Timeago
public override void ConfigureDynamicResources(BundleConfigurationContext context) public override void ConfigureDynamicResources(BundleConfigurationContext context)
{ {
var cultureName = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName; var fileName = context.LocalizationOptions.GetCurrentUICultureLanguageFilesMap(PackageName);
if (cultureName.StartsWith("en")) var filePath = $"/libs/timeago/locales/jquery.timeago.{fileName}.js";
{ if (context.FileProvider.GetFileInfo(filePath).Exists)
return;
}
var cultureFileName = $"/libs/timeago/locales/jquery.timeago.{cultureName}.js";
if (context.FileProvider.GetFileInfo(cultureFileName).Exists)
{ {
context.Files.Add(cultureFileName); context.Files.Add(filePath);
} }
} }
} }

11
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpLocalizationOptionsExtensions.cs

@ -1,4 +1,5 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization;
using System.Linq; using System.Linq;
namespace Volo.Abp.Localization namespace Volo.Abp.Localization
@ -24,6 +25,11 @@ namespace Volo.Abp.Localization
: language; : language;
} }
public static string GetCurrentUICultureLanguagesMap(this AbpLocalizationOptions localizationOptions, string packageName)
{
return GetLanguagesMap(localizationOptions, packageName, CultureInfo.CurrentUICulture.Name);
}
public static AbpLocalizationOptions AddLanguageFilesMapOrUpdate(this AbpLocalizationOptions localizationOptions, public static AbpLocalizationOptions AddLanguageFilesMapOrUpdate(this AbpLocalizationOptions localizationOptions,
string packageName, params NameValue[] maps) string packageName, params NameValue[] maps)
{ {
@ -43,6 +49,11 @@ namespace Volo.Abp.Localization
: language; : language;
} }
public static string GetCurrentUICultureLanguageFilesMap(this AbpLocalizationOptions localizationOptions, string packageName)
{
return GetLanguageFilesMap(localizationOptions, packageName, CultureInfo.CurrentUICulture.Name);
}
private static void AddOrUpdate(IDictionary<string, List<NameValue>> maps, string packageName, NameValue value) private static void AddOrUpdate(IDictionary<string, List<NameValue>> maps, string packageName, NameValue value)
{ {
if (maps.TryGetValue(packageName, out var existMaps)) if (maps.TryGetValue(packageName, out var existMaps))

Loading…
Cancel
Save