mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-08-20 13:23:20 -07:00
fix(translations): 🌐 Localization - Ensuring all of the app including backend are localized #4366
* Localize TV and movies titles in requests * Add missing release statuses * Localize collection request * Localize TV shows in newsletter Uses TMDB instead of TVMaze for title, genres and synopsis * Localize error messages * Localize albums requests * Use current language for TV and movies requests * Remove unecessary console log
This commit is contained in:
parent
d8d1091564
commit
5e140ab618
28 changed files with 205 additions and 137 deletions
|
@ -120,11 +120,13 @@ namespace Ombi.Core.Engine
|
|||
?.FirstOrDefault(x => x.Type == ReleaseDateType.Digital)?.ReleaseDate;
|
||||
|
||||
var ruleResults = (await RunRequestRules(requestModel)).ToList();
|
||||
if (ruleResults.Any(x => !x.Success))
|
||||
var ruleResultInError = ruleResults.Find(x => !x.Success);
|
||||
if (ruleResultInError != null)
|
||||
{
|
||||
return new RequestEngineResult
|
||||
{
|
||||
ErrorMessage = ruleResults.FirstOrDefault(x => x.Message.HasValue()).Message
|
||||
ErrorMessage = ruleResultInError.Message,
|
||||
ErrorCode = ruleResultInError.ErrorCode
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -573,7 +575,8 @@ namespace Ombi.Core.Engine
|
|||
{
|
||||
results.Add(await RequestMovie(new MovieRequestViewModel
|
||||
{
|
||||
TheMovieDbId = collection.id
|
||||
TheMovieDbId = collection.id,
|
||||
LanguageCode = langCode
|
||||
}));
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
namespace Ombi.Core.Engine
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
|
||||
namespace Ombi.Core.Engine
|
||||
{
|
||||
public class RequestEngineResult
|
||||
{
|
||||
|
@ -6,6 +9,23 @@
|
|||
public string Message { get; set; }
|
||||
public bool IsError => !string.IsNullOrEmpty(ErrorMessage);
|
||||
public string ErrorMessage { get; set; }
|
||||
public ErrorCode? ErrorCode { get; set; }
|
||||
public int RequestId { get; set; }
|
||||
}
|
||||
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public enum ErrorCode {
|
||||
AlreadyRequested,
|
||||
EpisodesAlreadyRequested,
|
||||
NoPermissionsOnBehalf,
|
||||
NoPermissions,
|
||||
RequestDoesNotExist,
|
||||
ChildRequestDoesNotExist,
|
||||
NoPermissionsRequestMovie,
|
||||
NoPermissionsRequestTV,
|
||||
NoPermissionsRequestAlbum,
|
||||
MovieRequestQuotaExceeded,
|
||||
TvRequestQuotaExceeded,
|
||||
AlbumRequestQuotaExceeded,
|
||||
}
|
||||
}
|
|
@ -144,6 +144,7 @@ namespace Ombi.Core.Engine
|
|||
return new RequestEngineResult
|
||||
{
|
||||
Result = false,
|
||||
ErrorCode = ErrorCode.AlreadyRequested,
|
||||
ErrorMessage = "This has already been requested"
|
||||
};
|
||||
}
|
||||
|
@ -166,6 +167,7 @@ namespace Ombi.Core.Engine
|
|||
return new RequestEngineResult
|
||||
{
|
||||
Result = false,
|
||||
ErrorCode = ErrorCode.NoPermissionsOnBehalf,
|
||||
Message = "You do not have the correct permissions to request on behalf of users!",
|
||||
ErrorMessage = $"You do not have the correct permissions to request on behalf of users!"
|
||||
};
|
||||
|
@ -176,6 +178,7 @@ namespace Ombi.Core.Engine
|
|||
return new RequestEngineResult
|
||||
{
|
||||
Result = false,
|
||||
ErrorCode = ErrorCode.NoPermissions,
|
||||
Message = "You do not have the correct permissions!",
|
||||
ErrorMessage = $"You do not have the correct permissions!"
|
||||
};
|
||||
|
@ -183,7 +186,7 @@ namespace Ombi.Core.Engine
|
|||
|
||||
var tvBuilder = new TvShowRequestBuilderV2(MovieDbApi);
|
||||
(await tvBuilder
|
||||
.GetShowInfo(tv.TheMovieDbId))
|
||||
.GetShowInfo(tv.TheMovieDbId, tv.languageCode))
|
||||
.CreateTvList(tv)
|
||||
.CreateChild(tv, canRequestOnBehalf ? tv.RequestOnBehalf : user.Id);
|
||||
|
||||
|
@ -250,6 +253,7 @@ namespace Ombi.Core.Engine
|
|||
return new RequestEngineResult
|
||||
{
|
||||
Result = false,
|
||||
ErrorCode = ErrorCode.AlreadyRequested,
|
||||
ErrorMessage = "This has already been requested"
|
||||
};
|
||||
}
|
||||
|
@ -685,6 +689,7 @@ namespace Ombi.Core.Engine
|
|||
{
|
||||
return new RequestEngineResult
|
||||
{
|
||||
ErrorCode = ErrorCode.ChildRequestDoesNotExist,
|
||||
ErrorMessage = "Child Request does not exist"
|
||||
};
|
||||
}
|
||||
|
@ -722,6 +727,7 @@ namespace Ombi.Core.Engine
|
|||
{
|
||||
return new RequestEngineResult
|
||||
{
|
||||
ErrorCode = ErrorCode.ChildRequestDoesNotExist,
|
||||
ErrorMessage = "Child Request does not exist"
|
||||
};
|
||||
}
|
||||
|
@ -781,6 +787,7 @@ namespace Ombi.Core.Engine
|
|||
{
|
||||
return new RequestEngineResult
|
||||
{
|
||||
ErrorCode = ErrorCode.ChildRequestDoesNotExist,
|
||||
ErrorMessage = "Child Request does not exist"
|
||||
};
|
||||
}
|
||||
|
@ -808,6 +815,7 @@ namespace Ombi.Core.Engine
|
|||
{
|
||||
return new RequestEngineResult
|
||||
{
|
||||
ErrorCode = ErrorCode.ChildRequestDoesNotExist,
|
||||
ErrorMessage = "Child Request does not exist"
|
||||
};
|
||||
}
|
||||
|
@ -905,6 +913,7 @@ namespace Ombi.Core.Engine
|
|||
return new RequestEngineResult
|
||||
{
|
||||
Result = false,
|
||||
ErrorCode = ErrorCode.RequestDoesNotExist,
|
||||
ErrorMessage = "Request does not exist"
|
||||
};
|
||||
}
|
||||
|
@ -965,6 +974,7 @@ namespace Ombi.Core.Engine
|
|||
return new RequestEngineResult
|
||||
{
|
||||
Result = false,
|
||||
ErrorCode = ErrorCode.RequestDoesNotExist,
|
||||
ErrorMessage = "Request does not exist"
|
||||
};
|
||||
}
|
||||
|
|
|
@ -30,9 +30,9 @@ namespace Ombi.Core.Helpers
|
|||
public TvRequests NewRequest { get; protected set; }
|
||||
protected TvInfo TheMovieDbRecord { get; set; }
|
||||
|
||||
public async Task<TvShowRequestBuilderV2> GetShowInfo(int id)
|
||||
public async Task<TvShowRequestBuilderV2> GetShowInfo(int id, string langCode = "en")
|
||||
{
|
||||
TheMovieDbRecord = await MovieDbApi.GetTVInfo(id.ToString());
|
||||
TheMovieDbRecord = await MovieDbApi.GetTVInfo(id.ToString(), langCode);
|
||||
|
||||
// Remove 'Specials Season'
|
||||
var firstSeason = TheMovieDbRecord.seasons.OrderBy(x => x.season_number).FirstOrDefault();
|
||||
|
|
|
@ -6,5 +6,6 @@ namespace Ombi.Core.Models.Requests
|
|||
public class TvRequestViewModelV2 : TvRequestViewModelBase
|
||||
{
|
||||
public int TheMovieDbId { get; set; }
|
||||
public string languageCode { get; set; } = "en";
|
||||
}
|
||||
}
|
|
@ -1,4 +1,5 @@
|
|||
namespace Ombi.Core.Rule
|
||||
using Ombi.Core.Engine;
|
||||
namespace Ombi.Core.Rule
|
||||
{
|
||||
public abstract class BaseRequestRule
|
||||
{
|
||||
|
@ -7,9 +8,9 @@
|
|||
return new RuleResult {Success = true};
|
||||
}
|
||||
|
||||
public RuleResult Fail(string message)
|
||||
public RuleResult Fail(ErrorCode errorCode, string message = "")
|
||||
{
|
||||
return new RuleResult { Message = message };
|
||||
return new RuleResult { ErrorCode = errorCode, Message = message };
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,8 +1,10 @@
|
|||
namespace Ombi.Core.Rule
|
||||
using Ombi.Core.Engine;
|
||||
namespace Ombi.Core.Rule
|
||||
{
|
||||
public class RuleResult
|
||||
{
|
||||
public bool Success { get; set; }
|
||||
public string Message { get; set; }
|
||||
public ErrorCode ErrorCode { get; set; }
|
||||
}
|
||||
}
|
|
@ -6,6 +6,7 @@ using System.Security.Principal;
|
|||
using System.Threading.Tasks;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Ombi.Core.Authentication;
|
||||
using Ombi.Core.Engine;
|
||||
using Ombi.Core.Rule.Interfaces;
|
||||
using Ombi.Helpers;
|
||||
using Ombi.Store.Entities.Requests;
|
||||
|
@ -34,7 +35,7 @@ namespace Ombi.Core.Rule.Rules.Request
|
|||
{
|
||||
if (await _manager.IsInRoleAsync(user, OmbiRoles.RequestMovie) || await _manager.IsInRoleAsync(user, OmbiRoles.AutoApproveMovie))
|
||||
return Success();
|
||||
return Fail("You do not have permissions to Request a Movie");
|
||||
return Fail(ErrorCode.NoPermissionsRequestMovie, "You do not have permissions to Request a Movie");
|
||||
}
|
||||
|
||||
if (obj.RequestType == RequestType.TvShow)
|
||||
|
@ -44,7 +45,7 @@ namespace Ombi.Core.Rule.Rules.Request
|
|||
return Success();
|
||||
}
|
||||
|
||||
return Fail("You do not have permissions to Request a TV Show");
|
||||
return Fail(ErrorCode.NoPermissionsRequestTV, "You do not have permissions to Request a TV Show");
|
||||
}
|
||||
|
||||
if (obj.RequestType == RequestType.Album)
|
||||
|
@ -54,7 +55,7 @@ namespace Ombi.Core.Rule.Rules.Request
|
|||
return Success();
|
||||
}
|
||||
|
||||
return Fail("You do not have permissions to Request an Album");
|
||||
return Fail(ErrorCode.NoPermissionsRequestAlbum, "You do not have permissions to Request an Album");
|
||||
}
|
||||
|
||||
throw new InvalidDataException("Permission check failed: unknown RequestType");
|
||||
|
|
|
@ -6,6 +6,7 @@ using Ombi.Helpers;
|
|||
using Ombi.Store.Entities;
|
||||
using Ombi.Store.Entities.Requests;
|
||||
using Ombi.Store.Repository;
|
||||
using Ombi.Core.Engine;
|
||||
using Ombi.Store.Repository.Requests;
|
||||
|
||||
namespace Ombi.Core.Rule.Rules.Request
|
||||
|
@ -49,7 +50,7 @@ namespace Ombi.Core.Rule.Rules.Request
|
|||
}
|
||||
if(found)
|
||||
{
|
||||
return Fail($"\"{obj.Title}\" has already been requested");
|
||||
return Fail(ErrorCode.AlreadyRequested, $"\"{obj.Title}\" has already been requested");
|
||||
}
|
||||
}
|
||||
return Success();
|
||||
|
|
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Ombi.Core.Engine;
|
||||
using Ombi.Core.Rule.Interfaces;
|
||||
using Ombi.Store.Entities;
|
||||
using Ombi.Store.Entities.Requests;
|
||||
|
@ -87,7 +88,7 @@ namespace Ombi.Core.Rule.Rules.Request
|
|||
|
||||
if (!anyEpisodes)
|
||||
{
|
||||
return Fail($"We already have episodes requested from series {child.Title}");
|
||||
return Fail(ErrorCode.EpisodesAlreadyRequested, $"We already have episodes requested from series {child.Title}");
|
||||
}
|
||||
|
||||
return Success();
|
||||
|
|
|
@ -3,6 +3,7 @@ using System.Linq;
|
|||
using System.Threading.Tasks;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Ombi.Core.Rule.Interfaces;
|
||||
using Ombi.Core.Engine;
|
||||
using Ombi.Store.Entities;
|
||||
using Ombi.Store.Entities.Requests;
|
||||
using Ombi.Store.Repository.Requests;
|
||||
|
@ -63,7 +64,7 @@ namespace Ombi.Core.Rule.Rules.Request
|
|||
|
||||
if (!anyEpisodes)
|
||||
{
|
||||
return Fail($"We already have episodes requested from series {tv.Title}");
|
||||
return Fail(ErrorCode.EpisodesAlreadyRequested, $"We already have episodes requested from series {tv.Title}");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -54,7 +54,7 @@ namespace Ombi.Core.Rule.Rules.Request
|
|||
|
||||
if (remainingLimitsModel.Remaining < 1)
|
||||
{
|
||||
return Fail("You have exceeded your Movie request quota!");
|
||||
return Fail(Engine.ErrorCode.MovieRequestQuotaExceeded, "You have exceeded your Movie request quota!");
|
||||
}
|
||||
}
|
||||
if (obj.RequestType == RequestType.TvShow)
|
||||
|
@ -75,7 +75,7 @@ namespace Ombi.Core.Rule.Rules.Request
|
|||
|
||||
if ((remainingLimitsModel.Remaining - requestCount) < 0)
|
||||
{
|
||||
return Fail("You have exceeded your Episode request quota!");
|
||||
return Fail(Engine.ErrorCode.TvRequestQuotaExceeded, "You have exceeded your Episode request quota!");
|
||||
}
|
||||
}
|
||||
if (obj.RequestType == RequestType.Album)
|
||||
|
@ -88,7 +88,7 @@ namespace Ombi.Core.Rule.Rules.Request
|
|||
|
||||
if (remainingLimitsModel.Remaining < 1)
|
||||
{
|
||||
return Fail("You have exceeded your Album request quota!");
|
||||
return Fail(Engine.ErrorCode.AlbumRequestQuotaExceeded, "You have exceeded your Album request quota!");
|
||||
}
|
||||
}
|
||||
return Success();
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Ombi.Core.Engine;
|
||||
using Ombi.Core.Models.Search;
|
||||
using Ombi.Helpers;
|
||||
using Ombi.Store.Context;
|
||||
|
@ -56,7 +57,7 @@ namespace Ombi.Core.Rule.Rules
|
|||
|
||||
if (!anyEpisodes)
|
||||
{
|
||||
return new RuleResult { Message = $"We already have episodes requested from series {vm.Title}" };
|
||||
return new RuleResult { ErrorCode = ErrorCode.EpisodesAlreadyRequested, Message = $"We already have episodes requested from series {vm.Title}" };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using Ombi.Core.Rule.Interfaces;
|
||||
using Ombi.Core.Engine;
|
||||
using Ombi.Core.Rule.Interfaces;
|
||||
|
||||
namespace Ombi.Core.Rule
|
||||
{
|
||||
|
@ -9,9 +10,9 @@ namespace Ombi.Core.Rule
|
|||
return new RuleResult { Success = true };
|
||||
}
|
||||
|
||||
public RuleResult Fail(string message)
|
||||
public RuleResult Fail(ErrorCode errorCode, string message = "")
|
||||
{
|
||||
return new RuleResult { Message = message };
|
||||
return new RuleResult { ErrorCode = errorCode, Message = message };
|
||||
}
|
||||
|
||||
public abstract SpecificRules Rule { get; }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue