diff --git a/I18N Commander/Processor/DeepL.cs b/I18N Commander/Processor/DeepL.cs new file mode 100644 index 0000000..bbfe58e --- /dev/null +++ b/I18N Commander/Processor/DeepL.cs @@ -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 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 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; + } + } +} \ No newline at end of file diff --git a/I18N Commander/Processor/Processor.csproj b/I18N Commander/Processor/Processor.csproj index 94a5986..7b794fd 100644 --- a/I18N Commander/Processor/Processor.csproj +++ b/I18N Commander/Processor/Processor.csproj @@ -11,4 +11,8 @@ + + + +