From 12e38bf7e0eb03b665f2398affa01f30f9b52592 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 19 Dec 2017 11:23:40 +0300 Subject: [PATCH] Use virtual file provider to read embedded localization jsons. --- src/AbpDesk/Web_PlugIns/AbpDesk.MongoBlog.dll | Bin 15360 -> 15360 bytes ...lFileSystemApplicationBuilderExtensions.cs | 21 +-- .../AbpAspNetCoreMvcUiBootstrapModule.cs | 4 +- .../AbpBootstrap}/AbpBootstrapResource.cs | 2 +- .../AbpBootstrap}/en.json | 0 .../AbpBootstrap}/tr.json | 0 .../Modal/AbpModalFooterTagHelper.cs | 2 +- ...olo.Abp.AspNetCore.Mvc.UI.Bootstrap.csproj | 93 +------------ .../Volo.Abp.AspNetCore.csproj | 2 - .../AspNetCoreVirtualFileProvider.cs | 24 +--- .../AbpIdentityWebModule.cs | 5 +- .../Localization/Resource/IdentityResource.cs | 12 -- .../Resources/AbpIdentity/IdentityResource.cs | 12 ++ .../AbpIdentity}/en.json | 0 .../AbpIdentity}/tr.json | 0 .../Pages/Identity/Users/CreateModal.cshtml | 2 +- .../Pages/Identity/Users/EditModal.cshtml | 2 +- .../Pages/Identity/Users/Index.cshtml | 2 +- .../Volo.Abp.Identity.Web.csproj | 4 +- .../Volo.Abp.Localization.csproj | 1 + .../Abp/Localization/AbpLocalizationModule.cs | 11 +- ...eddedFileLocalizationDictionaryProvider.cs | 50 ------- .../LocalizationResourceListExtensions.cs | 23 ++-- .../AbpValidationResource.cs} | 2 +- .../{Validation => AbpValidation}/en.json | 0 .../{Validation => AbpValidation}/tr.json | 0 ...eddedFileLocalizationDictionaryProvider.cs | 25 ++++ ...lFileLocalizationDictionaryProviderBase.cs | 48 +++++++ .../Volo.Abp.VirtualFileSystem.csproj | 1 + .../Embedded/EmbeddedFileSet.cs | 5 +- .../VirtualFileSystem/VirtualFileProvider.cs | 125 ++++++++++++------ .../VirtualFileSetListExtensions.cs | 5 +- .../Abp/Localization/AbpLocalization_Tests.cs | 21 +-- .../Abp/Localization/SourceExt/SourceExt.cs | 7 - .../LocalizationTestCountryNamesResource.cs | 2 +- .../Base/CountryNames/en.json | 0 .../Base/CountryNames/tr.json | 0 .../LocalizationTestValidationResource.cs | 2 +- .../Base/Validation/en.json | 0 .../Source/LocalizationTestResource.cs | 6 +- .../{ => TestResources}/Source/en.json | 0 .../{ => TestResources}/Source/tr.json | 0 .../{ => TestResources}/SourceExt/en.json | 0 .../{ => TestResources}/SourceExt/it.json | 0 44 files changed, 252 insertions(+), 269 deletions(-) rename src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/{Resource => Resources/AbpBootstrap}/AbpBootstrapResource.cs (84%) rename src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/{Resource => Resources/AbpBootstrap}/en.json (100%) rename src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/{Resource => Resources/AbpBootstrap}/tr.json (100%) delete mode 100644 src/Volo.Abp.Identity.Web/Localization/Resource/IdentityResource.cs create mode 100644 src/Volo.Abp.Identity.Web/Localization/Resources/AbpIdentity/IdentityResource.cs rename src/Volo.Abp.Identity.Web/Localization/{Resource => Resources/AbpIdentity}/en.json (100%) rename src/Volo.Abp.Identity.Web/Localization/{Resource => Resources/AbpIdentity}/tr.json (100%) delete mode 100644 src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonEmbeddedFileLocalizationDictionaryProvider.cs rename src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/{Validation/IdentityResource.cs => AbpValidation/AbpValidationResource.cs} (66%) rename src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/{Validation => AbpValidation}/en.json (100%) rename src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/{Validation => AbpValidation}/tr.json (100%) create mode 100644 src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/Json/JsonEmbeddedFileLocalizationDictionaryProvider.cs create mode 100644 src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationDictionaryProviderBase.cs delete mode 100644 test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/SourceExt/SourceExt.cs rename test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/{ => TestResources}/Base/CountryNames/LocalizationTestCountryNamesResource.cs (56%) rename test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/{ => TestResources}/Base/CountryNames/en.json (100%) rename test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/{ => TestResources}/Base/CountryNames/tr.json (100%) rename test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/{ => TestResources}/Base/Validation/LocalizationTestValidationResource.cs (56%) rename test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/{ => TestResources}/Base/Validation/en.json (100%) rename test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/{ => TestResources}/Source/LocalizationTestResource.cs (54%) rename test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/{ => TestResources}/Source/en.json (100%) rename test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/{ => TestResources}/Source/tr.json (100%) rename test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/{ => TestResources}/SourceExt/en.json (100%) rename test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/{ => TestResources}/SourceExt/it.json (100%) diff --git a/src/AbpDesk/Web_PlugIns/AbpDesk.MongoBlog.dll b/src/AbpDesk/Web_PlugIns/AbpDesk.MongoBlog.dll index 0231fbe6f3ca4efd5635cda96852bfdc16172dd8..d31f5a60783a12f5b576c8171bbea402a60867e3 100644 GIT binary patch delta 986 zcmZXTTS!zv7{~uJbN1Tqy6(ERq0w&MDpS%elPyqL#S3I zGM+raabGt_P~u!ll{>6PN8q&=3xS}nGN@zavdUG!s%4D0Ssroi$k{4vSXHE^UpU&` zyW|tvfjO(9g}JIj`GbS0AH!}ORtW4Rb)KZ{#^Tn_6hCZ zv@@n|W=u^A?coKgB&vPu0#y>%p3>~me5N_Bxh}=k<9aloX^v|`s63<@)r`+4MiyC_ z&RtT{Er219Vuw3Jd?=KsY>HF%8^jO1TRzRb7C6c8a`j3yl+fyw313^FlP6rN`nU7V zSGKZ~zxuz!d;ibOh(G4{b{=(}%MY&G*?+rk%h+T7+Pqqt;0}kE3Fb@JdrYx%H+`69 z)9MjxVEXK(UtqCDwdrxX8tJENlogR8@6hy{B?o3|W7(yX!|xAonw9ZLtM4bZ|1L`t dStt|EXLIIMWH~oIHNOQ9R-3sSrdeiVN}0YhM9BPjX2*kC862!3lNQGO_`J&2>u8qDh9-!(i8I z0CU*5n0Ywq;TDRag=-BCW?aT7q=4PIrj={1Rs453S9VH|tG*mz>N9S~5{Aw@BDs zjABd;=aFO15Ib9zJUS1D$;%kh)h>Yw;^zUYhXi<7SjMkfD^o(u2)|dJo=d)BJI1HP zmwC0Vl-%GkTV;M3bHnMA6L}c}-0-MfH_W&rX1=Z6Ui9ee zwu`i@mpW065n)(Z2n&W;AzT;}dhk~0#YbVjGKkM2A5ytoc^vDasfR}^#08ubHltA( z5hp{qjcZy6-5Ao!(S~uY8ISQ?i=j_6F}%P?m(~p(Pm=~!H7F}>R^?fhS5#h6c~xaX zlT78TEoBo@`N)>CX;L|=98k_EmzDdYRKDGSaz?qV1e1NHGNf$UY_wqv@mT84 zoPGwpv`brUap5?VIck)CH$4)5qWye2^?|#cj#BxPC}a?;lSiD*?oJx9%H98yRcCHq zCw;YjLI<~Zde9YiImiirfLjJDdhIQZ_wT;;>v3O%noJHti8EHMYk74{KUXkka93Ft zMnJ-~@)O&{t493eYIq>%bu=7Z>Ur{}zM^lkHGWf{i13zRqis!$|1H8l1U+O!{}J3x W6GfVCFZs=ATCtvb@Fz(W8UF$@l-Mu; diff --git a/src/Volo.Abp.AspNetCore.EmbeddedFiles/Microsoft/AspNetCore/Builder/VirtualFileSystemApplicationBuilderExtensions.cs b/src/Volo.Abp.AspNetCore.EmbeddedFiles/Microsoft/AspNetCore/Builder/VirtualFileSystemApplicationBuilderExtensions.cs index c0a3881cee..d0eeba87e2 100644 --- a/src/Volo.Abp.AspNetCore.EmbeddedFiles/Microsoft/AspNetCore/Builder/VirtualFileSystemApplicationBuilderExtensions.cs +++ b/src/Volo.Abp.AspNetCore.EmbeddedFiles/Microsoft/AspNetCore/Builder/VirtualFileSystemApplicationBuilderExtensions.cs @@ -11,24 +11,25 @@ namespace Microsoft.AspNetCore.Builder { public static void UseVirtualFiles(this IApplicationBuilder app) { - var options = app.ApplicationServices.GetRequiredService>().Value; + //var options = app.ApplicationServices.GetRequiredService>().Value; IFileProvider fileProvider = new AspNetCoreVirtualFileProvider( app.ApplicationServices, "/wwwroot" ); - if (options.FileSets.PhysicalPaths.Any()) - { - var fileProviders = options.FileSets.PhysicalPaths - .Select(p => new PhysicalFileProvider(p)) - .Cast() - .ToList(); + ////TODO: This should not be needed!!! + //if (options.FileSets.PhysicalPaths.Any()) + //{ + // var fileProviders = options.FileSets.PhysicalPaths + // .Select(p => new PhysicalFileProvider(p)) + // .Cast() + // .ToList(); - fileProviders.Add(fileProvider); + // fileProviders.Add(fileProvider); - fileProvider = new CompositeFileProvider(fileProviders); - } + // fileProvider = new CompositeFileProvider(fileProviders); + //} app.UseStaticFiles( new StaticFileOptions diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/AbpAspNetCoreMvcUiBootstrapModule.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/AbpAspNetCoreMvcUiBootstrapModule.cs index 7eadce177e..b148623db4 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/AbpAspNetCoreMvcUiBootstrapModule.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/AbpAspNetCoreMvcUiBootstrapModule.cs @@ -1,7 +1,7 @@ using System; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Mvc.Bundling; -using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Localization.Resource; +using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Localization.Resources.AbpBootstrap; using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.VirtualFileSystem; @@ -22,7 +22,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap services.Configure(options => { - options.Resources.AddJson("en"); + options.Resources.AddVirtualJson("en", "/Localization/Resources/AbpBootstrap"); }); services.Configure(options => diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resource/AbpBootstrapResource.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resources/AbpBootstrap/AbpBootstrapResource.cs similarity index 84% rename from src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resource/AbpBootstrapResource.cs rename to src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resources/AbpBootstrap/AbpBootstrapResource.cs index 25a70bcc28..5ef2d307f8 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resource/AbpBootstrapResource.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resources/AbpBootstrap/AbpBootstrapResource.cs @@ -1,4 +1,4 @@ -namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Localization.Resource +namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Localization.Resources.AbpBootstrap { public class AbpBootstrapResource { diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resource/en.json b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resources/AbpBootstrap/en.json similarity index 100% rename from src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resource/en.json rename to src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resources/AbpBootstrap/en.json diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resource/tr.json b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resources/AbpBootstrap/tr.json similarity index 100% rename from src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resource/tr.json rename to src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Localization/Resources/AbpBootstrap/tr.json diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelper.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelper.cs index 0e563c28e1..d7673b7e91 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelper.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelper.cs @@ -1,7 +1,7 @@ using System.Text; using Microsoft.AspNetCore.Razor.TagHelpers; using Microsoft.Extensions.Localization; -using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Localization.Resource; +using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Localization.Resources.AbpBootstrap; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal { diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.csproj b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.csproj index b6000f93b5..bf262b3743 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.csproj +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.csproj @@ -10,101 +10,18 @@ - - - - - - + PreserveNewest - + PreserveNewest - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + diff --git a/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj b/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj index 7be69f1b44..d634c39cab 100644 --- a/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj +++ b/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj @@ -19,8 +19,6 @@ - - diff --git a/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/AspNetCoreVirtualFileProvider.cs b/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/AspNetCoreVirtualFileProvider.cs index d135771623..16c3a96749 100644 --- a/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/AspNetCoreVirtualFileProvider.cs +++ b/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/AspNetCoreVirtualFileProvider.cs @@ -1,8 +1,6 @@ using System; -using System.Linq; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.FileProviders; -using Microsoft.Extensions.Options; using Microsoft.Extensions.Primitives; using Volo.Abp.DependencyInjection; using Volo.Abp.VirtualFileSystem; @@ -24,28 +22,8 @@ namespace Volo.Abp.AspNetCore.VirtualFileSystem public AspNetCoreVirtualFileProvider(IObjectAccessor serviceProviderAccessor) { _serviceProviderAccessor = serviceProviderAccessor; - _fileProvider = new Lazy( - () => - { - var options = serviceProviderAccessor.Value.GetRequiredService>().Value; - - IFileProvider fileProvider = serviceProviderAccessor.Value.GetRequiredService(); - - if (options.FileSets.PhysicalPaths.Any()) - { - var fileProviders = options.FileSets.PhysicalPaths - .Select(p => new PhysicalFileProvider(p)) - .Cast() - .ToList(); - - fileProviders.Add(fileProvider); - - fileProvider = new CompositeFileProvider(fileProviders); - } - - return fileProvider; - }, + () => serviceProviderAccessor.Value.GetRequiredService(), true ); } diff --git a/src/Volo.Abp.Identity.Web/AbpIdentityWebModule.cs b/src/Volo.Abp.Identity.Web/AbpIdentityWebModule.cs index 2a2741b36b..16b0be3c75 100644 --- a/src/Volo.Abp.Identity.Web/AbpIdentityWebModule.cs +++ b/src/Volo.Abp.Identity.Web/AbpIdentityWebModule.cs @@ -2,7 +2,7 @@ using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; using Volo.Abp.AutoMapper; -using Volo.Abp.Identity.Web.Localization.Resource; +using Volo.Abp.Identity.Web.Localization.Resources.AbpIdentity; using Volo.Abp.Identity.Web.Navigation; using Volo.Abp.Identity.Web.ObjectMappings; using Volo.Abp.Localization; @@ -41,7 +41,8 @@ namespace Volo.Abp.Identity.Web services.Configure(options => { - options.Resources.AddJson("en"); + //options.Resources.AddVirtual("en"); + options.Resources.AddVirtualJson("en", "/Localization/Resources/AbpIdentity"); }); services.Configure(options => diff --git a/src/Volo.Abp.Identity.Web/Localization/Resource/IdentityResource.cs b/src/Volo.Abp.Identity.Web/Localization/Resource/IdentityResource.cs deleted file mode 100644 index c0cd16cb74..0000000000 --- a/src/Volo.Abp.Identity.Web/Localization/Resource/IdentityResource.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Volo.Abp.Localization; -using Volo.Abp.Localization.Resources.Validation; - -namespace Volo.Abp.Identity.Web.Localization.Resource -{ - [ShortLocalizationResourceName("AbpIdentity")] - [InheritResource(typeof(AbpValidationResource))] - public class IdentityResource - { - - } -} diff --git a/src/Volo.Abp.Identity.Web/Localization/Resources/AbpIdentity/IdentityResource.cs b/src/Volo.Abp.Identity.Web/Localization/Resources/AbpIdentity/IdentityResource.cs new file mode 100644 index 0000000000..5a7fbb5d7c --- /dev/null +++ b/src/Volo.Abp.Identity.Web/Localization/Resources/AbpIdentity/IdentityResource.cs @@ -0,0 +1,12 @@ +using Volo.Abp.Localization; +using Volo.Abp.Localization.Resources.AbpValidation; + +namespace Volo.Abp.Identity.Web.Localization.Resources.AbpIdentity +{ + [ShortLocalizationResourceName("AbpIdentity")] + [InheritResource(typeof(AbpValidationResource))] + public class IdentityResource //TODO: Rename to AbpIdentityResource + { + + } +} diff --git a/src/Volo.Abp.Identity.Web/Localization/Resource/en.json b/src/Volo.Abp.Identity.Web/Localization/Resources/AbpIdentity/en.json similarity index 100% rename from src/Volo.Abp.Identity.Web/Localization/Resource/en.json rename to src/Volo.Abp.Identity.Web/Localization/Resources/AbpIdentity/en.json diff --git a/src/Volo.Abp.Identity.Web/Localization/Resource/tr.json b/src/Volo.Abp.Identity.Web/Localization/Resources/AbpIdentity/tr.json similarity index 100% rename from src/Volo.Abp.Identity.Web/Localization/Resource/tr.json rename to src/Volo.Abp.Identity.Web/Localization/Resources/AbpIdentity/tr.json diff --git a/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml b/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml index a39e0f8c52..2bf4388f4b 100644 --- a/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml +++ b/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml @@ -1,6 +1,6 @@ @page @using Microsoft.Extensions.Localization -@using Volo.Abp.Identity.Web.Localization.Resource +@using Volo.Abp.Identity.Web.Localization.Resources.AbpIdentity @model Volo.Abp.Identity.Web.Pages.Identity.Users.CreateModalModel @inject IStringLocalizer L @{ diff --git a/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml b/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml index dcad62ebbf..b8aa57066b 100644 --- a/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml +++ b/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml @@ -1,6 +1,6 @@ @page @using Microsoft.Extensions.Localization -@using Volo.Abp.Identity.Web.Localization.Resource +@using Volo.Abp.Identity.Web.Localization.Resources.AbpIdentity @model Volo.Abp.Identity.Web.Pages.Identity.Users.EditModalModel @inject IStringLocalizer L @{ diff --git a/src/Volo.Abp.Identity.Web/Pages/Identity/Users/Index.cshtml b/src/Volo.Abp.Identity.Web/Pages/Identity/Users/Index.cshtml index b9f24af65c..06045e1d7d 100644 --- a/src/Volo.Abp.Identity.Web/Pages/Identity/Users/Index.cshtml +++ b/src/Volo.Abp.Identity.Web/Pages/Identity/Users/Index.cshtml @@ -1,7 +1,7 @@ @page @model Volo.Abp.Identity.Web.Pages.Identity.Users.IndexModel @using Microsoft.AspNetCore.Mvc.Localization -@using Volo.Abp.Identity.Web.Localization.Resource +@using Volo.Abp.Identity.Web.Localization.Resources.AbpIdentity @inject IHtmlLocalizer L @section styles { diff --git a/src/Volo.Abp.Identity.Web/Volo.Abp.Identity.Web.csproj b/src/Volo.Abp.Identity.Web/Volo.Abp.Identity.Web.csproj index 2bb4693bde..5fab38d4c5 100644 --- a/src/Volo.Abp.Identity.Web/Volo.Abp.Identity.Web.csproj +++ b/src/Volo.Abp.Identity.Web/Volo.Abp.Identity.Web.csproj @@ -13,7 +13,7 @@ - + @@ -27,7 +27,7 @@ - + diff --git a/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj b/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj index 2e4fc8289d..9c73b5fd66 100644 --- a/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj +++ b/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj @@ -19,6 +19,7 @@ + diff --git a/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpLocalizationModule.cs b/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpLocalizationModule.cs index 368fcf2a83..8770b36b38 100644 --- a/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpLocalizationModule.cs +++ b/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpLocalizationModule.cs @@ -1,18 +1,25 @@ using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.Localization.Resources.Validation; +using Volo.Abp.Localization.Resources.AbpValidation; using Volo.Abp.Modularity; +using Volo.Abp.VirtualFileSystem; namespace Volo.Abp.Localization { + [DependsOn(typeof(AbpVirtualFileSystemModule))] public class AbpLocalizationModule : AbpModule { public override void ConfigureServices(IServiceCollection services) { AbpStringLocalizerFactory.Replace(services); + services.Configure(options => + { + options.FileSets.AddEmbedded("Volo.Abp", "Volo/Abp"); + }); + services.Configure(options => { - options.Resources.AddJson("en"); + options.Resources.AddVirtualJson("en", "/Localization/Resources/AbpValidation"); }); services.AddAssemblyOf(); diff --git a/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonEmbeddedFileLocalizationDictionaryProvider.cs b/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonEmbeddedFileLocalizationDictionaryProvider.cs deleted file mode 100644 index ee0580d164..0000000000 --- a/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonEmbeddedFileLocalizationDictionaryProvider.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System.Reflection; -using Volo.Abp.Internal; - -namespace Volo.Abp.Localization.Json -{ - /// - /// Provides localization dictionaries from JSON files embedded into an . - /// - public class JsonEmbeddedFileLocalizationDictionaryProvider : LocalizationDictionaryProviderBase - { - private readonly Assembly _assembly; - private readonly string _rootNamespace; - - public JsonEmbeddedFileLocalizationDictionaryProvider(Assembly assembly, string rootNamespace) - { - _assembly = assembly; - _rootNamespace = rootNamespace; - } - - public override void Initialize(LocalizationResourceInitializationContext context) //TODO: Extract initialization to a factory..? - { - var rootNameSpaceWithDot = _rootNamespace + "."; - - var resourceNames = _assembly.GetManifestResourceNames(); - foreach (var resourceName in resourceNames) - { - if (resourceName.StartsWith(rootNameSpaceWithDot)) - { - using (var stream = _assembly.GetManifestResourceStream(resourceName)) - { - var jsonString = Utf8Helper.ReadStringFromStream(stream); - - var dictionary = CreateJsonLocalizationDictionary(jsonString); - if (Dictionaries.ContainsKey(dictionary.CultureName)) - { - throw new AbpException($"{resourceName} dictionary has a culture name '{dictionary.CultureName}' which is already defined!"); - } - - Dictionaries[dictionary.CultureName] = dictionary; - } - } - } - } - - protected virtual ILocalizationDictionary CreateJsonLocalizationDictionary(string jsonString) - { - return JsonLocalizationDictionaryBuilder.BuildFromJsonString(jsonString); - } - } -} \ No newline at end of file diff --git a/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizationResourceListExtensions.cs b/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizationResourceListExtensions.cs index 84ee44e478..5e6b7c3a93 100644 --- a/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizationResourceListExtensions.cs +++ b/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizationResourceListExtensions.cs @@ -1,15 +1,23 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using JetBrains.Annotations; using Volo.Abp.Localization.Json; +using Volo.Abp.Localization.VirtualFiles.Json; namespace Volo.Abp.Localization { public static class LocalizationResourceListExtensions { - public static LocalizationResource AddJson([NotNull] this LocalizationResourceDictionary resourceDictionary, [NotNull] string defaultCultureName) + public static LocalizationResource AddVirtualJson( + [NotNull] this LocalizationResourceDictionary resourceDictionary, + [NotNull] string defaultCultureName, + [NotNull] string virtualPath) { Check.NotNull(resourceDictionary, nameof(resourceDictionary)); Check.NotNull(defaultCultureName, nameof(defaultCultureName)); + Check.NotNull(virtualPath, nameof(virtualPath)); + + virtualPath = virtualPath.EnsureStartsWith('/'); var resourceType = typeof(TResource); @@ -22,18 +30,18 @@ namespace Volo.Abp.Localization resourceType, defaultCultureName, new JsonEmbeddedFileLocalizationDictionaryProvider( - resourceType.Assembly, - resourceType.Namespace + virtualPath ) ); } - public static void ExtendWithJson([NotNull] this LocalizationResourceDictionary resourceDictionary) + public static void ExtendWithVirtualJson( + [NotNull] this LocalizationResourceDictionary resourceDictionary, + [NotNull] string virtualPath) { Check.NotNull(resourceDictionary, nameof(resourceDictionary)); var resourceType = typeof(TResource); - var resourceExtType = typeof(TResourceExt); var resource = resourceDictionary.GetOrDefault(resourceType); if (resource == null) @@ -42,8 +50,7 @@ namespace Volo.Abp.Localization } resource.Extensions.Add(new JsonEmbeddedFileLocalizationDictionaryProvider( - resourceExtType.Assembly, - resourceExtType.Namespace + virtualPath )); } } diff --git a/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/Validation/IdentityResource.cs b/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpValidation/AbpValidationResource.cs similarity index 66% rename from src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/Validation/IdentityResource.cs rename to src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpValidation/AbpValidationResource.cs index 5e849d832c..02a6331c0a 100644 --- a/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/Validation/IdentityResource.cs +++ b/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpValidation/AbpValidationResource.cs @@ -1,4 +1,4 @@ -namespace Volo.Abp.Localization.Resources.Validation +namespace Volo.Abp.Localization.Resources.AbpValidation { [ShortLocalizationResourceName("AbpValidation")] public class AbpValidationResource diff --git a/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/Validation/en.json b/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpValidation/en.json similarity index 100% rename from src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/Validation/en.json rename to src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpValidation/en.json diff --git a/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/Validation/tr.json b/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpValidation/tr.json similarity index 100% rename from src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/Validation/tr.json rename to src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpValidation/tr.json diff --git a/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/Json/JsonEmbeddedFileLocalizationDictionaryProvider.cs b/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/Json/JsonEmbeddedFileLocalizationDictionaryProvider.cs new file mode 100644 index 0000000000..557da08a3f --- /dev/null +++ b/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/Json/JsonEmbeddedFileLocalizationDictionaryProvider.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.FileProviders; +using System; +using Volo.Abp.Localization.Json; + +namespace Volo.Abp.Localization.VirtualFiles.Json +{ + public class JsonEmbeddedFileLocalizationDictionaryProvider : VirtualFileLocalizationDictionaryProviderBase + { + public JsonEmbeddedFileLocalizationDictionaryProvider(string virtualPath) + : base(virtualPath) + { + + } + + protected override bool CanParseFile(IFileInfo file) + { + return file.Name.EndsWith(".json", StringComparison.OrdinalIgnoreCase); + } + + protected override ILocalizationDictionary CreateDictionary(string jsonString) + { + return JsonLocalizationDictionaryBuilder.BuildFromJsonString(jsonString); //TODO: Use composition over inheritance! + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationDictionaryProviderBase.cs b/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationDictionaryProviderBase.cs new file mode 100644 index 0000000000..fd712331ab --- /dev/null +++ b/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationDictionaryProviderBase.cs @@ -0,0 +1,48 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.FileProviders; +using Volo.Abp.Internal; +using Volo.Abp.VirtualFileSystem; + +namespace Volo.Abp.Localization.VirtualFiles +{ + public abstract class VirtualFileLocalizationDictionaryProviderBase : LocalizationDictionaryProviderBase + { + private readonly string _virtualPath; + + protected VirtualFileLocalizationDictionaryProviderBase(string virtualPath) + { + _virtualPath = virtualPath; + } + + public override void Initialize(LocalizationResourceInitializationContext context) //TODO: Extract initialization to a factory..? + { + var virtualFileProvider = context.ServiceProvider.GetRequiredService(); + var directoryContents = virtualFileProvider.GetDirectoryContents(_virtualPath); + + foreach (var file in directoryContents) + { + if (file.IsDirectory || !CanParseFile(file)) + { + continue; + } + + using (var stream = file.CreateReadStream()) + { + var fileContent = Utf8Helper.ReadStringFromStream(stream); + + var dictionary = CreateDictionary(fileContent); + if (Dictionaries.ContainsKey(dictionary.CultureName)) + { + throw new AbpException($"{file.PhysicalPath} dictionary has a culture name '{dictionary.CultureName}' which is already defined!"); + } + + Dictionaries[dictionary.CultureName] = dictionary; + } + } + } + + protected abstract bool CanParseFile(IFileInfo file); + + protected abstract ILocalizationDictionary CreateDictionary(string fileContent); + } +} \ No newline at end of file diff --git a/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj b/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj index 379304cc91..efff28f143 100644 --- a/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj +++ b/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj @@ -14,6 +14,7 @@ + diff --git a/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/Embedded/EmbeddedFileSet.cs b/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/Embedded/EmbeddedFileSet.cs index c9bd9f179e..c846bb9c41 100644 --- a/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/Embedded/EmbeddedFileSet.cs +++ b/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/Embedded/EmbeddedFileSet.cs @@ -19,7 +19,10 @@ namespace Volo.Abp.VirtualFileSystem.Embedded [CanBeNull] public string BaseFolderInProject { get; } - public EmbeddedFileSet([NotNull] Assembly assembly, [CanBeNull] string baseNamespace, [CanBeNull] string baseFolderInProject = null) + public EmbeddedFileSet( + [NotNull] Assembly assembly, + [CanBeNull] string baseNamespace, + [CanBeNull] string baseFolderInProject = null) { Check.NotNull(assembly, nameof(assembly)); diff --git a/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileProvider.cs b/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileProvider.cs index 9e17c161cc..00093c707f 100644 --- a/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileProvider.cs +++ b/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileProvider.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Options; using Microsoft.Extensions.Primitives; @@ -9,80 +10,126 @@ namespace Volo.Abp.VirtualFileSystem { public class VirtualFileProvider : IVirtualFileProvider, ISingletonDependency { + private readonly IFileProvider _fileProvider; private readonly VirtualFileSystemOptions _options; - private readonly Lazy> _files; public VirtualFileProvider(IOptions options) { _options = options.Value; - _files = new Lazy>( - CreateResourcesDictionary, - true - ); + _fileProvider = CreateHybridProvider(); } public IFileInfo GetFileInfo(string subpath) { - if (string.IsNullOrEmpty(subpath)) - { - return new NotFoundFileInfo(subpath); - } + return _fileProvider.GetFileInfo(subpath); + } + + public IDirectoryContents GetDirectoryContents(string subpath) + { + return _fileProvider.GetDirectoryContents(subpath); + } + + public IChangeToken Watch(string filter) + { + return _fileProvider.Watch(filter); + } - var file = _files.Value.GetOrDefault(VirtualFilePathHelper.NormalizePath(subpath)); + private IFileProvider CreateHybridProvider() + { + IFileProvider fileProvider = new InternalVirtualFileProvider(_options); - if (file == null) + if (_options.FileSets.PhysicalPaths.Any()) { - return new NotFoundFileInfo(subpath); + var fileProviders = _options.FileSets.PhysicalPaths + .Select(p => new PhysicalFileProvider(p)) + .Cast() + .ToList(); + + fileProviders.Add(fileProvider); + + fileProvider = new CompositeFileProvider(fileProviders); } - return file; + return fileProvider; } - public IDirectoryContents GetDirectoryContents(string subpath) + private class InternalVirtualFileProvider : IFileProvider { - var directory = GetFileInfo(subpath); - if (!directory.IsDirectory) + private readonly VirtualFileSystemOptions _options; + private readonly Lazy> _files; + + public InternalVirtualFileProvider(VirtualFileSystemOptions options) { - return new NotFoundDirectoryContents(); + _options = options; + _files = new Lazy>( + CreateResourcesDictionary, + true + ); } - var fileList = new List(); - - var directoryPath = subpath + "/"; - foreach (var fileInfo in _files.Value.Values) + public IFileInfo GetFileInfo(string subpath) { - if (!fileInfo.PhysicalPath.StartsWith(directoryPath)) + if (string.IsNullOrEmpty(subpath)) { - continue; + return new NotFoundFileInfo(subpath); } - var relativePath = fileInfo.PhysicalPath.Substring(directoryPath.Length); - if (relativePath.Contains("/")) + var file = _files.Value.GetOrDefault(VirtualFilePathHelper.NormalizePath(subpath)); + + if (file == null) { - continue; + return new NotFoundFileInfo(subpath); } - fileList.Add(fileInfo); + return file; } - return new EnumerableDirectoryContents(fileList); - } + public IDirectoryContents GetDirectoryContents(string subpath) + { + var directory = GetFileInfo(subpath); + if (!directory.IsDirectory) + { + return new NotFoundDirectoryContents(); + } - public IChangeToken Watch(string filter) - { - return NullChangeToken.Singleton; - } + var fileList = new List(); - private Dictionary CreateResourcesDictionary() - { - var files = new Dictionary(StringComparer.OrdinalIgnoreCase); + var directoryPath = subpath.EnsureEndsWith('/'); + foreach (var fileInfo in _files.Value.Values) + { + if (!fileInfo.PhysicalPath.StartsWith(directoryPath)) + { + continue; + } + + var relativePath = fileInfo.PhysicalPath.Substring(directoryPath.Length); + if (relativePath.Contains("/")) + { + continue; + } + + fileList.Add(fileInfo); + } + + return new EnumerableDirectoryContents(fileList); + } - foreach (var set in _options.FileSets) + public IChangeToken Watch(string filter) { - set.AddFiles(files); + return NullChangeToken.Singleton; } - return files; + private Dictionary CreateResourcesDictionary() + { + var files = new Dictionary(StringComparer.OrdinalIgnoreCase); + + foreach (var set in _options.FileSets) + { + set.AddFiles(files); + } + + return files; + } } } } \ No newline at end of file diff --git a/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSetListExtensions.cs b/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSetListExtensions.cs index 1e29398fb3..46f0e7cc10 100644 --- a/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSetListExtensions.cs +++ b/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSetListExtensions.cs @@ -8,14 +8,15 @@ namespace Volo.Abp.VirtualFileSystem { public static class VirtualFileSetListExtensions { - public static void AddEmbedded([NotNull] this VirtualFileSetList list, [CanBeNull] string baseNamespace = null) + public static void AddEmbedded([NotNull] this VirtualFileSetList list, [CanBeNull] string baseNamespace = null, string baseFolderInProject = null) { Check.NotNull(list, nameof(list)); list.Add( new EmbeddedFileSet( typeof(T).Assembly, - baseNamespace + baseNamespace, + baseFolderInProject ) ); } diff --git a/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs b/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs index d992b7185b..4f8f90652d 100644 --- a/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs +++ b/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs @@ -2,12 +2,12 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Localization; using Shouldly; -using Volo.Abp.Localization.Base.CountryNames; -using Volo.Abp.Localization.Base.Validation; -using Volo.Abp.Localization.Source; -using Volo.Abp.Localization.SourceExt; +using Volo.Abp.Localization.TestResources.Base.CountryNames; +using Volo.Abp.Localization.TestResources.Base.Validation; +using Volo.Abp.Localization.TestResources.Source; using Volo.Abp.Modularity; using Volo.Abp.TestBase; +using Volo.Abp.VirtualFileSystem; using Xunit; namespace Volo.Abp.Localization @@ -109,12 +109,17 @@ namespace Volo.Abp.Localization { public override void ConfigureServices(IServiceCollection services) { + services.Configure(options => + { + options.FileSets.AddEmbedded(); + }); + services.Configure(options => { - options.Resources.AddJson("en"); - options.Resources.AddJson("en"); - options.Resources.AddJson("en"); - options.Resources.ExtendWithJson(); + options.Resources.AddVirtualJson("en", "/Volo/Abp/Localization/TestResources/Base/Validation"); + options.Resources.AddVirtualJson("en", "/Volo/Abp/Localization/TestResources/Base/CountryNames"); + options.Resources.AddVirtualJson("en", "/Volo/Abp/Localization/TestResources/Source"); + options.Resources.ExtendWithVirtualJson("/Volo/Abp/Localization/TestResources/SourceExt"); }); } } diff --git a/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/SourceExt/SourceExt.cs b/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/SourceExt/SourceExt.cs deleted file mode 100644 index 0e7f2b8087..0000000000 --- a/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/SourceExt/SourceExt.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Volo.Abp.Localization.SourceExt -{ - internal sealed class LocalizationTestResourceExt - { - - } -} diff --git a/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/Base/CountryNames/LocalizationTestCountryNamesResource.cs b/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/LocalizationTestCountryNamesResource.cs similarity index 56% rename from test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/Base/CountryNames/LocalizationTestCountryNamesResource.cs rename to test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/LocalizationTestCountryNamesResource.cs index dc05118996..cb6c8a7256 100644 --- a/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/Base/CountryNames/LocalizationTestCountryNamesResource.cs +++ b/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/LocalizationTestCountryNamesResource.cs @@ -1,4 +1,4 @@ -namespace Volo.Abp.Localization.Base.CountryNames +namespace Volo.Abp.Localization.TestResources.Base.CountryNames { public sealed class LocalizationTestCountryNamesResource { diff --git a/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/Base/CountryNames/en.json b/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/en.json similarity index 100% rename from test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/Base/CountryNames/en.json rename to test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/en.json diff --git a/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/Base/CountryNames/tr.json b/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/tr.json similarity index 100% rename from test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/Base/CountryNames/tr.json rename to test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/tr.json diff --git a/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/Base/Validation/LocalizationTestValidationResource.cs b/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/LocalizationTestValidationResource.cs similarity index 56% rename from test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/Base/Validation/LocalizationTestValidationResource.cs rename to test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/LocalizationTestValidationResource.cs index 23202a6bda..f6afbbdfef 100644 --- a/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/Base/Validation/LocalizationTestValidationResource.cs +++ b/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/LocalizationTestValidationResource.cs @@ -1,4 +1,4 @@ -namespace Volo.Abp.Localization.Base.Validation +namespace Volo.Abp.Localization.TestResources.Base.Validation { public sealed class LocalizationTestValidationResource { diff --git a/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/Base/Validation/en.json b/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/en.json similarity index 100% rename from test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/Base/Validation/en.json rename to test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/en.json diff --git a/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/Source/LocalizationTestResource.cs b/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/LocalizationTestResource.cs similarity index 54% rename from test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/Source/LocalizationTestResource.cs rename to test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/LocalizationTestResource.cs index 73d4c400cd..04cacc6b20 100644 --- a/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/Source/LocalizationTestResource.cs +++ b/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/LocalizationTestResource.cs @@ -1,7 +1,7 @@ -using Volo.Abp.Localization.Base.CountryNames; -using Volo.Abp.Localization.Base.Validation; +using Volo.Abp.Localization.TestResources.Base.CountryNames; +using Volo.Abp.Localization.TestResources.Base.Validation; -namespace Volo.Abp.Localization.Source +namespace Volo.Abp.Localization.TestResources.Source { [InheritResource(typeof(LocalizationTestValidationResource))] [InheritResource(typeof(LocalizationTestCountryNamesResource))] diff --git a/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/Source/en.json b/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/en.json similarity index 100% rename from test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/Source/en.json rename to test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/en.json diff --git a/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/Source/tr.json b/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/tr.json similarity index 100% rename from test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/Source/tr.json rename to test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/tr.json diff --git a/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/SourceExt/en.json b/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/en.json similarity index 100% rename from test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/SourceExt/en.json rename to test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/en.json diff --git a/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/SourceExt/it.json b/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/it.json similarity index 100% rename from test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/SourceExt/it.json rename to test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/it.json