Browse Source

Started to getting localization configuration from client side.

pull/179/head
Halil İbrahim Kalkan 9 years ago
parent
commit
5c9b3bcf8e
  1. 38
      src/Volo.Abp.AspNetCore.Mvc.UI/wwwroot/libs/abp/abp.js
  2. 62
      src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationBuilder.cs
  3. 7
      src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationDto.cs
  4. 24
      src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationsController.cs
  5. 14
      src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationLocalizationConfigurationDto.cs
  6. 9
      src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/IApplicationConfigurationBuilder.cs
  7. 2
      src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ProxyScripting/AbpServiceProxiesController.cs
  8. 5
      src/Volo.Abp.Identity.Web/Areas/Identity/Localization/Resource/IdentityResource.cs
  9. 1
      src/Volo.Abp/Volo/Abp/Localization/AbpLocalizationOptions.cs
  10. 14
      src/Volo.Abp/Volo/Abp/Localization/ShortLocalizationResourceNameAttribute.cs

38
src/Volo.Abp.AspNetCore.Mvc.UI/wwwroot/libs/abp/abp.js

@ -69,6 +69,44 @@
abp.log.log(logObject, abp.log.levels.FATAL);
};
/* LOCALIZATION ***********************************************/
abp.localization = abp.localization || {};
abp.localization.values = {};
abp.localization.localize = function (key, sourceName) {
sourceName = sourceName || abp.localization.defaultResourceName;
var source = abp.localization.values[sourceName];
if (!source) {
abp.log.warn('Could not find localization source: ' + sourceName);
return key;
}
var value = source[key];
if (value == undefined) {
return key;
}
var copiedArguments = Array.prototype.slice.call(arguments, 0);
copiedArguments.splice(1, 1);
copiedArguments[0] = value;
return abp.utils.formatString.apply(this, copiedArguments);
};
abp.localization.getResource = function (name) {
return function () {
var copiedArguments = Array.prototype.slice.call(arguments, 0);
copiedArguments.splice(1, 0, name);
return abp.localization.localize.apply(this, copiedArguments);
};
};
abp.localization.defaultResourceName = undefined;
/* NOTIFICATION *********************************************/
//Defines Notification API, not implements it

62
src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationBuilder.cs

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

7
src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationDto.cs

@ -0,0 +1,7 @@
namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations
{
public class ApplicationConfigurationDto
{
public ApplicationLocalizationConfigurationDto Localization { get; set; }
}
}

24
src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationsController.cs

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

14
src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationLocalizationConfigurationDto.cs

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

9
src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/IApplicationConfigurationBuilder.cs

@ -0,0 +1,9 @@
using System.Threading.Tasks;
namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations
{
public interface IApplicationConfigurationBuilder
{
Task<ApplicationConfigurationDto> Get();
}
}

2
src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ProxyScripting/AbpServiceProxiesController.cs

@ -3,7 +3,7 @@ using Volo.Abp.Http.ProxyScripting;
namespace Volo.Abp.AspNetCore.Mvc.ProxyScripting
{
//TODO: [DontWrapResult]
//TODO: abp area?
//TODO: [DisableAuditing]
public class AbpServiceProxiesController : AbpController
{

5
src/Volo.Abp.Identity.Web/Areas/Identity/Localization/Resource/IdentityResource.cs

@ -1,5 +1,8 @@
namespace Volo.Abp.Identity.Web.Areas.Identity.Localization.Resource
using Volo.Abp.Localization;
namespace Volo.Abp.Identity.Web.Areas.Identity.Localization.Resource
{
[ShortLocalizationResourceName("AbpIdentityWeb")]
public class IdentityResource
{

1
src/Volo.Abp/Volo/Abp/Localization/AbpLocalizationOptions.cs

@ -3,7 +3,6 @@
public class AbpLocalizationOptions
{
public LocalizationResourceList Resources { get; }
public AbpStringLocalizerList Resolvers { get; }
public AbpLocalizationOptions()
{

14
src/Volo.Abp/Volo/Abp/Localization/ShortLocalizationResourceNameAttribute.cs

@ -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…
Cancel
Save