Использование Google Translate в C#

Я должен перевести некоторый текст с помощью службы перевода Google. Весь код, который я нашел, не работает. Я думаю, потому что они изменили свой сервис. Если у кого-то есть рабочий код, я был бы очень рад.

8 ответов

Решение

Посмотрите, работает ли это для вас

Google-язык-апи-для-DotNet

http://code.google.com/p/google-language-api-for-dotnet/

Гугл переводчик

http://www.codeproject.com/KB/IP/GoogleTranslator.aspx

Translate your text using Google Api's

http://blogs.msdn.com/shahpiyush/archive/2007/06/09/3188246.aspx

Calling Google Ajax Language API for Translation and Language Detection from C#

http://www.esotericdelights.com/post/2008/11/Calling-Google-Ajax-Language-API-for-Translation-and-Language-Detection-from-C.aspx

Translation Web Service in C#

http://www.codeproject.com/KB/cpp/translation.aspx

Использование Google Translation API из.NET

http://www.reimers.dk/blogs/jacob_reimers_weblog/archive/2008/06/18/using-google-s-translation-api-from-net.aspx

Причина, по которой первый пример кода не работает, заключается в том, что изменился макет страницы. В соответствии с предупреждением на этой странице: "Переведенная строка извлекается с помощью RegEx близко к нижней части. Это, конечно, может измениться, и вы должны поддерживать ее в актуальном состоянии". Я думаю, что это должно работать пока, по крайней мере, пока они снова не изменят страницу.


public string TranslateText(string input, string languagePair)
{
    string url = String.Format(" http://www.google.com/translate_t?hl=en&ie=UTF8&text={0}&langpair={1}", input, languagePair);
    WebClient webClient = new WebClient();
    webClient.Encoding = System.Text.Encoding.UTF8;
    string result = webClient.DownloadString(url);
    result = result.Substring(result.IndexOf("<span title= \ "") + " <span title= \ "" Length);
    result = result.Substring (result.IndexOf (">") + 1);
    result = result.Substring (0, result.IndexOf (" </span > "));
    вернуть результат. Трим ();
}

Я нашел этот код работает для меня:

public String Translate(String word)
{
    var toLanguage = "en";//English
    var fromLanguage = "de";//Deutsch
    var url = $"https://translate.googleapis.com/translate_a/single?client=gtx&sl={fromLanguage}&tl={toLanguage}&dt=t&q={HttpUtility.UrlEncode(word)}";
    var webClient = new WebClient
    {
        Encoding = System.Text.Encoding.UTF8
    };
    var result = webClient.DownloadString(url);
    try
    {
        result = result.Substring(4, result.IndexOf("\"", 4, StringComparison.Ordinal) - 4);
        return result;
    }
    catch
    {
        return "Error";
    }
}

Google Translate Kit, библиотека с открытым исходным кодом http://ggltranslate.codeplex.com/

Translator gt = new Translator();
/*using cache*/
DemoWriter dw = new DemoWriter();
gt.KeyGen = new SimpleKeyGen();
gt.CacheManager = new SimleCacheManager();
gt.Writer = dw;
Translator.TranslatedPost post = gt.GetTranslatedPost("Hello world", LanguageConst.ENGLISH, LanguageConst.CHINESE);
Translator.TranslatedPost post2 = gt.GetTranslatedPost("I'm Jeff", LanguageConst.ENGLISH, LanguageConst.CHINESE);
this.result.InnerHtml = "<p>" + post.text +post2.text+ "</p>";
dw.WriteToFile();

Когда я использовал приведенный выше код. Он показывает мне переведенный текст как вопросительный знак, например (???????). Затем я конвертирую из WebClient в HttpClient, тогда я получаю точный результат. Так что вы можете использовать код, подобный этому.

public static string TranslateText( string input, string languagePair)       
{
    string url = String.Format("http://www.google.com/translate_t?hl=en&ie=UTF8&text={0}&langpair={1}", input, languagePair);
    HttpClient httpClient = new HttpClient();
    string result = httpClient.GetStringAsync(url).Result;
    result = result.Substring(result.IndexOf("<span title=\"") + "<span title=\"".Length);
    result = result.Substring(result.IndexOf(">") + 1);
    result = result.Substring(0, result.IndexOf("</span>"));
    return result.Trim();
}

Затем вы вызываете функцию как. Вы ставите первые две буквы любой языковой пары.

С английского (ан) на урду (ур).

TranslateText(line, "en|ur")

Вот мой немного другой код, решающий также проблему кодирования:

public string TranslateText(string input, string languagePair)
{
    string url = String.Format("http://www.google.com/translate_t?hl=en&ie=UTF8&text={0}&langpair={1}", input, languagePair);
    WebClient webClient = new WebClient();
    webClient.Encoding = System.Text.Encoding.Default;
    string result = webClient.DownloadString(url);
    result = result.Substring(result.IndexOf("TRANSLATED_TEXT"));
    result = result.Substring(result.IndexOf("'")+1);
    result = result.Substring(0, result.IndexOf("'"));
    return result;
}

Пример вызова функции:

var input_language = "en";
var output_language = "es";
var result = TranslateText("Hello", input_language + "|" + output_language);

Результатом будет "Hola"

Если вы хотите перевести свои ресурсы, просто загрузите MAT (Multilingual App Toolkit) для Visual Studio. https://marketplace.visualstudio.com/items?itemName=MultilingualAppToolkit.MultilingualAppToolkit-18308 Это способ перейти к переводу ваших проектов в Visual Studio. https://blogs.msdn.microsoft.com/matdev/

Google собирается закрыть API перевода до конца 2011 года, так что вы должны искать альтернативы!

Другие вопросы по тегам