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