62 lines
2.1 KiB
C#
62 lines
2.1 KiB
C#
using DeepL;
|
|
using DeepL.Model;
|
|
using FictionArchive.Service.TranslationService.Models;
|
|
using FictionArchive.Service.TranslationService.Models.Enums;
|
|
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<TranslationResult> 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 new TranslationResult()
|
|
{
|
|
OriginalText = body,
|
|
From = from,
|
|
To = to,
|
|
TranslationEngineKey = Key,
|
|
BilledCharacterCount = (uint)translationResult.BilledCharacters,
|
|
Status = TranslationRequestStatus.Success,
|
|
TranslatedText = 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)
|
|
};
|
|
}
|
|
} |