Browse Source

Implement UI modules.

pull/13881/head
maliming 4 years ago
parent
commit
f42ad59012
No known key found for this signature in database GPG Key ID: 96224957E51C89E
  1. 15
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizableStringSerializer.cs
  2. 55
      modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor.cs
  3. 60
      modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml.cs

15
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizableStringSerializer.cs

@ -15,6 +15,11 @@ public class LocalizableStringSerializer : ILocalizableStringSerializer, ITransi
public virtual string Serialize(ILocalizableString localizableString)
{
if (localizableString == null)
{
return null;
}
if (localizableString is LocalizableString realLocalizableString)
{
return $"L:{LocalizationResourceNameAttribute.GetName(realLocalizableString.ResourceType)},{realLocalizableString.Name}";
@ -36,7 +41,7 @@ public class LocalizableStringSerializer : ILocalizableStringSerializer, ITransi
{
return new FixedLocalizableString(value);
}
var type = value[0];
switch (type)
{
@ -48,16 +53,16 @@ public class LocalizableStringSerializer : ILocalizableStringSerializer, ITransi
{
throw new AbpException("Invalid LocalizableString value: " + value);
}
var resourceName = value.Substring(2, commaPosition - 2);
var name = value.Substring(commaPosition + 1);
if (name.IsNullOrWhiteSpace())
{
throw new AbpException("Invalid LocalizableString value: " + value);
}
var resourceType = LocalizationOptions.Resources.GetOrNull(resourceName)?.ResourceType;
return new LocalizableString(
resourceType,
name
@ -66,4 +71,4 @@ public class LocalizableStringSerializer : ILocalizableStringSerializer, ITransi
return new FixedLocalizableString(value);
}
}
}
}

55
modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor.cs

@ -50,9 +50,11 @@ public partial class FeatureManagementModal
ToggleValues = new Dictionary<string, bool>();
SelectionStringValues = new Dictionary<string, string>();
Groups = (await FeatureAppService.GetAsync(ProviderName, ProviderKey))?.Groups;
var result = await FeatureAppService.GetAsync(ProviderName, ProviderKey);
Groups ??= new List<FeatureGroupDto>();
UpdateLocalizations(result);
Groups = result?.Groups ?? new List<FeatureGroupDto>();
if (Groups.Any())
{
@ -204,4 +206,53 @@ public partial class FeatureManagementModal
return Task.CompletedTask;
}
private void UpdateLocalizations(GetFeatureListResultDto result)
{
foreach (var group in result.Groups)
{
group.DisplayName = Localize(
group.DisplayNameKey,
group.DisplayNameResource,
group.DisplayName
);
foreach (var feature in group.Features)
{
feature.DisplayName = Localize(
feature.DisplayNameKey,
feature.DisplayNameResource,
feature.DisplayName
);
feature.Description = Localize(
feature.DescriptionKey,
feature.DescriptionResource,
feature.Description
);
}
}
}
private string Localize(string key, string resourceName, string fallbackValue)
{
if (key.IsNullOrEmpty() || resourceName.IsNullOrEmpty())
{
return fallbackValue;
}
var resource = LocalizationOptions.Value.Resources.GetOrNull(resourceName);
if (resource == null)
{
return fallbackValue;
}
var result = new LocalizableString(resource.ResourceType, key).Localize(StringLocalizerFactory);
if (result.ResourceNotFound)
{
return fallbackValue;
}
return result.Value;
}
}

60
modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml.cs

@ -1,12 +1,15 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
using Volo.Abp.EventBus.Local;
using Volo.Abp.Features;
using Volo.Abp.Localization;
using Volo.Abp.Validation.StringValues;
namespace Volo.Abp.FeatureManagement.Web.Pages.FeatureManagement;
@ -31,14 +34,18 @@ public class FeatureManagementModal : AbpPageModel
protected ILocalEventBus LocalEventBus { get; }
public AbpLocalizationOptions LocalizationOptions { get; }
public FeatureManagementModal(
IFeatureAppService featureAppService,
ILocalEventBus localEventBus)
ILocalEventBus localEventBus,
IOptions<AbpLocalizationOptions> localizationOptions)
{
ObjectMapperContext = typeof(AbpFeatureManagementWebModule);
FeatureAppService = featureAppService;
LocalEventBus = localEventBus;
LocalizationOptions = localizationOptions.Value;
}
public virtual async Task<IActionResult> OnGetAsync()
@ -47,9 +54,60 @@ public class FeatureManagementModal : AbpPageModel
FeatureListResultDto = await FeatureAppService.GetAsync(ProviderName, ProviderKey);
UpdateLocalizations(FeatureListResultDto);
return Page();
}
private void UpdateLocalizations(GetFeatureListResultDto result)
{
foreach (var group in result.Groups)
{
group.DisplayName = Localize(
group.DisplayNameKey,
group.DisplayNameResource,
group.DisplayName
);
foreach (var feature in group.Features)
{
feature.DisplayName = Localize(
feature.DisplayNameKey,
feature.DisplayNameResource,
feature.DisplayName
);
feature.Description = Localize(
feature.DescriptionKey,
feature.DescriptionResource,
feature.Description
);
}
}
}
private string Localize(string key, string resourceName, string fallbackValue)
{
if (key.IsNullOrEmpty() || resourceName.IsNullOrEmpty())
{
return fallbackValue;
}
var resource = LocalizationOptions.Resources.GetOrNull(resourceName);
if (resource == null)
{
return fallbackValue;
}
var result = new LocalizableString(resource.ResourceType, key).Localize(StringLocalizerFactory);
if (result.ResourceNotFound)
{
return fallbackValue;
}
return result.Value;
}
public virtual async Task<IActionResult> OnPostAsync()
{
var features = new UpdateFeaturesDto

Loading…
Cancel
Save