diff --git a/I18N Commander/Processor/DeepL.cs b/I18N Commander/Processor/DeepL.cs index 5ec72bd..451ac5c 100644 --- a/I18N Commander/Processor/DeepL.cs +++ b/I18N Commander/Processor/DeepL.cs @@ -55,11 +55,8 @@ public static class DeepL var sourceCultureIndex = await AppSettings.GetDeepLSourceCultureIndex(); var sourceCulture = await AppSettings.GetCultureCode(sourceCultureIndex); - // In case of the source culture, we cannot specify the region, so we need to remove it: - sourceCulture = sourceCulture.Split('-')[0]; - using var deepl = new Translator(deepLAPIKey); - var translation = await deepl.TranslateTextAsync(text, sourceCulture, targetCulture); + var translation = await deepl.TranslateTextAsync(text, TransformSourceCulture(sourceCulture), TransformTargetCulture(targetCulture)); return translation.Text; } @@ -78,4 +75,78 @@ public static class DeepL } public static void ResetState() => DEEPL_NOT_AVAILABLE = false; + + private static string TransformSourceCulture(string sourceCulture) => sourceCulture switch + { + ['b', 'g', ..] => "BG", // Bulgarian + ['c', 's', ..] => "CS", // Czech + ['d', 'a', ..] => "DA", // Danish + ['d', 'e', ..] => "DE", // German + ['e', 'l', ..] => "EL", // Greek + ['e', 'n', ..] => "EN", // English + ['e', 's', ..] => "ES", // Spanish + ['e', 't', ..] => "ET", // Estonian + ['f', 'i', ..] => "FI", // Finnish + ['f', 'r', ..] => "FR", // French + ['h', 'u', ..] => "HU", // Hungarian + ['i', 'd', ..] => "ID", // Indonesian + ['i', 't', ..] => "IT", // Italian + ['j', 'a', ..] => "JA", // Japanese + ['k', 'o', ..] => "KO", // Korean + ['l', 't', ..] => "LT", // Lithuanian + ['l', 'v', ..] => "LV", // Latvian + ['n', 'b', ..] => "NB", // Norwegian + ['n', 'l', ..] => "NL", // Dutch + ['p', 'l', ..] => "PL", // Polish + ['p', 't', ..] => "PT", // Portuguese + ['r', 'o', ..] => "RO", // Romanian + ['r', 'u', ..] => "RU", // Russian + ['s', 'k', ..] => "SK", // Slovak + ['s', 'l', ..] => "SL", // Slovenian + ['s', 'v', ..] => "SV", // Swedish + ['t', 'r', ..] => "TR", // Turkish + ['u', 'k', ..] => "UK", // Ukrainian + ['z', 'h', ..] => "ZH", // Chinese + + _ => sourceCulture, + }; + + private static string TransformTargetCulture(string targetCulture) => targetCulture switch + { + ['b', 'g', ..] => "BG", // Bulgarian + ['c', 's', ..] => "CS", // Czech + ['d', 'a', ..] => "DA", // Danish + ['d', 'e', ..] => "DE", // German + ['e', 'l', ..] => "EL", // Greek + ['e', 'n', '-', 'G', 'B', ..] => "EN-GB", // English (British) + ['e', 'n', '-', 'U', 'S', ..] => "EN-US", // English (American) + ['e', 'n', ..] => "EN-US", // English (American) + ['e', 's', ..] => "ES", // Spanish + ['e', 't', ..] => "ET", // Estonian + ['f', 'i', ..] => "FI", // Finnish + ['f', 'r', ..] => "FR", // French + ['h', 'u', ..] => "HU", // Hungarian + ['i', 'd', ..] => "ID", // Indonesian + ['i', 't', ..] => "IT", // Italian + ['j', 'a', ..] => "JA", // Japanese + ['k', 'o', ..] => "KO", // Korean + ['l', 't', ..] => "LT", // Lithuanian + ['l', 'v', ..] => "LV", // Latvian + ['n', 'b', ..] => "NB", // Norwegian + ['n', 'l', ..] => "NL", // Dutch + ['p', 'l', ..] => "PL", // Polish + ['p', 't', '-', 'B', 'R', ..] => "PT-BR", // Portuguese (Brazilian) + ['p', 't', '-', 'P', 'T', ..] => "PT-PT", // Portuguese (European) + ['p', 't', ..] => "PT-PT", // Portuguese (European) + ['r', 'o', ..] => "RO", // Romanian + ['r', 'u', ..] => "RU", // Russian + ['s', 'k', ..] => "SK", // Slovak + ['s', 'l', ..] => "SL", // Slovenian + ['s', 'v', ..] => "SV", // Swedish + ['t', 'r', ..] => "TR", // Turkish + ['u', 'k', ..] => "UK", // Ukrainian + ['z', 'h', ..] => "ZH", // Chinese + + _ => targetCulture, + }; } \ No newline at end of file diff --git a/I18N Commander/Processor/Version.cs b/I18N Commander/Processor/Version.cs index ce0516e..6cd05d2 100644 --- a/I18N Commander/Processor/Version.cs +++ b/I18N Commander/Processor/Version.cs @@ -2,5 +2,5 @@ public static class Version { - public static string Text => $"v0.9.3 (2023-02-12), .NET {Environment.Version}"; + public static string Text => $"v0.9.4 (2023-02-12), .NET {Environment.Version}"; } \ No newline at end of file