mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-11-23 11:42:36 +01:00
Work on gt
This commit is contained in:
parent
08729c6944
commit
44379b02d7
@ -549,6 +549,7 @@
|
|||||||
<Compile Include="TextDraw.cs" />
|
<Compile Include="TextDraw.cs" />
|
||||||
<Compile Include="TextEncodingExtensions.cs" />
|
<Compile Include="TextEncodingExtensions.cs" />
|
||||||
<Compile Include="TimeCode.cs" />
|
<Compile Include="TimeCode.cs" />
|
||||||
|
<Compile Include="Translate\GoogleTranslator1.cs" />
|
||||||
<Compile Include="Translate\GoogleTranslator2.cs" />
|
<Compile Include="Translate\GoogleTranslator2.cs" />
|
||||||
<Compile Include="Translate\ITranslator.cs" />
|
<Compile Include="Translate\ITranslator.cs" />
|
||||||
<Compile Include="Translate\MicrosoftTranslator.cs" />
|
<Compile Include="Translate\MicrosoftTranslator.cs" />
|
||||||
|
84
libse/Translate/GoogleTranslator1.cs
Normal file
84
libse/Translate/GoogleTranslator1.cs
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Net;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
namespace Nikse.SubtitleEdit.Core.Translate
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Google translate via Google Cloud API - see https://cloud.google.com/translate/
|
||||||
|
/// </summary>
|
||||||
|
public class GoogleTranslator1 : ITranslator
|
||||||
|
{
|
||||||
|
public List<TranslationPair> GetTranslationPairs()
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetName()
|
||||||
|
{
|
||||||
|
return "Google translate (old)";
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetUrl()
|
||||||
|
{
|
||||||
|
return "https://translate.google.com/";
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<string> Translate(string sourceLanguage, string targetLanguage, List<string> texts, StringBuilder log)
|
||||||
|
{
|
||||||
|
string baseUrl = "https://translation.googleapis.com/language/translate/v2";
|
||||||
|
var format = "text";
|
||||||
|
var input = new StringBuilder();
|
||||||
|
foreach (var text in texts)
|
||||||
|
{
|
||||||
|
if (input.Length > 0)
|
||||||
|
input.Append("&");
|
||||||
|
input.Append("q=" + Utilities.UrlEncode(text));
|
||||||
|
}
|
||||||
|
string uri = $"{baseUrl}/?{input}&target={targetLanguage}&source={sourceLanguage}&format={format}&key={Configuration.Settings.Tools.GoogleApiV2Key}";
|
||||||
|
|
||||||
|
var request = WebRequest.Create(uri);
|
||||||
|
request.Proxy = Utilities.GetProxy();
|
||||||
|
request.ContentType = "application/json";
|
||||||
|
request.ContentLength = 0;
|
||||||
|
request.Method = "POST";
|
||||||
|
var response = request.GetResponse();
|
||||||
|
var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
|
||||||
|
string content = reader.ReadToEnd();
|
||||||
|
|
||||||
|
var parser = new JsonParser();
|
||||||
|
var x = (Dictionary<string, object>)parser.Parse(content);
|
||||||
|
foreach (var k in x.Keys)
|
||||||
|
{
|
||||||
|
if (x[k] is Dictionary<string, object> v)
|
||||||
|
{
|
||||||
|
foreach (var innerKey in v.Keys)
|
||||||
|
{
|
||||||
|
if (v[innerKey] is List<object> l)
|
||||||
|
{
|
||||||
|
foreach (var o2 in l)
|
||||||
|
{
|
||||||
|
if (o2 is Dictionary<string, object> v2)
|
||||||
|
{
|
||||||
|
foreach (var innerKey2 in v2.Keys)
|
||||||
|
{
|
||||||
|
if (v2[innerKey2] is string translatedText)
|
||||||
|
{
|
||||||
|
translatedText = Regex.Unescape(translatedText);
|
||||||
|
translatedText = string.Join(Environment.NewLine, translatedText.SplitToLines());
|
||||||
|
// return PostTranslate(translatedText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Net;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using Nikse.SubtitleEdit.Core.SubtitleFormats;
|
||||||
|
|
||||||
namespace Nikse.SubtitleEdit.Core.Translate
|
namespace Nikse.SubtitleEdit.Core.Translate
|
||||||
{
|
{
|
||||||
@ -26,7 +30,68 @@ namespace Nikse.SubtitleEdit.Core.Translate
|
|||||||
|
|
||||||
public List<string> Translate(string sourceLanguage, string targetLanguage, List<string> texts, StringBuilder log)
|
public List<string> Translate(string sourceLanguage, string targetLanguage, List<string> texts, StringBuilder log)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
string result;
|
||||||
|
using (var wc = new WebClient())
|
||||||
|
{
|
||||||
|
string url = $"https://translate.googleapis.com/translate_a/single?client=gtx&sl={sourceLanguage}&tl={targetLanguage}&dt=t&q={Utilities.UrlEncode("input")}";
|
||||||
|
wc.Proxy = Utilities.GetProxy();
|
||||||
|
wc.Encoding = Encoding.UTF8;
|
||||||
|
wc.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36");
|
||||||
|
result = wc.DownloadString(url).Trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
var sbAll = new StringBuilder();
|
||||||
|
int count = 0;
|
||||||
|
int i = 1;
|
||||||
|
int level = result.StartsWith('[') ? 1 : 0;
|
||||||
|
while (i < result.Length - 1)
|
||||||
|
{
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
var start = false;
|
||||||
|
for (; i < result.Length - 1; i++)
|
||||||
|
{
|
||||||
|
var c = result[i];
|
||||||
|
if (start)
|
||||||
|
{
|
||||||
|
if (c == '"' && result[i - 1] != '\\')
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
if (count % 2 == 1 && level > 2) // even numbers are original text, level > 3 is translation
|
||||||
|
sbAll.Append(" " + sb);
|
||||||
|
i++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sb.Append(c);
|
||||||
|
}
|
||||||
|
else if (c == '"')
|
||||||
|
{
|
||||||
|
start = true;
|
||||||
|
}
|
||||||
|
else if (c == '[')
|
||||||
|
{
|
||||||
|
level++;
|
||||||
|
}
|
||||||
|
else if (c == ']')
|
||||||
|
{
|
||||||
|
level--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result = sbAll.ToString().Trim();
|
||||||
|
result = Regex.Unescape(result);
|
||||||
|
result = Json.DecodeJsonText(result);
|
||||||
|
|
||||||
|
string res = result;
|
||||||
|
res = string.Join(Environment.NewLine, res.SplitToLines());
|
||||||
|
res = res.Replace("NewlineString", Environment.NewLine);
|
||||||
|
res = res.Replace(Environment.NewLine + Environment.NewLine, Environment.NewLine);
|
||||||
|
res = res.Replace(Environment.NewLine + " ", Environment.NewLine);
|
||||||
|
res = res.Replace(Environment.NewLine + " ", Environment.NewLine);
|
||||||
|
res = res.Replace(" " + Environment.NewLine, Environment.NewLine);
|
||||||
|
res = res.Replace(" " + Environment.NewLine, Environment.NewLine).Trim();
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user