Browse Source

MVC UI: Get localization from the new endpoint.

Handle base resources in MVC UI.
pull/13845/head
Halil İbrahim Kalkan 4 years ago
parent
commit
e3e16ffa0f
  1. 6
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs
  2. 12
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationScriptController.cs
  3. 4
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationLocalizationAppService.cs
  4. 45
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/AbpApplicationLocalizationScriptController.cs
  5. 1
      modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Account.cshtml
  6. 1
      modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Application.cshtml
  7. 1
      modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Empty.cshtml
  8. 90
      npm/packs/core/src/abp.js

6
framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs

@ -27,7 +27,11 @@ public class WebAssemblyCachedApplicationConfigurationClient : ICachedApplicatio
public virtual async Task InitializeAsync() public virtual async Task InitializeAsync()
{ {
var configurationDto = await ApplicationConfigurationAppService.GetAsync(); var configurationDto = await ApplicationConfigurationAppService.GetAsync(
new ApplicationConfigurationRequestOptions {
IncludeLocalizationResources = false
}
);
Cache.Set(configurationDto); Cache.Set(configurationDto);

12
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationScriptController.cs

@ -41,11 +41,13 @@ public class AbpApplicationConfigurationScriptController : AbpController
[Produces(MimeTypes.Application.Javascript, MimeTypes.Text.Plain)] [Produces(MimeTypes.Application.Javascript, MimeTypes.Text.Plain)]
public async Task<ActionResult> Get() public async Task<ActionResult> Get()
{ {
var script = CreateAbpExtendScript(await _configurationAppService.GetAsync( var script = CreateAbpExtendScript(
new ApplicationConfigurationRequestOptions { await _configurationAppService.GetAsync(
IncludeLocalizationResources = false new ApplicationConfigurationRequestOptions {
} IncludeLocalizationResources = false
)); }
)
);
_antiForgeryManager.SetCookie(); _antiForgeryManager.SetCookie();

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

@ -48,8 +48,8 @@ public class AbpApplicationLocalizationAppService :
{ {
var localizedStrings = await localizer.GetAllStringsAsync( var localizedStrings = await localizer.GetAllStringsAsync(
includeParentCultures: true, includeParentCultures: true,
includeBaseLocalizers: true, //TODO: Test this! includeBaseLocalizers: false,
includeDynamicContributors: false includeDynamicContributors: true
); );
foreach (var localizedString in localizedStrings) foreach (var localizedString in localizedStrings)

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

@ -1,4 +1,5 @@
using System; using System;
using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
@ -6,7 +7,9 @@ using Microsoft.Extensions.Options;
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
using Volo.Abp.Auditing; using Volo.Abp.Auditing;
using Volo.Abp.Http; using Volo.Abp.Http;
using Volo.Abp.Json;
using Volo.Abp.Localization; using Volo.Abp.Localization;
using Volo.Abp.Minify.Scripts;
namespace Volo.Abp.AspNetCore.Mvc.Localization; namespace Volo.Abp.AspNetCore.Mvc.Localization;
@ -17,19 +20,51 @@ namespace Volo.Abp.AspNetCore.Mvc.Localization;
[ApiExplorerSettings(IgnoreApi = true)] [ApiExplorerSettings(IgnoreApi = true)]
public class AbpApplicationLocalizationScriptController : AbpController public class AbpApplicationLocalizationScriptController : AbpController
{ {
protected IAbpApplicationLocalizationAppService LocalizationAppService { get; } protected IAbpApplicationLocalizationAppService LocalizationAppService { get; }
protected AbpAspNetCoreMvcOptions Options { get; }
protected IJsonSerializer JsonSerializer { get; }
protected IJavascriptMinifier JavascriptMinifier { get; }
public AbpApplicationLocalizationScriptController( public AbpApplicationLocalizationScriptController(
IAbpApplicationLocalizationAppService localizationAppService) IAbpApplicationLocalizationAppService localizationAppService,
IOptions<AbpAspNetCoreMvcOptions> options,
IJsonSerializer jsonSerializer,
IJavascriptMinifier javascriptMinifier)
{ {
LocalizationAppService = localizationAppService; LocalizationAppService = localizationAppService;
JsonSerializer = jsonSerializer;
JavascriptMinifier = javascriptMinifier;
Options = options.Value;
} }
[HttpGet] [HttpGet]
[Route("{culture}")] [Route("{culture}")]
[Produces(MimeTypes.Application.Javascript, MimeTypes.Text.Plain)] [Produces(MimeTypes.Application.Javascript, MimeTypes.Text.Plain)]
public async Task GetAsync(string culture) public async Task<ActionResult> GetAsync(string culture)
{ {
throw new NotImplementedException(); var script = CreateScript(
await LocalizationAppService.GetAsync(culture)
);
return Content(
Options.MinifyGeneratedScript == true
? JavascriptMinifier.Minify(script)
: script,
MimeTypes.Application.Javascript
);
}
private string CreateScript(ApplicationLocalizationDto localizationDto)
{
var script = new StringBuilder();
script.AppendLine("(function(){");
script.AppendLine();
script.AppendLine(
$"$.extend(true, abp.localization, {JsonSerializer.Serialize(localizationDto, indented: true)})");
script.AppendLine();
script.Append("})();");
return script.ToString();
} }
} }

1
modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Account.cshtml

@ -95,6 +95,7 @@
<abp-script-bundle name="@BasicThemeBundles.Scripts.Global" /> <abp-script-bundle name="@BasicThemeBundles.Scripts.Global" />
<script src="~/Abp/ApplicationLocalizationScript/@CultureInfo.CurrentUICulture.Name"></script>
<script src="~/Abp/ApplicationConfigurationScript"></script> <script src="~/Abp/ApplicationConfigurationScript"></script>
<script src="~/Abp/ServiceProxyScript"></script> <script src="~/Abp/ServiceProxyScript"></script>

1
modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Application.cshtml

@ -68,6 +68,7 @@
<abp-script-bundle name="@BasicThemeBundles.Scripts.Global" /> <abp-script-bundle name="@BasicThemeBundles.Scripts.Global" />
<script src="~/Abp/ApplicationLocalizationScript/@CultureInfo.CurrentUICulture.Name"></script>
<script src="~/Abp/ApplicationConfigurationScript"></script> <script src="~/Abp/ApplicationConfigurationScript"></script>
<script src="~/Abp/ServiceProxyScript"></script> <script src="~/Abp/ServiceProxyScript"></script>

1
modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Empty.cshtml

@ -63,6 +63,7 @@
<abp-script-bundle name="@BasicThemeBundles.Scripts.Global" /> <abp-script-bundle name="@BasicThemeBundles.Scripts.Global" />
<script src="~/Abp/ApplicationLocalizationScript/@CultureInfo.CurrentUICulture.Name"></script>
<script src="~/Abp/ApplicationConfigurationScript"></script> <script src="~/Abp/ApplicationConfigurationScript"></script>
<script src="~/Abp/ServiceProxyScript"></script> <script src="~/Abp/ServiceProxyScript"></script>

90
npm/packs/core/src/abp.js

@ -72,8 +72,61 @@ var abp = abp || {};
/* LOCALIZATION ***********************************************/ /* LOCALIZATION ***********************************************/
abp.localization = abp.localization || {}; abp.localization = abp.localization || {};
abp.localization.internal = abp.localization.internal || {};
abp.localization.values = abp.localization.values || {}; abp.localization.values = abp.localization.values || {};
abp.localization.resources = abp.localization.resources || {};
abp.localization.internal.getResource = function (resourceName) {
var resource = abp.localization.resources[resourceName];
if (resource) {
return resource;
}
var legacySource = abp.localization.values[resourceName];
if (legacySource) {
return {
texts: abp.localization.values[resourceName],
baseResources: []
};
}
abp.log.warn('Could not find localization source: ' + resourceName);
return null;
};
abp.localization.internal.localize = function (key, sourceName) {
var resource = abp.localization.internal.getResource(sourceName);
if (!resource){
return {
value: key,
found: false
};
}
var value = resource.texts[key];
if (value === undefined) {
for (var i = 0; i < resource.baseResources.length; i++){
var result = abp.localization.internal.localize(key, resource.baseResources[i]);
if (result.found){
return result;
}
}
return {
value: key,
found: false
};
}
var copiedArguments = Array.prototype.slice.call(arguments, 0);
copiedArguments.splice(1, 1);
copiedArguments[0] = value;
return {
value: abp.utils.formatString.apply(this, copiedArguments),
found: true
};
};
abp.localization.localize = function (key, sourceName) { abp.localization.localize = function (key, sourceName) {
if (sourceName === '_') { //A convention to suppress the localization if (sourceName === '_') { //A convention to suppress the localization
@ -86,22 +139,7 @@ var abp = abp || {};
return key; return key;
} }
var source = abp.localization.values[sourceName]; return abp.localization.internal.localize(key, sourceName).value;
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.isLocalized = function (key, sourceName) { abp.localization.isLocalized = function (key, sourceName) {
@ -114,17 +152,7 @@ var abp = abp || {};
return false; return false;
} }
var source = abp.localization.values[sourceName]; return abp.localization.internal.localize(key, sourceName).found;
if (!source) {
return false;
}
var value = source[key];
if (value === undefined) {
return false;
}
return true;
}; };
abp.localization.getResource = function (name) { abp.localization.getResource = function (name) {
@ -687,7 +715,7 @@ var abp = abp || {};
} }
/** /**
* Escape HTML to help prevent XSS attacks. * Escape HTML to help prevent XSS attacks.
*/ */
abp.utils.htmlEscape = function (html) { abp.utils.htmlEscape = function (html) {
return typeof html === 'string' ? html.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;') : html; return typeof html === 'string' ? html.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;') : html;
@ -759,7 +787,7 @@ var abp = abp || {};
return toUtc(date); return toUtc(date);
} }
}; };
/* FEATURES *************************************************/ /* FEATURES *************************************************/
abp.features = abp.features || {}; abp.features = abp.features || {};
@ -774,7 +802,7 @@ var abp = abp || {};
abp.features.get = function (name) { abp.features.get = function (name) {
return abp.features.values[name]; return abp.features.values[name];
}; };
/* GLOBAL FEATURES *************************************************/ /* GLOBAL FEATURES *************************************************/
abp.globalFeatures = abp.globalFeatures || {}; abp.globalFeatures = abp.globalFeatures || {};

Loading…
Cancel
Save