Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализация GoogleTranslate 
:(
    Опции темы
uranpro
  Дата 6.7.2010, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: 1
Всего: 1



Добрый.
Хочу создать класс, который будет переводить текст через Google translate
вот что получилось
Код

using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Net;

namespace Google
{
    #region TranslateLanguages
    public enum TranslateLanguages
    {
        Russian,
        English,
        German,
        French,
        Italian,
        Ukrainian
    }
    #endregion

    public static class GoogleTranslate
    {
        #region Const
        static readonly Encoding defEncoding = Encoding.UTF8;

        static readonly string langRus = "ru";
        static readonly string langEng = "en";
        static readonly string langGerman = "de";
        static readonly string langFrench = "fr";
        static readonly string langItalian = "it";
        static readonly string langUkrain = "uk";
        #endregion
        #region Helpers
        static string GetLanguageString(TranslateLanguages Language)
        {
            switch (Language)
            {
                case TranslateLanguages.English:
                    return langEng;
                case TranslateLanguages.Russian:
                    return langRus;
                case TranslateLanguages.German:
                    return langGerman;
                case TranslateLanguages.French:
                    return langFrench;
                case TranslateLanguages.Italian:
                    return langItalian;
                case TranslateLanguages.Ukrainian:
                    return langUkrain;
                default:
                    throw new ArgumentException("Language not supported");
            }
        }

        static string GetURL(string Txt, TranslateLanguages L1, TranslateLanguages L2)
        {
            var languagePair = 
                string.Format("{0}|{1}", 
                    GetLanguageString(L1), 
                    GetLanguageString(L2));

            return String.Format("http://www.google.com/translate_t?hl=en&ie=UTF8&text={0}&langpair={1}", Txt, languagePair);
        }
        #endregion
        #region Public
        /// <summary>
        /// Google Translate
        /// </summary>
        /// <param name="inText">Input text</param>
        /// <param name="inLang">Input text language</param>
        /// <param name="outLang">Output text language</param>
        /// <returns></returns>
        public static string Translate(string inText, TranslateLanguages inLang, TranslateLanguages outLang)
        {
            if (
                string.IsNullOrEmpty(inText) ||
                inLang == null ||
                outLang == null ||
                inLang.Equals(outLang)
                )
                throw new ArgumentException("Invalid agruments");

            var result = string.Empty;

            using (var wc = new WebClient())
            {
                wc.Encoding = defEncoding;
                result = wc.DownloadString(GetURL(inText, inLang, outLang));
            }

            var m = Regex.Match(result, "<span id=result_box.*<span.*?>(.*?)</span></span>");

            if (m.Success)
                result = m.Groups[1].Captures[0].Value;

            return result;
        }
        #endregion
    }
}

Помогите доработать регулярное выражение(оно сейчас работает, но мне кажется, строка "m.Groups[1].Captures[0].Value" в будущем может криво работать).
Почему, когда везде кодировки UTF8, вместо результата печатает знаки вопроса ?
 smile 

Это сообщение отредактировал(а) uranpro - 6.7.2010, 15:20


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
uranpro
Дата 6.7.2010, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: 1
Всего: 1



Готово
Код

using System;
using System.Text;
using System.Net;
using System.Net.Json;


namespace Google
{
    #region TranslateLanguages
    public enum TranslateLanguages
    {
        Russian,
        English,
        German,
        French,
        Italian,
        Ukrainian
    }
    #endregion

    public static class GoogleTranslate
    {
        #region Const
        static readonly Encoding defEncoding = Encoding.UTF8;

        static readonly string langRus = "ru";
        static readonly string langEng = "en";
        static readonly string langGerman = "de";
        static readonly string langFrench = "fr";
        static readonly string langItalian = "it";
        static readonly string langUkrain = "uk";

        static readonly string gApiJTranslationVarName = "translatedText";
        #endregion
        #region Helpers
        static string GetLanguageString(TranslateLanguages Language)
        {
            switch (Language)
            {
                case TranslateLanguages.English:
                    return langEng;
                case TranslateLanguages.Russian:
                    return langRus;
                case TranslateLanguages.German:
                    return langGerman;
                case TranslateLanguages.French:
                    return langFrench;
                case TranslateLanguages.Italian:
                    return langItalian;
                case TranslateLanguages.Ukrainian:
                    return langUkrain;
                default:
                    throw new ArgumentException("Language not supported");
            }
        }

        static string GetURL(string Txt, TranslateLanguages L1, TranslateLanguages L2)
        {
            var languagePair = 
                string.Format(
                    "{0}|{1}", 
                    GetLanguageString(L1), 
                    GetLanguageString(L2));

            return String.Format("http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q={0}&langpair={1}", Txt, languagePair);
        }

        static JsonObject GetJsonObject(string JsonText)
        {
            return new JsonTextParser().Parse(JsonText);
        }

        static void GetJsonValue(JsonObjectCollection JOCollection, string VarName, ref JsonObject JObject)
        {
            foreach (var e in JOCollection)
            {
                if (e.GetType() == typeof(JsonObjectCollection))
                    GetJsonValue(e as JsonObjectCollection, VarName, ref JObject);
                else if (e.Name.Equals(VarName))
                    JObject = e;
            }
        }
        #endregion
        #region Public
        /// <summary>
        /// Google Translate
        /// </summary>
        /// <param name="inText">Input text</param>
        /// <param name="inLang">Input text language</param>
        /// <param name="outLang">Output language</param>
        /// <returns>Translated text</returns>
        public static string Translate(string inText, TranslateLanguages inLang, TranslateLanguages outLang)
        {
            if (
                string.IsNullOrEmpty(inText) ||
                inLang == null ||
                outLang == null ||
                inLang.Equals(outLang)
                )
                throw new ArgumentException("Invalid agruments");

            var response = string.Empty;

            using (var wc = new WebClient())
            {
                wc.Encoding = defEncoding;
                // JSON: {"responseData": {"translatedText":"ciao a tutti"}, "responseDetails": null, "responseStatus": 200}
                response = wc.DownloadString(GetURL(inText, inLang, outLang));
            }

            var translationText = new object() as JsonObject;

            GetJsonValue(
                GetJsonObject(response) as JsonObjectCollection,
                gApiJTranslationVarName,
                ref translationText);

            return translationText.GetValue().ToString();
        }
        #endregion
    }
}

System.Net.Json download
Спасибо diadiavova =)

Это сообщение отредактировал(а) uranpro - 6.7.2010, 17:26


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
diadiavova
Дата 6.7.2010, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Вообще-то я имел в виду скорее это
http://msdn.microsoft.com/ru-ru/library/bb412179.aspx



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
uranpro
Дата 7.7.2010, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: 1
Всего: 1



ок, исправим)


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0946 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.