62 lines
1.7 KiB
C#
62 lines
1.7 KiB
C#
using Nop.Services.Localization;
|
|
using Nop.Web.Framework.Models;
|
|
|
|
namespace Nop.Web.Framework.Factories;
|
|
|
|
/// <summary>
|
|
/// Represents the base localized model factory implementation
|
|
/// </summary>
|
|
public partial class LocalizedModelFactory : ILocalizedModelFactory
|
|
{
|
|
#region Fields
|
|
|
|
protected readonly ILanguageService _languageService;
|
|
|
|
#endregion
|
|
|
|
#region Ctor
|
|
|
|
public LocalizedModelFactory(ILanguageService languageService)
|
|
{
|
|
_languageService = languageService;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Methods
|
|
|
|
/// <summary>
|
|
/// Prepare localized model for localizable entities
|
|
/// </summary>
|
|
/// <typeparam name="T">Localized model type</typeparam>
|
|
/// <param name="configure">Model configuration action</param>
|
|
/// <returns>
|
|
/// A task that represents the asynchronous operation
|
|
/// The task result contains the list of localized model
|
|
/// </returns>
|
|
public virtual async Task<IList<T>> PrepareLocalizedModelsAsync<T>(Func<T, int, Task> configure = null) where T : ILocalizedLocaleModel
|
|
{
|
|
//get all available languages
|
|
var availableLanguages = await _languageService.GetAllLanguagesAsync(true);
|
|
|
|
//prepare models
|
|
var localizedModels = await availableLanguages.SelectAwait(async language =>
|
|
{
|
|
//create localized model
|
|
var localizedModel = Activator.CreateInstance<T>();
|
|
|
|
//set language
|
|
localizedModel.LanguageId = language.Id;
|
|
|
|
//invoke the model configuration action
|
|
if (configure != null)
|
|
await configure(localizedModel, localizedModel.LanguageId);
|
|
|
|
return localizedModel;
|
|
}).ToListAsync();
|
|
|
|
return localizedModels;
|
|
}
|
|
|
|
#endregion
|
|
} |