Browse Source

Introduce IAbpApplicationLocalizationAppService

pull/13845/head
Halil İbrahim Kalkan 4 years ago
parent
commit
b82d93a4ab
  1. 8
      framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationLocalizationDto.cs
  2. 10
      framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationLocalizationResourceDto.cs
  3. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/IAbpApplicationConfigurationAppService.cs
  4. 9
      framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/IAbpApplicationLocalizationAppService.cs
  5. 69
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationLocalizationAppService.cs
  6. 24
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationLocalizationController.cs
  7. 35
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/AbpApplicationLocalizationScriptController.cs
  8. 35
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/AbpLocalizationScriptController.cs
  9. 2
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/External/IExternalLocalizationStore.cs
  10. 5
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/External/NullExternalLocalizationStore.cs

8
framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationLocalizationDto.cs

@ -0,0 +1,8 @@
using System.Collections.Generic;
namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
public class ApplicationLocalizationDto
{
public Dictionary<string, ApplicationLocalizationResourceDto> Resources { get; set; }
}

10
framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationLocalizationResourceDto.cs

@ -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; }
}

2
framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/IAbpApplicationConfigurationAppService.cs

@ -6,4 +6,4 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
public interface IAbpApplicationConfigurationAppService : IApplicationService
{
Task<ApplicationConfigurationDto> GetAsync();
}
}

9
framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/IAbpApplicationLocalizationAppService.cs

@ -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);
}

69
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationLocalizationAppService.cs

@ -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;
}
}
}

24
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationLocalizationController.cs

@ -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);
}
}

35
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/AbpApplicationLocalizationScriptController.cs

@ -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();
}
}

35
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/AbpLocalizationScriptController.cs

@ -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();
}
}

2
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/External/IExternalLocalizationStore.cs

@ -12,4 +12,6 @@ public interface IExternalLocalizationStore
Task<LocalizationResourceBase> GetResourceOrNullAsync([NotNull] string resourceName);
Task<string[]> GetResourceNamesAsync();
Task<LocalizationResourceBase[]> GetResourcesAsync();
}

5
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/External/NullExternalLocalizationStore.cs

@ -20,4 +20,9 @@ public class NullExternalLocalizationStore : IExternalLocalizationStore, ISingle
{
return Task.FromResult(Array.Empty<string>());
}
public Task<LocalizationResourceBase[]> GetResourcesAsync()
{
return Task.FromResult(Array.Empty<LocalizationResourceBase>());
}
}
Loading…
Cancel
Save