52 lines
1.7 KiB
C#
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)
|
|
};
|
|
}
|
|
} |