Files
FictionArchive/FictionArchive.Service.TranslationService/Services/TranslationEngines/DeepLTranslate/DeepLTranslationEngine.cs

52 lines
1.7 KiB
C#

using DeepL;
using DeepL.Model;
using FictionArchive.Service.TranslationService.Models;
using Language = FictionArchive.Common.Enums.Language;
namespace FictionArchive.Service.TranslationService.Services.TranslationEngines.DeepLTranslate;
public class DeepLTranslationEngine : ITranslationEngine
{
private readonly DeepLClient _deepLClient;
private readonly ILogger<DeepLTranslationEngine> _logger;
private const string DisplayName = "DeepL";
private const string Key = "deepl";
public DeepLTranslationEngine(DeepLClient deepLClient, ILogger<DeepLTranslationEngine> logger)
{
_deepLClient = deepLClient;
_logger = logger;
}
public TranslationEngineDescriptor Descriptor
{
get
{
return new TranslationEngineDescriptor()
{
DisplayName = DisplayName,
Key = Key,
};
}
}
public async Task<string?> GetTranslation(string body, Language from, Language to)
{
TextResult translationResult = await _deepLClient.TranslateTextAsync(body, GetLanguageCode(from), GetLanguageCode(to));
_logger.LogInformation("Translated text. Usage statistics: CHARACTERS BILLED {TranslationResultBilledCharacters}", translationResult.BilledCharacters);
return translationResult.Text;
}
private string GetLanguageCode(Language language)
{
return language switch
{
Language.En => LanguageCode.EnglishAmerican,
Language.Kr => LanguageCode.Korean,
Language.Ch => LanguageCode.Chinese,
Language.Ja => LanguageCode.Japanese,
_ => throw new ArgumentOutOfRangeException(nameof(language), language, null)
};
}
}