mirror of https://github.com/abpframework/abp.git
10 changed files with 163 additions and 36 deletions
@ -0,0 +1,8 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
|
||||
|
namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; |
||||
|
|
||||
|
public class ApplicationLocalizationDto |
||||
|
{ |
||||
|
public Dictionary<string, ApplicationLocalizationResourceDto> Resources { get; set; } |
||||
|
} |
||||
@ -0,0 +1,10 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
|
||||
|
namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; |
||||
|
|
||||
|
public class ApplicationLocalizationResourceDto |
||||
|
{ |
||||
|
public Dictionary<string, string> Texts { get; set; } |
||||
|
|
||||
|
public List<string> BaseResources { get; set; } |
||||
|
} |
||||
@ -0,0 +1,9 @@ |
|||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.Application.Services; |
||||
|
|
||||
|
namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; |
||||
|
|
||||
|
public interface IAbpApplicationLocalizationAppService : IApplicationService |
||||
|
{ |
||||
|
Task<ApplicationLocalizationDto> GetAsync(string culture); |
||||
|
} |
||||
@ -0,0 +1,69 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
using Microsoft.Extensions.Localization; |
||||
|
using Microsoft.Extensions.Options; |
||||
|
using Volo.Abp.Application.Services; |
||||
|
using Volo.Abp.Localization; |
||||
|
using Volo.Abp.Localization.External; |
||||
|
|
||||
|
namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; |
||||
|
|
||||
|
public class AbpApplicationLocalizationAppService : |
||||
|
ApplicationService, |
||||
|
IAbpApplicationLocalizationAppService |
||||
|
{ |
||||
|
protected IExternalLocalizationStore ExternalLocalizationStore { get; } |
||||
|
protected AbpLocalizationOptions LocalizationOptions { get; } |
||||
|
|
||||
|
public AbpApplicationLocalizationAppService( |
||||
|
IExternalLocalizationStore externalLocalizationStore, |
||||
|
IOptions<AbpLocalizationOptions> localizationOptions) |
||||
|
{ |
||||
|
ExternalLocalizationStore = externalLocalizationStore; |
||||
|
LocalizationOptions = localizationOptions.Value; |
||||
|
} |
||||
|
|
||||
|
public async Task<ApplicationLocalizationDto> GetAsync(string culture) |
||||
|
{ |
||||
|
using (CultureHelper.Use(culture)) |
||||
|
{ |
||||
|
var localizationConfig = new ApplicationLocalizationDto(); |
||||
|
|
||||
|
var resources = LocalizationOptions |
||||
|
.Resources |
||||
|
.Values |
||||
|
.Union( |
||||
|
await ExternalLocalizationStore.GetResourcesAsync() |
||||
|
); |
||||
|
|
||||
|
foreach (var resource in resources) |
||||
|
{ |
||||
|
var dictionary = new Dictionary<string, string>(); |
||||
|
|
||||
|
var localizer = await StringLocalizerFactory.CreateByResourceNameOrNullAsync(resource.ResourceName); |
||||
|
if (localizer != null) |
||||
|
{ |
||||
|
var localizedStrings = await localizer.GetAllStringsAsync( |
||||
|
includeParentCultures: true, |
||||
|
includeBaseLocalizers: false, //TODO: Test this!
|
||||
|
includeDynamicContributors: false |
||||
|
); |
||||
|
|
||||
|
foreach (var localizedString in localizedStrings) |
||||
|
{ |
||||
|
dictionary[localizedString.Name] = localizedString.Value; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
localizationConfig.Resources[resource.ResourceName] = |
||||
|
new ApplicationLocalizationResourceDto { |
||||
|
Texts = dictionary, |
||||
|
BaseResources = resource.BaseResourceNames |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
return localizationConfig; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,24 @@ |
|||||
|
using System.Threading.Tasks; |
||||
|
using Microsoft.AspNetCore.Mvc; |
||||
|
|
||||
|
namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; |
||||
|
|
||||
|
[Area("abp")] |
||||
|
[RemoteService(Name = "abp")] |
||||
|
[Route("api/abp/application-localization")] |
||||
|
public class AbpApplicationLocalizationController: AbpControllerBase, IAbpApplicationLocalizationAppService |
||||
|
{ |
||||
|
private readonly IAbpApplicationLocalizationAppService _localizationAppService; |
||||
|
|
||||
|
public AbpApplicationLocalizationController(IAbpApplicationLocalizationAppService localizationAppService) |
||||
|
{ |
||||
|
_localizationAppService = localizationAppService; |
||||
|
} |
||||
|
|
||||
|
[HttpGet] |
||||
|
[Route("{culture}")] |
||||
|
public virtual async Task<ApplicationLocalizationDto> GetAsync(string culture) |
||||
|
{ |
||||
|
return await _localizationAppService.GetAsync(culture); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,35 @@ |
|||||
|
using System; |
||||
|
using System.Threading.Tasks; |
||||
|
using Microsoft.AspNetCore.Mvc; |
||||
|
using Microsoft.Extensions.Localization; |
||||
|
using Microsoft.Extensions.Options; |
||||
|
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; |
||||
|
using Volo.Abp.Auditing; |
||||
|
using Volo.Abp.Http; |
||||
|
using Volo.Abp.Localization; |
||||
|
|
||||
|
namespace Volo.Abp.AspNetCore.Mvc.Localization; |
||||
|
|
||||
|
[Area("Abp")] |
||||
|
[Route("Abp/ApplicationLocalizationScript")] |
||||
|
[DisableAuditing] |
||||
|
[RemoteService(false)] |
||||
|
[ApiExplorerSettings(IgnoreApi = true)] |
||||
|
public class AbpApplicationLocalizationScriptController : AbpController |
||||
|
{ |
||||
|
protected IAbpApplicationLocalizationAppService LocalizationAppService { get; } |
||||
|
|
||||
|
public AbpApplicationLocalizationScriptController( |
||||
|
IAbpApplicationLocalizationAppService localizationAppService) |
||||
|
{ |
||||
|
LocalizationAppService = localizationAppService; |
||||
|
} |
||||
|
|
||||
|
[HttpGet] |
||||
|
[Route("{culture}")] |
||||
|
[Produces(MimeTypes.Application.Javascript, MimeTypes.Text.Plain)] |
||||
|
public async Task GetAsync(string culture) |
||||
|
{ |
||||
|
throw new NotImplementedException(); |
||||
|
} |
||||
|
} |
||||
@ -1,35 +0,0 @@ |
|||||
using System; |
|
||||
using System.Threading.Tasks; |
|
||||
using Microsoft.AspNetCore.Mvc; |
|
||||
using Microsoft.Extensions.Localization; |
|
||||
using Microsoft.Extensions.Options; |
|
||||
using Volo.Abp.Auditing; |
|
||||
using Volo.Abp.Localization; |
|
||||
|
|
||||
namespace Volo.Abp.AspNetCore.Mvc.Localization; |
|
||||
|
|
||||
[Area("Abp")] |
|
||||
[Route("Abp/LocalizationScript")] |
|
||||
[DisableAuditing] |
|
||||
[RemoteService(false)] |
|
||||
[ApiExplorerSettings(IgnoreApi = true)] |
|
||||
public class AbpLocalizationScriptController |
|
||||
{ |
|
||||
protected AbpLocalizationOptions LocalizationOptions { get; } |
|
||||
protected IStringLocalizerFactory StringLocalizerFactory { get; } |
|
||||
|
|
||||
public AbpLocalizationScriptController( |
|
||||
IOptions<AbpLocalizationOptions> localizationOptions, |
|
||||
IStringLocalizerFactory stringLocalizerFactory) |
|
||||
{ |
|
||||
StringLocalizerFactory = stringLocalizerFactory; |
|
||||
LocalizationOptions = localizationOptions.Value; |
|
||||
} |
|
||||
|
|
||||
[HttpGet] |
|
||||
[Route("{culture}")] |
|
||||
public async Task GetAsync(string culture) |
|
||||
{ |
|
||||
throw new NotImplementedException(); |
|
||||
} |
|
||||
} |
|
||||
Loading…
Reference in new issue