diff --git a/src/OrchardCoreContrib.DataLocalization/AdminMenu.cs b/src/OrchardCoreContrib.DataLocalization/AdminMenu.cs
index daba5657..6929d832 100644
--- a/src/OrchardCoreContrib.DataLocalization/AdminMenu.cs
+++ b/src/OrchardCoreContrib.DataLocalization/AdminMenu.cs
@@ -1,49 +1,46 @@
+using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Localization;
using OrchardCore.Navigation;
+
+namespace OrchardCoreContrib.DataLocalization;
+
using OrchardCoreContrib.Navigation;
-namespace OrchardCore.DataLocalization
+///
+/// Represents a localization menu in the admin site.
+///
+///
+/// Creates a new instance of the .
+///
+/// The .
+public class AdminMenu(IStringLocalizer S) : AdminNavigationProvider
{
- using OrchardCoreContrib.Navigation;
-
- ///
- /// Represents a localization menu in the admin site.
- ///
- public class AdminMenu : AdminNavigationProvider
+ private static readonly RouteValueDictionary _routeValues = new()
{
- private readonly IStringLocalizer S;
+ { "area", "OrchardCoreContrib.DataLocalization" }
+ };
- ///
- /// Creates a new instance of the .
- ///
- /// The .
- public AdminMenu(IStringLocalizer localizer)
- {
- S = localizer;
- }
-
- ///
- public override void BuildNavigation(NavigationBuilder builder)
- {
- builder
- .Add(S["Configuration"], NavigationConstants.AdminMenuConfigurationPosition, localization => localization
- .Add(S["Settings"], settings => settings
- .Add(S["Localization"], localization => localization
- .AddClass("localization").Id("localization")
- .Add(S["Data Resources"], S["Data Resources"].PrefixPosition(), data => data
- .AddClass("data-resources").Id("data-resources")
- .Add(S["Content Types"], S["Content Types"].PrefixPosition(), type => type
- .Action("ManageContentTypeResources", "Admin", new { area = "OrchardCoreContrib.DataLocalization" })
- .LocalNav()
- )
- .Add(S["Content Fields"], S["Content Fields"].PrefixPosition(), type => type
- .Action("ManageContentFieldResources", "Admin", new { area = "OrchardCoreContrib.DataLocalization" })
- .LocalNav()
- )
+ ///
+ public override void BuildNavigation(NavigationBuilder builder)
+ {
+ builder
+ .Add(S["Configuration"], NavigationConstants.AdminMenuConfigurationPosition, localization => localization
+ .Add(S["Settings"], settings => settings
+ .Add(S["Localization"], localization => localization
+ .AddClass("localization").Id("localization")
+ .Add(S["Data Resources"], S["Data Resources"].PrefixPosition(), data => data
+ .AddClass("data-resources").Id("data-resources")
+ .Add(S["Content Types"], S["Content Types"].PrefixPosition(), type => type
+ .Action("ManageContentTypeResources", "Admin", _routeValues)
+ .LocalNav()
+ )
+ .Add(S["Content Fields"], S["Content Fields"].PrefixPosition(), type => type
+ .Action("ManageContentFieldResources", "Admin", _routeValues)
+ .LocalNav()
)
)
)
- );
- }
+ )
+ );
}
}
diff --git a/src/OrchardCoreContrib.DataLocalization/Controllers/AdminController.cs b/src/OrchardCoreContrib.DataLocalization/Controllers/AdminController.cs
index 8b8f4f39..eb95b886 100644
--- a/src/OrchardCoreContrib.DataLocalization/Controllers/AdminController.cs
+++ b/src/OrchardCoreContrib.DataLocalization/Controllers/AdminController.cs
@@ -8,160 +8,140 @@
using OrchardCoreContrib.DataLocalization.ViewModels;
using OrchardCoreContrib.Localization;
using OrchardCoreContrib.Localization.Data;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-namespace OrchardCoreContrib.DataLocalization.Controllers
+namespace OrchardCoreContrib.DataLocalization.Controllers;
+
+public class AdminController(
+ IContentDefinitionService contentDefinitionService,
+ IEnumerable dataResourceStringProviders,
+ TranslationsManager translationsManager,
+ IMemoryCache memoryCache,
+ IHtmlLocalizer H,
+ INotifier notifier) : Controller
{
- public class AdminController : Controller
+ private const string ResourcesCachePrefix = "OCC-CultureDictionary-";
+ private const string AntiForgeryTokenKey = "__RequestVerificationToken";
+
+ public async Task ManageContentTypeResources([FromQuery] string selectedCulture)
{
- private const string ResourcesCachePrefix = "OCC-CultureDictionary-";
- private const string AntiForgeryTokenKey = "__RequestVerificationToken";
-
- private readonly IContentDefinitionService _contentDefinitionService;
- private readonly IEnumerable _dataResourceStringProviders;
- private readonly TranslationsManager _translationsManager;
- private readonly IMemoryCache _memoryCache;
- private readonly INotifier _notifier;
- private readonly IHtmlLocalizer H;
-
- public AdminController(
- IContentDefinitionService contentDefinitionService,
- IEnumerable dataResourceStringProviders,
- TranslationsManager translationsManager,
- IMemoryCache memoryCache,
- IHtmlLocalizer htmlLocalizer,
- INotifier notifier)
- {
- _contentDefinitionService = contentDefinitionService;
- _dataResourceStringProviders = dataResourceStringProviders;
- _translationsManager = translationsManager;
- _memoryCache = memoryCache;
- _notifier = notifier;
- H = htmlLocalizer;
- }
+ var resourcesNames = await GetResourcesNamesAsync(ContentTypeResourceStringProvider.Context);
+
+ var translationsDocument = await translationsManager.GetTranslationsDocumentAsync();
- public async Task ManageContentTypeResources([FromQuery] string selectedCulture)
+ var viewModel = new ContentTypeResourcesViewModel
{
- var resourcesNames = await GetResourcesNamesAsync(ContentTypeResourceStringProvider.Context);
+ ResourcesNames = resourcesNames,
+ Translations = [],
+ SelectedCulture = selectedCulture
+ };
- var translationsDocument = await _translationsManager.GetTranslationsDocumentAsync();
+ if (!string.IsNullOrEmpty(selectedCulture) &&
+ translationsDocument.Translations.TryGetValue(selectedCulture, out IEnumerable value))
+ {
+ viewModel.Translations = value;
+ }
- var viewModel = new ContentTypeResourcesViewModel
- {
- ResourcesNames = resourcesNames,
- Translations = Enumerable.Empty(),
- SelectedCulture = selectedCulture
- };
+ return View(viewModel);
+ }
- if (!String.IsNullOrEmpty(selectedCulture) && translationsDocument.Translations.ContainsKey(selectedCulture))
- {
- viewModel.Translations = translationsDocument.Translations[selectedCulture];
- }
+ [HttpPost]
+ [ActionName(nameof(ManageContentTypeResources))]
+ public async Task ManageContentTypeResourcesPost([FromQuery] string selectedCulture)
+ {
+ await UpdateResourcesAsync(ContentTypeResourceStringProvider.Context, selectedCulture);
- return View(viewModel);
- }
+ return RedirectToAction(nameof(ManageContentTypeResources), new { selectedCulture });
+ }
- [HttpPost]
- [ActionName(nameof(ManageContentTypeResources))]
- public async Task ManageContentTypeResourcesPost([FromQuery] string selectedCulture)
- {
- await UpdateResourcesAsync(ContentTypeResourceStringProvider.Context, selectedCulture);
+ public async Task ManageContentFieldResources([FromQuery] string selectedCulture, [FromQuery] string contentType)
+ {
+ var context = $"{contentType}-{ContentFieldResourceStringProvider.Context}";
+ var resourcesNames = await GetResourcesNamesAsync(context);
- return RedirectToAction(nameof(ManageContentTypeResources), new { selectedCulture });
- }
+ var translationsDocument = await translationsManager.GetTranslationsDocumentAsync();
- public async Task ManageContentFieldResources([FromQuery] string selectedCulture, [FromQuery] string contentType)
+ var viewModel = new ContentFieldResourcesViewModel
{
- var context = $"{contentType}-{ContentFieldResourceStringProvider.Context}";
- var resourcesNames = await GetResourcesNamesAsync(context);
+ ContentTypes = (await contentDefinitionService.GetTypesAsync()).Select(t => t.Name),
+ ResourcesNames = resourcesNames,
+ Translations = [],
+ SelectedContentType = contentType,
+ SelectedCulture = selectedCulture
+ };
+
+ if (!string.IsNullOrEmpty(selectedCulture) &&
+ translationsDocument.Translations.TryGetValue(selectedCulture, out IEnumerable value))
+ {
+ viewModel.Translations = value;
+ }
- var translationsDocument = await _translationsManager.GetTranslationsDocumentAsync();
+ return View(viewModel);
+ }
- var viewModel = new ContentFieldResourcesViewModel
- {
- ContentTypes = (await _contentDefinitionService.GetTypesAsync()).Select(t => t.Name),
- ResourcesNames = resourcesNames,
- Translations = Enumerable.Empty(),
- SelectedContentType = contentType,
- SelectedCulture = selectedCulture
- };
-
- if (!String.IsNullOrEmpty(selectedCulture) && translationsDocument.Translations.ContainsKey(selectedCulture))
- {
- viewModel.Translations = translationsDocument.Translations[selectedCulture];
- }
+ [HttpPost]
+ [ActionName(nameof(ManageContentFieldResources))]
+ public async Task ManageContentFieldResourcesPost([FromQuery] string selectedCulture, [FromQuery] string contentType)
+ {
+ var context = $"{contentType}-{ContentFieldResourceStringProvider.Context}";
+
+ await UpdateResourcesAsync(context, selectedCulture);
- return View(viewModel);
- }
+ return RedirectToAction(nameof(ManageContentFieldResources), new { selectedCulture, contentType });
+ }
- [HttpPost]
- [ActionName(nameof(ManageContentFieldResources))]
- public async Task ManageContentFieldResourcesPost([FromQuery] string selectedCulture, [FromQuery] string contentType)
+ private async Task> GetResourcesNamesAsync(string context)
+ {
+ IEnumerable resourcesNames = null;
+ foreach (var dataResourceStringProvider in dataResourceStringProviders)
{
- var context = $"{contentType}-{ContentFieldResourceStringProvider.Context}";
-
- await UpdateResourcesAsync(context, selectedCulture);
+ resourcesNames = (await dataResourceStringProvider.GetAllResourceStringsAsync(context))
+ .Select(r => r.GetMessageId());
- return RedirectToAction(nameof(ManageContentFieldResources), new { selectedCulture, contentType });
+ if (resourcesNames.Any())
+ {
+ break;
+ }
}
- private async Task> GetResourcesNamesAsync(string context)
- {
- IEnumerable resourcesNames = null;
- foreach (var dataResourceStringProvider in _dataResourceStringProviders)
- {
- resourcesNames = (await dataResourceStringProvider.GetAllResourceStringsAsync(context))
- .Select(r => r.GetMessageId());
+ return resourcesNames;
+ }
- if (resourcesNames.Any())
- {
- break;
- }
- }
+ private async Task UpdateResourcesAsync(string context, string culture)
+ {
+ var translations = new List();
- return resourcesNames;
- }
+ var translationsDocument = await translationsManager.GetTranslationsDocumentAsync();
- private async Task UpdateResourcesAsync(string context, string culture)
+ if (translationsDocument.Translations.TryGetValue(culture, out IEnumerable translationsValue))
{
- var translations = new List();
+ translations = [.. translationsValue];
+ }
- var translationsDocument = await _translationsManager.GetTranslationsDocumentAsync();
+ foreach (var key in Request.Form.Keys.Where(k => !k.Equals(AntiForgeryTokenKey)))
+ {
+ var value = Request.Form[key].ToString();
+ var index = translations.FindIndex(t => t.Context == context && t.Key == key);
- if (translationsDocument.Translations.ContainsKey(culture))
+ if (index > -1)
{
- translations = translationsDocument.Translations[culture].ToList();
+ translations[index].Value = value;
}
-
- foreach (var key in Request.Form.Keys.Where(k => !k.Equals(AntiForgeryTokenKey)))
+ else
{
- var value = Request.Form[key].ToString();
- var index = translations.FindIndex(t => t.Context == context && t.Key == key);
-
- if (index > -1)
- {
- translations[index].Value = value;
- }
- else
+ translations.Add(new Translation
{
- translations.Add(new Translation
- {
- Context = context,
- Key = key,
- Value = value
- });
- }
+ Context = context,
+ Key = key,
+ Value = value
+ });
}
+ }
- await _translationsManager.UpdateTranslationAsync(culture, translations);
+ await translationsManager.UpdateTranslationAsync(culture, translations);
- // Purge the resource cache
- _memoryCache.Remove(ResourcesCachePrefix + culture);
+ // Purge the resource cache
+ memoryCache.Remove(ResourcesCachePrefix + culture);
- await _notifier.SuccessAsync(H["The resource has been saved successfully."]);
- }
+ await notifier.SuccessAsync(H["The resource has been saved successfully."]);
}
}
diff --git a/src/OrchardCoreContrib.DataLocalization/DataTranslationProvider.cs b/src/OrchardCoreContrib.DataLocalization/DataTranslationProvider.cs
index f6447a6c..bc07fa4f 100644
--- a/src/OrchardCoreContrib.DataLocalization/DataTranslationProvider.cs
+++ b/src/OrchardCoreContrib.DataLocalization/DataTranslationProvider.cs
@@ -2,42 +2,32 @@
using OrchardCore.Localization;
using OrchardCoreContrib.DataLocalization.Services;
using OrchardCoreContrib.Localization.Data;
-using System.Linq;
-namespace OrchardCoreContrib.DataLocalization
+namespace OrchardCoreContrib.DataLocalization;
+
+///
+/// Provides a translations from the underlying data store.
+///
+///
+/// Creates a new instance of .
+///
+/// The .
+public class DataTranslationProvider(IServiceScopeFactory scopeFactory) : IDataTranslationProvider
{
- ///
- /// Provides a translations from the underlying data store.
- ///
- public class DataTranslationProvider : IDataTranslationProvider
+ ///
+ public void LoadTranslations(string cultureName, CultureDictionary dictionary)
{
- private readonly IServiceScopeFactory _scopeFactory;
-
- ///
- /// Creates a new instance of .
- ///
- /// The .
- public DataTranslationProvider(IServiceScopeFactory scopeFactory)
+ using (var scope = scopeFactory.CreateScope())
{
- _scopeFactory = scopeFactory;
- }
+ var translationsManager = scope.ServiceProvider.GetService();
- ///
- public void LoadTranslations(string cultureName, CultureDictionary dictionary)
- {
- using (var scope = _scopeFactory.CreateScope())
- {
- var translationsManager = scope.ServiceProvider.GetService();
-
- var translationsDocument = translationsManager.GetTranslationsDocumentAsync().Result;
+ var translationsDocument = translationsManager.GetTranslationsDocumentAsync().Result;
- if (translationsDocument.Translations.ContainsKey(cultureName))
- {
- var records = translationsDocument.Translations[cultureName]
- .Select(t => new CultureDictionaryRecord(t.Key, t.Context, new[] { t.Value }));
+ if (translationsDocument.Translations.TryGetValue(cultureName, out IEnumerable value))
+ {
+ var records = value.Select(t => new CultureDictionaryRecord(t.Key, t.Context, [t.Value]));
- dictionary.MergeTranslations(records);
- }
+ dictionary.MergeTranslations(records);
}
}
}
diff --git a/src/OrchardCoreContrib.DataLocalization/Manifest.cs b/src/OrchardCoreContrib.DataLocalization/Manifest.cs
index 15c55bc0..a5ac3628 100644
--- a/src/OrchardCoreContrib.DataLocalization/Manifest.cs
+++ b/src/OrchardCoreContrib.DataLocalization/Manifest.cs
@@ -5,7 +5,7 @@
Name = "Data Localization",
Author = ManifestConstants.Author,
Website = ManifestConstants.Website,
- Version = "1.1.1",
+ Version = "1.3.0",
Category = "Internationalization",
Dependencies = new[] { "OrchardCore.Localization" }
)]
diff --git a/src/OrchardCoreContrib.DataLocalization/Models/Translation.cs b/src/OrchardCoreContrib.DataLocalization/Models/Translation.cs
index 4f081672..aaf7efe7 100644
--- a/src/OrchardCoreContrib.DataLocalization/Models/Translation.cs
+++ b/src/OrchardCoreContrib.DataLocalization/Models/Translation.cs
@@ -1,23 +1,22 @@
-namespace OrchardCoreContrib.DataLocalization.Models
+namespace OrchardCoreContrib.DataLocalization.Models;
+
+///
+/// Represents a translation.
+///
+public class Translation
{
///
- /// Represents a translation.
+ /// Gets the translation context.
///
- public class Translation
- {
- ///
- /// Gets the translation context.
- ///
- public string Context { get; set; }
+ public string Context { get; set; }
- ///
- /// Gets the translation key.
- ///
- public string Key { get; set; }
+ ///
+ /// Gets the translation key.
+ ///
+ public string Key { get; set; }
- ///
- /// Gets the translation value.
- ///
- public string Value { get; set; }
- }
+ ///
+ /// Gets the translation value.
+ ///
+ public string Value { get; set; }
}
diff --git a/src/OrchardCoreContrib.DataLocalization/Models/TranslationsDocument.cs b/src/OrchardCoreContrib.DataLocalization/Models/TranslationsDocument.cs
index 571e2a54..e772cff3 100644
--- a/src/OrchardCoreContrib.DataLocalization/Models/TranslationsDocument.cs
+++ b/src/OrchardCoreContrib.DataLocalization/Models/TranslationsDocument.cs
@@ -1,25 +1,22 @@
using OrchardCore.Data.Documents;
-using System;
-using System.Collections.Generic;
-namespace OrchardCoreContrib.DataLocalization.Models
+namespace OrchardCoreContrib.DataLocalization.Models;
+
+///
+/// Represents a documents that contains a list of .
+///
+public class TranslationsDocument : Document
{
///
- /// Represents a documents that contains a list of .
+ /// Creates a new instance of .
///
- public class TranslationsDocument : Document
+ public TranslationsDocument()
{
- ///
- /// Creates a new instance of .
- ///
- public TranslationsDocument()
- {
- Translations = new Dictionary>(StringComparer.OrdinalIgnoreCase);
- }
-
- ///
- /// Gets the list of the translations associated with a culture.
- ///
- public Dictionary> Translations { get; }
+ Translations = new Dictionary>(StringComparer.OrdinalIgnoreCase);
}
+
+ ///
+ /// Gets the list of the translations associated with a culture.
+ ///
+ public Dictionary> Translations { get; }
}
diff --git a/src/OrchardCoreContrib.DataLocalization/OrchardCoreContrib.DataLocalization.csproj b/src/OrchardCoreContrib.DataLocalization/OrchardCoreContrib.DataLocalization.csproj
index d1ce4439..f91f0ec3 100644
--- a/src/OrchardCoreContrib.DataLocalization/OrchardCoreContrib.DataLocalization.csproj
+++ b/src/OrchardCoreContrib.DataLocalization/OrchardCoreContrib.DataLocalization.csproj
@@ -2,10 +2,11 @@
true
- 1.2.0
+ 1.3.0
The Orchard Core Contrib Team
Provides a localization feature for dynamic data.
+ README.md
BSD-3-Clause
https://github.com/OrchardCoreContrib/OrchardCoreContrib.Modules/tree/main/src/OrchardCoreContrib.DataLocalization/README.md
https://github.com/OrchardCoreContrib/OrchardCoreContrib.Modules
@@ -26,6 +27,7 @@
+
diff --git a/src/OrchardCoreContrib.DataLocalization/README.md b/src/OrchardCoreContrib.DataLocalization/README.md
index a6a5ca7f..03162a7a 100644
--- a/src/OrchardCoreContrib.DataLocalization/README.md
+++ b/src/OrchardCoreContrib.DataLocalization/README.md
@@ -4,7 +4,7 @@ This module provides features for localizing dynamic data.
## Version
-1.1.1
+1.3.0
## Category
@@ -28,6 +28,7 @@ Internationalization
| Name | Version |
|-------------------------------------------------------------------------------------------------------------------------|-------------|
+| [`OrchardCoreContrib.DataLocalization`](https://www.nuget.org/packages/OrchardCoreContrib.DataLocalization/1.3.0) | 1.3.0 |
| [`OrchardCoreContrib.DataLocalization`](https://www.nuget.org/packages/OrchardCoreContrib.DataLocalization/1.2.0) | 1.2.0 |
| [`OrchardCoreContrib.DataLocalization`](https://www.nuget.org/packages/OrchardCoreContrib.DataLocalization/1.1.1) | 1.1.1 |
| [`OrchardCoreContrib.DataLocalization`](https://www.nuget.org/packages/OrchardCoreContrib.DataLocalization/1.1.0) | 1.1.0 |
diff --git a/src/OrchardCoreContrib.DataLocalization/Services/ContentFieldResourceStringProvider.cs b/src/OrchardCoreContrib.DataLocalization/Services/ContentFieldResourceStringProvider.cs
index ddbd2440..7b5f517e 100644
--- a/src/OrchardCoreContrib.DataLocalization/Services/ContentFieldResourceStringProvider.cs
+++ b/src/OrchardCoreContrib.DataLocalization/Services/ContentFieldResourceStringProvider.cs
@@ -1,43 +1,55 @@
-using OrchardCore.ContentManagement.Metadata.Settings;
+using OrchardCore.ContentManagement.Metadata;
using OrchardCore.ContentTypes.Services;
using OrchardCore.Localization;
using OrchardCoreContrib.Localization.Data;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-namespace OrchardCoreContrib.DataLocalization.Services
+namespace OrchardCoreContrib.DataLocalization.Services;
+
+///
+/// Represents a resource string provider for content fields.
+///
+///
+/// Creates a instance of .
+///
+/// The .
+public class ContentFieldResourceStringProvider(
+ IContentDefinitionService contentDefinitionService,
+ IContentDefinitionManager contentDefinitionManager) : IDataResourceStringProvider
{
- ///
- /// Represents a resource string provider for content fields.
- ///
- public class ContentFieldResourceStringProvider : IDataResourceStringProvider
+ internal static readonly string Context = "ContentField";
+
+ ///
+ public async Task> GetAllResourceStringsAsync()
{
- internal static readonly string Context = "ContentField";
+ var cultureDictionary = new List();
- private readonly IContentDefinitionService _contentDefinitionService;
+ var typeViewModels = await contentDefinitionService.GetTypesAsync();
- ///
- /// Creates a instance of .
- ///
- /// The .
- public ContentFieldResourceStringProvider(IContentDefinitionService contentDefinitionService)
+ foreach (var typeViewModel in typeViewModels)
{
- _contentDefinitionService = contentDefinitionService;
+ var fields = await GetFieldNamesAsync(typeViewModel.TypeDefinition.Name);
+
+ cultureDictionary.AddRange(fields.Select(field => new CultureDictionaryRecordKey
+ {
+ MessageId = field,
+ Context = $"{typeViewModel.Name}-{Context}"
+ }));
}
- ///
- public async Task> GetAllResourceStringsAsync()
+ return cultureDictionary;
+ }
+
+ private async Task> GetFieldNamesAsync(string contentType)
+ {
+ var typeDefinition = await contentDefinitionManager.GetTypeDefinitionAsync(contentType);
+
+ if (typeDefinition is null)
{
- var contentTypes = await _contentDefinitionService.GetTypesAsync();
-
- return contentTypes
- .SelectMany(t => t.TypeDefinition.Parts.SelectMany(p => p.PartDefinition.Fields.Select(f => new { ContentType = t.Name, ContentField = f.GetSettings().DisplayName })))
- .Select(t => new CultureDictionaryRecordKey
- {
- MessageId = t.ContentField,
- Context = $"{t.ContentType}-{Context}"
- });
+ return [];
}
+
+ return typeDefinition.Parts
+ .SelectMany(p => p.PartDefinition.Fields)
+ .Select(f => f.Name);
}
}
diff --git a/src/OrchardCoreContrib.DataLocalization/Services/ContentTypeResourceStringProvider.cs b/src/OrchardCoreContrib.DataLocalization/Services/ContentTypeResourceStringProvider.cs
index a560ead1..eb7b3d08 100644
--- a/src/OrchardCoreContrib.DataLocalization/Services/ContentTypeResourceStringProvider.cs
+++ b/src/OrchardCoreContrib.DataLocalization/Services/ContentTypeResourceStringProvider.cs
@@ -1,40 +1,29 @@
using OrchardCore.ContentTypes.Services;
using OrchardCore.Localization;
using OrchardCoreContrib.Localization.Data;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-namespace OrchardCoreContrib.DataLocalization.Services
-{
- ///
- /// Represents a resource string provider for content types.
- ///
- public class ContentTypeResourceStringProvider : IDataResourceStringProvider
- {
- internal static readonly string Context = "ContentType";
+namespace OrchardCoreContrib.DataLocalization.Services;
- private readonly IContentDefinitionService _contentDefinitionService;
+///
+/// Represents a resource string provider for content types.
+///
+///
+/// Creates a instance of .
+///
+/// The .
+public class ContentTypeResourceStringProvider(IContentDefinitionService contentDefinitionService) : IDataResourceStringProvider
+{
+ internal static readonly string Context = "ContentType";
- ///
- /// Creates a instance of .
- ///
- /// The .
- public ContentTypeResourceStringProvider(IContentDefinitionService contentDefinitionService)
- {
- _contentDefinitionService = contentDefinitionService;
- }
+ ///
+ public async Task> GetAllResourceStringsAsync()
+ {
+ var contentTypes = await contentDefinitionService.GetTypesAsync();
- ///
- public async Task> GetAllResourceStringsAsync()
+ return contentTypes.Select(t => new CultureDictionaryRecordKey
{
- var contentTypes = await _contentDefinitionService.GetTypesAsync();
-
- return contentTypes.Select(t => new CultureDictionaryRecordKey
- {
- MessageId = t.DisplayName,
- Context = Context
- });
- }
+ MessageId = t.DisplayName,
+ Context = Context
+ });
}
}
diff --git a/src/OrchardCoreContrib.DataLocalization/Services/TranslationsManager.cs b/src/OrchardCoreContrib.DataLocalization/Services/TranslationsManager.cs
index 88c462a3..767b3d9d 100644
--- a/src/OrchardCoreContrib.DataLocalization/Services/TranslationsManager.cs
+++ b/src/OrchardCoreContrib.DataLocalization/Services/TranslationsManager.cs
@@ -1,45 +1,38 @@
using OrchardCoreContrib.DataLocalization.Models;
using OrchardCore.Documents;
-using System.Threading.Tasks;
-using System.Collections.Generic;
-namespace OrchardCoreContrib.DataLocalization.Services
+namespace OrchardCoreContrib.DataLocalization.Services;
+
+///
+/// Manages
+///
+///
+/// Creates a new instance of .
+///
+///
+public class TranslationsManager(IDocumentManager documentManager)
{
///
- /// Manages
+ /// Loads the translations document from the store for updating and that should not be cached.
///
- public class TranslationsManager
- {
- private readonly IDocumentManager _documentManager;
-
- ///
- /// Creates a new instance of .
- ///
- ///
- public TranslationsManager(IDocumentManager documentManager) => _documentManager = documentManager;
+ public Task LoadTranslationsDocumentAsync() => documentManager.GetOrCreateMutableAsync();
- ///
- /// Loads the translations document from the store for updating and that should not be cached.
- ///
- public Task LoadTranslationsDocumentAsync() => _documentManager.GetOrCreateMutableAsync();
-
- ///
- /// Gets the translations document from the cache for sharing and that should not be updated.
- ///
- public Task GetTranslationsDocumentAsync() => _documentManager.GetOrCreateImmutableAsync();
+ ///
+ /// Gets the translations document from the cache for sharing and that should not be updated.
+ ///
+ public Task GetTranslationsDocumentAsync() => documentManager.GetOrCreateImmutableAsync();
- ///
- /// Updates the translations for a given culture.
- ///
- /// The culture for the updated transaltions.
- /// The translations to be updated.
- public async Task UpdateTranslationAsync(string culture, IEnumerable translations)
- {
- var document = await LoadTranslationsDocumentAsync();
-
- document.Translations[culture] = translations;
+ ///
+ /// Updates the translations for a given culture.
+ ///
+ /// The culture for the updated transaltions.
+ /// The translations to be updated.
+ public async Task UpdateTranslationAsync(string culture, IEnumerable translations)
+ {
+ var document = await LoadTranslationsDocumentAsync();
+
+ document.Translations[culture] = translations;
- await _documentManager.UpdateAsync(document);
- }
+ await documentManager.UpdateAsync(document);
}
}
diff --git a/src/OrchardCoreContrib.DataLocalization/Startup.cs b/src/OrchardCoreContrib.DataLocalization/Startup.cs
index e2dea5d8..9f8d23d4 100644
--- a/src/OrchardCoreContrib.DataLocalization/Startup.cs
+++ b/src/OrchardCoreContrib.DataLocalization/Startup.cs
@@ -4,51 +4,47 @@
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Options;
using OrchardCore.Admin;
-using OrchardCore.DataLocalization;
using OrchardCore.Modules;
using OrchardCore.Mvc.Core.Utilities;
using OrchardCore.Navigation;
using OrchardCoreContrib.DataLocalization.Controllers;
using OrchardCoreContrib.DataLocalization.Services;
using OrchardCoreContrib.Localization.Data;
-using System;
-namespace OrchardCoreContrib.DataLocalization
-{
- ///
- /// Represents an entry point to register the page preview bar required services.
- ///
- public class Startup : StartupBase
- {
- private readonly AdminOptions _adminOptions;
+namespace OrchardCoreContrib.DataLocalization;
- public Startup(IOptions adminOptions)
- {
- _adminOptions = adminOptions.Value;
- }
+///
+/// Represents an entry point to register the page preview bar required services.
+///
+public class Startup(IOptions adminOptions) : StartupBase
+{
+ private readonly AdminOptions _adminOptions = adminOptions.Value;
- ///
- public override void ConfigureServices(IServiceCollection services)
- {
- services.AddScoped();
- services.AddScoped();
- services.AddScoped();
- services.AddScoped();
+ ///
+ public override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddScoped();
+ services.AddScoped();
+ services.AddScoped();
+ services.AddScoped();
- services.AddDataLocalization();
+ services.AddDataLocalization();
- services.Replace(ServiceDescriptor.Singleton());
- }
+ services.Replace(ServiceDescriptor.Singleton());
+ }
- ///
- public override void Configure(IApplicationBuilder app, IEndpointRouteBuilder routes, IServiceProvider serviceProvider)
- {
- routes.MapAreaControllerRoute(
- name: "DataLocalization",
- areaName: "OrchardCoreContrib.DataLocalization",
- pattern: _adminOptions.AdminUrlPrefix + "/DataLocalization",
- defaults: new { controller = typeof(AdminController).ControllerName(), action = nameof(AdminController.ManageContentTypeResources) }
- );
- }
+ ///
+ public override void Configure(IApplicationBuilder app, IEndpointRouteBuilder routes, IServiceProvider serviceProvider)
+ {
+ routes.MapAreaControllerRoute(
+ name: "DataLocalization",
+ areaName: "OrchardCoreContrib.DataLocalization",
+ pattern: _adminOptions.AdminUrlPrefix + "/DataLocalization",
+ defaults: new
+ {
+ controller = typeof(AdminController).ControllerName(),
+ action = nameof(AdminController.ManageContentTypeResources)
+ }
+ );
}
}
diff --git a/src/OrchardCoreContrib.DataLocalization/ViewModels/ContentFieldResourcesViewModel.cs b/src/OrchardCoreContrib.DataLocalization/ViewModels/ContentFieldResourcesViewModel.cs
index 941f5310..45ecbd84 100644
--- a/src/OrchardCoreContrib.DataLocalization/ViewModels/ContentFieldResourcesViewModel.cs
+++ b/src/OrchardCoreContrib.DataLocalization/ViewModels/ContentFieldResourcesViewModel.cs
@@ -1,21 +1,18 @@
using OrchardCoreContrib.DataLocalization.Models;
-using System;
-using System.Collections.Generic;
-namespace OrchardCoreContrib.DataLocalization.ViewModels
+namespace OrchardCoreContrib.DataLocalization.ViewModels;
+
+public class ContentFieldResourcesViewModel
{
- public class ContentFieldResourcesViewModel
- {
- public IEnumerable ContentTypes { get; set; }
+ public IEnumerable ContentTypes { get; set; }
- public IEnumerable ResourcesNames { get; set; }
+ public IEnumerable ResourcesNames { get; set; }
- public IEnumerable Translations { get; set; }
+ public IEnumerable Translations { get; set; }
- public string SelectedContentType { get; set; }
+ public string SelectedContentType { get; set; }
- public string SelectedCulture { get; set; }
+ public string SelectedCulture { get; set; }
- public bool HasCulture => !String.IsNullOrEmpty(SelectedCulture);
- }
+ public bool HasCulture => !string.IsNullOrEmpty(SelectedCulture);
}
diff --git a/src/OrchardCoreContrib.DataLocalization/ViewModels/ContentTypeResourcesViewModel.cs b/src/OrchardCoreContrib.DataLocalization/ViewModels/ContentTypeResourcesViewModel.cs
index ba7e1e4b..ce0b7fa5 100644
--- a/src/OrchardCoreContrib.DataLocalization/ViewModels/ContentTypeResourcesViewModel.cs
+++ b/src/OrchardCoreContrib.DataLocalization/ViewModels/ContentTypeResourcesViewModel.cs
@@ -1,17 +1,14 @@
using OrchardCoreContrib.DataLocalization.Models;
-using System;
-using System.Collections.Generic;
-namespace OrchardCoreContrib.DataLocalization.ViewModels
+namespace OrchardCoreContrib.DataLocalization.ViewModels;
+
+public class ContentTypeResourcesViewModel
{
- public class ContentTypeResourcesViewModel
- {
- public IEnumerable ResourcesNames { get; set; }
+ public IEnumerable ResourcesNames { get; set; }
- public IEnumerable Translations { get; set; }
+ public IEnumerable Translations { get; set; }
- public string SelectedCulture { get; set; }
+ public string SelectedCulture { get; set; }
- public bool HasCulture => !String.IsNullOrEmpty(SelectedCulture);
- }
+ public bool HasCulture => !string.IsNullOrEmpty(SelectedCulture);
}