Added version to Language Management, improved framework performance by loading languages into PageState, include all supported cultures and allow Administrator to add any language to a site regardless of translation availability, fix translation upgrade issue
This commit is contained in:
@ -19,15 +19,17 @@ else
|
||||
<th style="width: 1px;"> </th>
|
||||
<th>@SharedLocalizer["Name"]</th>
|
||||
<th>@Localizer["Code"]</th>
|
||||
<th>@Localizer["Translation"]</th>
|
||||
<th>@Localizer["Default"]</th>
|
||||
<th style="width: 1px;"> </th>
|
||||
<th style="width: 1px;"> </th>
|
||||
</Header>
|
||||
<Row>
|
||||
<td><ActionDialog Header="Delete Language" Message="@string.Format(Localizer["Confirm.Language.Delete"], context.Name)" Action="Delete" Security="SecurityAccessLevel.Admin" Class="btn btn-danger" OnClick="@(async () => await DeleteLanguage(context))" Disabled="@((context.IsDefault && _languages.Count > 2) || context.Code == Constants.DefaultCulture)" ResourceKey="DeleteLanguage" /></td>
|
||||
<td>@context.Name</td>
|
||||
<td>@context.Code</td>
|
||||
<td><TriStateCheckBox Value="@(context.IsDefault)" Disabled="true"></TriStateCheckBox></td>
|
||||
<td>
|
||||
<td>@context.Version</td>
|
||||
<td><TriStateCheckBox Value="@(context.IsDefault)" Disabled="true"></TriStateCheckBox></td>
|
||||
<td>
|
||||
@if (UpgradeAvailable(context.Code))
|
||||
{
|
||||
<button type="button" class="btn btn-success" @onclick=@(async () => await DownloadLanguage(context.Code))>@SharedLocalizer["Upgrade"]</button>
|
||||
@ -50,9 +52,6 @@ else
|
||||
var cultures = await LocalizationService.GetCulturesAsync();
|
||||
var culture = cultures.First(c => c.Name.Equals(Constants.DefaultCulture));
|
||||
|
||||
// Adds English as default language
|
||||
_languages.Insert(0, new Language { Name = culture.DisplayName, Code = culture.Name, IsDefault = !_languages.Any(l => l.IsDefault) });
|
||||
|
||||
if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))
|
||||
{
|
||||
_packages = await PackageService.GetPackagesAsync("translation");
|
||||
@ -81,7 +80,7 @@ else
|
||||
var upgradeavailable = false;
|
||||
if (_packages != null)
|
||||
{
|
||||
var package = _packages.Where(item => item.PackageId == (Constants.PackageId + ".Client." + code)).FirstOrDefault();
|
||||
var package = _packages.Where(item => item.PackageId == (Constants.ClientAssemblyName + "." + code)).FirstOrDefault();
|
||||
if (package != null)
|
||||
{
|
||||
upgradeavailable = (Version.Parse(package.Version).CompareTo(Version.Parse(Constants.Version)) == 0);
|
||||
|
@ -144,4 +144,7 @@
|
||||
<data name="DeleteLanguage.Text" xml:space="preserve">
|
||||
<value>Delete</value>
|
||||
</data>
|
||||
<data name="Translation" xml:space="preserve">
|
||||
<value>Translation</value>
|
||||
</data>
|
||||
</root>
|
@ -17,6 +17,14 @@ namespace Oqtane.Services
|
||||
/// <returns></returns>
|
||||
Task<List<Language>> GetLanguagesAsync(int siteId);
|
||||
|
||||
/// <summary>
|
||||
/// Returns a list of all available languages for the given <see cref="Site" /> and client assembly
|
||||
/// </summary>
|
||||
/// <param name="siteId"></param>
|
||||
/// <param name="clientAssemblyName"></param>
|
||||
/// <returns></returns>
|
||||
Task<List<Language>> GetLanguagesAsync(int siteId, string clientAssemblyName);
|
||||
|
||||
/// <summary>
|
||||
/// Returns the given language
|
||||
/// </summary>
|
||||
|
@ -17,18 +17,27 @@ namespace Oqtane.Services
|
||||
|
||||
public async Task<List<Language>> GetLanguagesAsync(int siteId)
|
||||
{
|
||||
var languages = await GetJsonAsync<List<Language>>($"{Apiurl}?siteid={siteId}");
|
||||
return await GetLanguagesAsync(siteId, "");
|
||||
}
|
||||
|
||||
return languages?.OrderBy(l => l.Name).ToList() ?? Enumerable.Empty<Language>().ToList();
|
||||
public async Task<List<Language>> GetLanguagesAsync(int siteId, string clientAssemblyName)
|
||||
{
|
||||
return await GetJsonAsync<List<Language>>($"{Apiurl}?siteid={siteId}&clientassemblyname={clientAssemblyName}");
|
||||
}
|
||||
|
||||
public async Task<Language> GetLanguageAsync(int languageId)
|
||||
=> await GetJsonAsync<Language>($"{Apiurl}/{languageId}");
|
||||
{
|
||||
return await GetJsonAsync<Language>($"{Apiurl}/{languageId}");
|
||||
}
|
||||
|
||||
public async Task<Language> AddLanguageAsync(Language language)
|
||||
=> await PostJsonAsync<Language>(Apiurl, language);
|
||||
{
|
||||
return await PostJsonAsync<Language>(Apiurl, language);
|
||||
}
|
||||
|
||||
public async Task DeleteLanguageAsync(int languageId)
|
||||
=> await DeleteAsync($"{Apiurl}/{languageId}");
|
||||
{
|
||||
await DeleteAsync($"{Apiurl}/{languageId}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,13 +24,9 @@
|
||||
@code{
|
||||
private IEnumerable<Culture> _supportedCultures;
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
var languages = await LanguageService.GetLanguagesAsync(PageState.Site.SiteId);
|
||||
var defaultCulture = CultureInfo.GetCultureInfo(Constants.DefaultCulture);
|
||||
|
||||
languages.Add(new Language { Code = defaultCulture.Name, Name = defaultCulture.DisplayName });
|
||||
|
||||
var languages = PageState.Languages;
|
||||
_supportedCultures = languages.Select(l => new Culture { Name = l.Code, DisplayName = l.Name });
|
||||
}
|
||||
|
||||
|
@ -8,6 +8,7 @@ namespace Oqtane.UI
|
||||
{
|
||||
public Alias Alias { get; set; }
|
||||
public Site Site { get; set; }
|
||||
public List<Language> Languages { get; set; }
|
||||
public List<Page> Pages { get; set; }
|
||||
public Page Page { get; set; }
|
||||
public User User { get; set; }
|
||||
|
@ -6,6 +6,7 @@
|
||||
@inject INavigationInterception NavigationInterception
|
||||
@inject ISyncService SyncService
|
||||
@inject ISiteService SiteService
|
||||
@inject ILanguageService LanguageService
|
||||
@inject IPageService PageService
|
||||
@inject IUserService UserService
|
||||
@inject IModuleService ModuleService
|
||||
@ -70,6 +71,7 @@
|
||||
private async Task Refresh()
|
||||
{
|
||||
Site site;
|
||||
List<Language> languages;
|
||||
List<Page> pages;
|
||||
Page page;
|
||||
User user = null;
|
||||
@ -102,7 +104,7 @@
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// the refresh parameter is used to refresh the client-side PageState
|
||||
if (querystring.ContainsKey("refresh"))
|
||||
{
|
||||
@ -173,11 +175,13 @@
|
||||
|
||||
if (PageState == null || refresh == UI.Refresh.Site)
|
||||
{
|
||||
languages = await LanguageService.GetLanguagesAsync(site.SiteId);
|
||||
pages = await PageService.GetPagesAsync(site.SiteId);
|
||||
pages = pages.Where(item => !item.IsDeleted).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
languages = PageState.Languages;
|
||||
pages = PageState.Pages;
|
||||
}
|
||||
|
||||
@ -230,6 +234,7 @@
|
||||
{
|
||||
Alias = SiteState.Alias,
|
||||
Site = site,
|
||||
Languages = languages,
|
||||
Pages = pages,
|
||||
Page = page,
|
||||
User = user,
|
||||
|
Reference in New Issue
Block a user