Added a DeepL facade
This commit is contained in:
parent
947728f99e
commit
4173cdc761
66
I18N Commander/Processor/DeepL.cs
Normal file
66
I18N Commander/Processor/DeepL.cs
Normal file
@ -0,0 +1,66 @@
|
||||
using DataModel.Database;
|
||||
using DeepL;
|
||||
|
||||
namespace Processor;
|
||||
|
||||
public static class DeepL
|
||||
{
|
||||
private static bool DEEPL_NOT_AVAILABLE = false;
|
||||
|
||||
public readonly record struct DeepLUsage(bool Enabled, long CharacterCount, long CharacterLimit, bool AuthIssue = false);
|
||||
|
||||
public static async Task<DeepLUsage> GetUsage()
|
||||
{
|
||||
if(DEEPL_NOT_AVAILABLE)
|
||||
return new DeepLUsage(false, 0, 1);
|
||||
|
||||
if (await AppSettings.GetDeepLMode() == SettingDeepLMode.DISABLED)
|
||||
return new DeepLUsage(false, 0, 1);
|
||||
|
||||
var deepLAPIKey = await AppSettings.GetDeepLAPIKey();
|
||||
if(string.IsNullOrWhiteSpace(deepLAPIKey))
|
||||
return new DeepLUsage(false, 0, 1);
|
||||
|
||||
try
|
||||
{
|
||||
using var deepl = new Translator(deepLAPIKey);
|
||||
var usage = await deepl.GetUsageAsync();
|
||||
|
||||
return new DeepLUsage(true, usage.Character!.Count, usage.Character.Limit);
|
||||
}
|
||||
catch (AuthorizationException e)
|
||||
{
|
||||
DEEPL_NOT_AVAILABLE = true;
|
||||
return new DeepLUsage(false, 0, 1, true);
|
||||
}
|
||||
}
|
||||
|
||||
public static async Task<string> Translate(string text, string targetCulture)
|
||||
{
|
||||
if (DEEPL_NOT_AVAILABLE)
|
||||
return string.Empty;
|
||||
|
||||
if (await AppSettings.GetDeepLMode() == SettingDeepLMode.DISABLED)
|
||||
return string.Empty;
|
||||
|
||||
var deepLAPIKey = await AppSettings.GetDeepLAPIKey();
|
||||
if(string.IsNullOrWhiteSpace(deepLAPIKey))
|
||||
return string.Empty;
|
||||
|
||||
try
|
||||
{
|
||||
var sourceCultureIndex = await AppSettings.GetDeepLSourceCultureIndex();
|
||||
var sourceCulture = await AppSettings.GetCultureCode(sourceCultureIndex);
|
||||
|
||||
using var deepl = new Translator(deepLAPIKey);
|
||||
var translation = await deepl.TranslateTextAsync(text, sourceCulture, targetCulture);
|
||||
|
||||
return translation.Text;
|
||||
}
|
||||
catch (AuthorizationException e)
|
||||
{
|
||||
DEEPL_NOT_AVAILABLE = true;
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
@ -11,4 +11,8 @@
|
||||
<ProjectReference Include="..\DataModel\DataModel.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="DeepL.net" Version="1.4.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
Loading…
Reference in New Issue
Block a user