mirror of https://github.com/abpframework/abp.git
10 changed files with 173 additions and 3 deletions
@ -0,0 +1,62 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Microsoft.Extensions.Localization; |
|||
using Microsoft.Extensions.Options; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.Localization; |
|||
|
|||
namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations |
|||
{ |
|||
public class ApplicationConfigurationBuilder : IApplicationConfigurationBuilder, ITransientDependency |
|||
{ |
|||
private readonly AbpLocalizationOptions _localizationOptions; |
|||
private readonly IServiceProvider _serviceProvider; |
|||
|
|||
public ApplicationConfigurationBuilder(IOptions<AbpLocalizationOptions> localizationOptions, IServiceProvider serviceProvider) |
|||
{ |
|||
_serviceProvider = serviceProvider; |
|||
_localizationOptions = localizationOptions.Value; |
|||
} |
|||
|
|||
public Task<ApplicationConfigurationDto> Get() |
|||
{ |
|||
var config = new ApplicationConfigurationDto |
|||
{ |
|||
Localization = GetLocalizationConfig() |
|||
}; |
|||
|
|||
return Task.FromResult(config); |
|||
} |
|||
|
|||
private ApplicationLocalizationConfigurationDto GetLocalizationConfig() |
|||
{ |
|||
//TODO: Optimize & cache
|
|||
|
|||
var localizationConfig = new ApplicationLocalizationConfigurationDto(); |
|||
|
|||
foreach (var resource in _localizationOptions.Resources) |
|||
{ |
|||
var dictionary = new Dictionary<string, string>(); |
|||
|
|||
var localizer = _serviceProvider.GetRequiredService(typeof(IStringLocalizer<>).MakeGenericType(resource.ResourceType)) as IStringLocalizer; |
|||
|
|||
foreach (var localizedString in localizer.GetAllStrings()) |
|||
{ |
|||
dictionary[localizedString.Name] = localizedString.Value; |
|||
} |
|||
|
|||
var resourceShortName = resource.ResourceType |
|||
.GetCustomAttributes(true) |
|||
.OfType<ShortLocalizationResourceNameAttribute>() |
|||
.FirstOrDefault()?.Name ?? resource.ResourceType.FullName; |
|||
|
|||
localizationConfig.Values[resourceShortName] = dictionary; |
|||
} |
|||
|
|||
return localizationConfig; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations |
|||
{ |
|||
public class ApplicationConfigurationDto |
|||
{ |
|||
public ApplicationLocalizationConfigurationDto Localization { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,24 @@ |
|||
using System.Threading.Tasks; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
|
|||
namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations |
|||
{ |
|||
public class ApplicationConfigurationController : AbpController |
|||
{ |
|||
private readonly IApplicationConfigurationBuilder _configurationBuilder; |
|||
|
|||
public ApplicationConfigurationController(IApplicationConfigurationBuilder configurationBuilder) |
|||
{ |
|||
_configurationBuilder = configurationBuilder; |
|||
} |
|||
|
|||
public async Task<JsonResult> GetAll() |
|||
{ |
|||
//TODO: 1. Make an API
|
|||
//TODO: 2. Make a script generation controller
|
|||
|
|||
var userConfig = await _configurationBuilder.Get(); |
|||
return Json(userConfig); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,14 @@ |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations |
|||
{ |
|||
public class ApplicationLocalizationConfigurationDto |
|||
{ |
|||
public Dictionary<string, Dictionary<string, string>> Values { get; set; } |
|||
|
|||
public ApplicationLocalizationConfigurationDto() |
|||
{ |
|||
Values = new Dictionary<string, Dictionary<string, string>>(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,9 @@ |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations |
|||
{ |
|||
public interface IApplicationConfigurationBuilder |
|||
{ |
|||
Task<ApplicationConfigurationDto> Get(); |
|||
} |
|||
} |
|||
@ -0,0 +1,14 @@ |
|||
using System; |
|||
|
|||
namespace Volo.Abp.Localization |
|||
{ |
|||
public class ShortLocalizationResourceNameAttribute : Attribute |
|||
{ |
|||
public string Name { get; } |
|||
|
|||
public ShortLocalizationResourceNameAttribute(string name) |
|||
{ |
|||
Name = name; |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue