Browse Source

Added Yandex translate support

Vimek 6 years ago
parent
commit
e10ab29c57

+ 4 - 1
src/XUnity.AutoTranslator.Plugin.Core/Configuration/Settings.cs

@@ -44,6 +44,7 @@ namespace XUnity.AutoTranslator.Plugin.Core.Configuration
       public static bool EnableSSL;
       public static string BaiduAppId;
       public static string BaiduAppSecret;
+      public static string YandexAPIKey;
       public static int ForceSplitTextAfterCharacters;
 
       public static bool CopyToClipboard;
@@ -94,7 +95,9 @@ namespace XUnity.AutoTranslator.Plugin.Core.Configuration
 
          BaiduAppId = Config.Current.Preferences[ "Baidu" ][ "BaiduAppId" ].GetOrDefault( "" );
          BaiduAppSecret = Config.Current.Preferences[ "Baidu" ][ "BaiduAppSecret" ].GetOrDefault( "" );
-         
+
+         YandexAPIKey = Config.Current.Preferences["Yandex"]["YandexAPIKey"].GetOrDefault("");
+
          EnablePrintHierarchy = Config.Current.Preferences[ "Debug" ][ "EnablePrintHierarchy" ].GetOrDefault( false );
 
          AutoTranslationsFilePath = Path.Combine( Config.Current.DataPath, OutputFile.Replace( "{lang}", Language ) );

+ 2 - 0
src/XUnity.AutoTranslator.Plugin.Core/Constants/KnownEndpointNames.cs

@@ -10,5 +10,7 @@ namespace XUnity.AutoTranslator.Plugin.Core.Constants
       public const string GoogleTranslate = "GoogleTranslate";
 
       public const string BaiduTranslate = "BaiduTranslate";
+
+      public const string YandexTranslate = "YandexTranslate";
    }
 }

+ 3 - 0
src/XUnity.AutoTranslator.Plugin.Core/Web/KnownEndpoints.cs

@@ -10,6 +10,7 @@ namespace XUnity.AutoTranslator.Plugin.Core.Web
    {
       public static readonly KnownEndpoint GoogleTranslate = new GoogleTranslateEndpoint();
       public static readonly KnownEndpoint BaiduTranslate = new BaiduTranslateEndpoint();
+      public static readonly KnownEndpoint YandexTranslate = new YandexTranslateEndpoint();
 
       public static KnownEndpoint FindEndpoint( string identifier )
       {
@@ -21,6 +22,8 @@ namespace XUnity.AutoTranslator.Plugin.Core.Web
                return GoogleTranslate;
             case KnownEndpointNames.BaiduTranslate:
                return BaiduTranslate;
+            case KnownEndpointNames.YandexTranslate:
+               return YandexTranslate;
             default:
                return new DefaultEndpoint( identifier );
          }

+ 94 - 0
src/XUnity.AutoTranslator.Plugin.Core/Web/YandexTranslateEndpoint.cs

@@ -0,0 +1,94 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Net;
+using System.Text;
+using SimpleJSON;
+using UnityEngine;
+using XUnity.AutoTranslator.Plugin.Core.Configuration;
+using XUnity.AutoTranslator.Plugin.Core.Constants;
+using XUnity.AutoTranslator.Plugin.Core.Extensions;
+
+namespace XUnity.AutoTranslator.Plugin.Core.Web
+{
+    public class YandexTranslateEndpoint : KnownEndpoint
+    {
+        private static ServicePoint ServicePoint;
+
+        private static readonly string HttpsServicePointTemplateUrl = "https://translate.yandex.net/api/v1.5/tr.json/translate?key={3}&text={2}&lang={0}-{1}&format=plain";
+        public YandexTranslateEndpoint()
+           : base(KnownEndpointNames.YandexTranslate)
+        {
+
+        }
+
+        public override void ApplyHeaders(Dictionary<string, string> headers)
+        {
+            headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.183 Safari/537.36 Vivaldi/1.96.1147.55";
+            headers["Accept"] = "*/*";
+            headers["Accept-Charset"] = "UTF-8";
+        }
+
+        public override void ApplyHeaders(WebHeaderCollection headers)
+        {
+            headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.183 Safari/537.36 Vivaldi/1.96.1147.55";
+            headers[HttpRequestHeader.Accept] = "*/*";
+            headers[HttpRequestHeader.AcceptCharset] = "UTF-8";
+        }
+
+        public override void ConfigureServicePointManager()
+        {
+            try
+            {
+                ServicePoint = ServicePointManager.FindServicePoint(new Uri("https://translate.yandex.net"));
+                ServicePoint.ConnectionLimit = Settings.MaxConcurrentTranslations;
+            }
+            catch
+            {
+            }
+        }
+
+        public override bool TryExtractTranslated(string result, out string translated)
+        {
+            try
+            {
+
+                var obj = JSON.Parse(result);
+                var lineBuilder = new StringBuilder(result.Length);
+
+                var code = obj.AsObject["code"].ToString();
+
+                if (code == "200")
+                {
+                    var token = obj.AsObject["text"].ToString();
+                    token = token.Substring(2, token.Length - 4).UnescapeJson();
+                    if (String.IsNullOrEmpty(token))
+                    {
+                        translated = null;
+                        return false;
+                    }
+
+                    if (!lineBuilder.EndsWithWhitespaceOrNewline()) lineBuilder.Append("\n");
+                    lineBuilder.Append(token);
+
+                    translated = lineBuilder.ToString();
+                    return true;
+                } else
+                {
+                    translated = null;
+                    return false;
+                }                
+            }
+            catch (Exception)
+            {
+                translated = null;
+                return false;
+            }
+        }
+
+        public override string GetServiceUrl(string untranslatedText, string from, string to)
+        {
+            return string.Format(HttpsServicePointTemplateUrl, from, to, WWW.EscapeURL(untranslatedText), Settings.YandexAPIKey);
+        }
+    }
+}