Advertisement
scottgalPastes

Trivial Libretranslate App

Feb 23rd, 2023 (edited)
917
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.91 KB | None | 0 0
  1. /*
  2. For Libretranslate:
  3. docker pull libretranslate/libretranslate:v1.3.8
  4.  
  5. docker run -ti --rm -p 5000:5000 libretranslate/libretranslate:v1.3.8
  6.  
  7.  
  8. */
  9.  
  10. using System.Net.Http.Json;
  11. using System.Text;
  12. using System.Text.Json;
  13.  
  14. Console.OutputEncoding = Encoding.UTF8;
  15. var httpClient = new HttpClient { BaseAddress = new Uri("http://localhost:5000") };
  16. const string baseUrl = "http://localhost:5000";
  17. const string sourceFile = @"F:\Source\Seamcor\Seamcor-AngularApp\src\assets\i18n\en.json";
  18.  
  19. var file = await File.ReadAllTextAsync(sourceFile);
  20.  
  21. var dict = JsonSerializer.Deserialize<Root>(file);
  22.  
  23. var paralelOptions = new ParallelOptions { MaxDegreeOfParallelism = 4 };
  24. async Task IterateStringProperties(object dict, object destDict, string languageCode)
  25. {
  26.     await Parallel.ForEachAsync(dict.GetType().GetProperties(), paralelOptions, async (info, token) =>
  27.     {
  28.         if (info.PropertyType == typeof(string))
  29.         {
  30.             var stringVal = info.GetValue(dict)?.ToString();
  31.             if (string.IsNullOrEmpty(stringVal)) return;
  32.             var translated = await TranslateAsync(httpClient, stringVal, "en", languageCode);
  33.             Console.WriteLine(languageCode +  "::" +  stringVal + " :: " + translated);
  34.             info.SetValue(destDict, translated);
  35.         }
  36.         else
  37.         {
  38.             await IterateStringProperties(info.GetValue(dict), info.GetValue(destDict), languageCode);
  39.         }
  40.     });
  41. }
  42.  
  43.  
  44. var langs = await httpClient.GetFromJsonAsync<Languages[]>("/languages");
  45.  
  46.  
  47. var langList = langs.ToList();
  48.  
  49. var paralelOptions2 = new ParallelOptions { MaxDegreeOfParallelism = 4 };
  50. await Parallel.ForEachAsync(langList, paralelOptions2, async (line, t) =>
  51.     {
  52.         var path = Path.GetDirectoryName(sourceFile);
  53.  
  54.         var filePath = Path.Combine(path, line.code + ".json");
  55.  
  56.         if (File.Exists(filePath)) return;
  57.         var transDict = JsonSerializer.Deserialize<Root>(file);
  58.         await IterateStringProperties(dict, transDict, line.code);
  59.  
  60.         var outStr = JsonSerializer.Serialize(transDict);
  61.         await File.WriteAllTextAsync(filePath, outStr, Encoding.UTF8);
  62.     }
  63. );
  64.  
  65. Console.WriteLine("FINISHED");
  66. Console.ReadLine();
  67.  
  68.  
  69. async Task<string> TranslateAsync(HttpClient client, string test, string sourceLanguage, string targetLanguage)
  70. {
  71.     var urlEncodedContent = new FormUrlEncodedContent(new Dictionary<string, string>
  72.     {
  73.         {
  74.             "q",
  75.             test
  76.         },
  77.         {
  78.             "source",
  79.             sourceLanguage
  80.         },
  81.         {
  82.             "target",
  83.             targetLanguage
  84.         }
  85.     });
  86.  
  87.     var content = (HttpContent)urlEncodedContent;
  88.     var res =
  89.         await httpClient.PostAsync("/translate", content);
  90.     var stringResp = await res.Content.ReadAsStringAsync();
  91.     var ret = JsonSerializer.Deserialize<JsonElement>(stringResp);
  92.     return ret.GetProperty("translatedText").GetString();
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement