Переводчик с подключением Яндекс API на C#

Узнай цену своей работы

Формулировка задачи:

Консольное приложение. Задача такая. Входной файл - input.txt, в котором текст на каком либо языке (без примесей других языков), задаётся как параметр командной строки. Список языков которые использую находятся на сайте яндекса. Выходной файл - {lang_code} - {output_lang_code}.txt Этот файл должен быть в той же папке что и входной файл. в нем будет текст из входного файла переведнный на язык {output_lang_text} (из того же списка этот язык). {lang_code} - код языка входного файла, должен определиться автоматически (т.е. если я напишу на русском - ru, на английском - en и так далее). {output_lang_code} - код языка который пользователь выбирает. Когда запускаю программу появиться список всех доступных языков и пользователь выбирает один из них, на этот язык и будем переводить. Всё сделал, работает нормально, есть только пару проблем. Подскажите что сделать, чтобы переводчик начал переводить на китайский, корейский, японский и т.д. языки из подобной серии. Переводит хорошо на русский, англ., финский, нем. и т.д. Как убрать в class TextTranslationAPI повторяющийся код? И есть ли ещё предложения по оптимизации подомной программки.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Net;
using System.IO;
using System.Xml.Linq;
 
namespace TranslaterText
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                TextReadOrWriteOfFile fileWorker = new TextReadOrWriteOfFile();
                string languagesForTranslate = "албанский sq,\nанглийский en,\nарабский ar,\nармянский hy,\nазербайджанский az,\nафрикаанс af,\nбаскский eu,\nбелорусский be,\nболгарский bg,\nбоснийский bs,\nваллийский cy,\nвьетнамский vi,\nвенгерский hu,\nгаитянский(креольский) ht,\nгалисийский gl,\nголландский nl,\nгреческий el,\nгрузинский  ka,\nдатский da,\nиврит he,\nиндонезийский id,\nирландский  ga,\nитальянский it,\nиспанский es,\nказахский  kk,\nкаталанский ca,\nкиргизский  ky,\nкитайский zh,\nкорейский ko,\nлатынь  la,\nлатышский   lv,\nлитовский   lt,\nмалагасийский   mg,\nмалайский   ms,\nмальтийский mt,\nмакедонский mk,\nмонгольский mn,\nнемецкий de,\nнорвежский  no,\nперсидский  fa,\nпольский  pl,\nпортугальский pt,\nрумынский ro,\nрусский ru,\nсербский sr,\nсловацкий sk,\nсловенский  sl,\nсуахили sw,\nтаджикский  tg,\nтайский th,\nтагальский  tl,\nтатарский   tt,\nтурецкий tr,\nузбекский   uz,\nукраинский  uk,\nфинский fi,\nфранцузский fr,\nхорватский  hr,\nчешский cs,\nшведский sv,\nэстонский   et,\nяпонский ja";
                Console.WriteLine("Перечень языков перевода\n\n" + languagesForTranslate + "\n");
 
                string languageTextForTranslat = TextTranslationAPI.LanguageOfText(fileWorker.ReadTextOfFile(args[0]));
                Console.WriteLine("Язык текста для перевода " + languageTextForTranslat + "\n");
                Console.WriteLine("Выберите из перечня языков, язык на который будет переводится текст в вашем файле:\n");
                Console.WriteLine("Пример: -en\n");
                string languageTranslate = Console.ReadLine();
 
                string translateLanguage = languageTextForTranslat + languageTranslate;
                string adresOutPutFile = string.Format(@"D:\{0}.txt", translateLanguage);
                fileWorker.WriteOfTranslatedTextInFile(adresOutPutFile, TextTranslationAPI.Translate(translateLanguage, fileWorker.ReadTextOfFile(args[0])));
            }
            catch (Exception ex)
            {
                Console.WriteLine("ОШИБКА, НЕВЕРНО ВВЕЛИ ЯЗЫК НА КОТОРЫЙ БУДЕТ ПЕРЕВОДИТСЯ ТЕКСТ В ВАШЕМ ФАЙЛЕ: " + ex.Message);
                Console.ReadKey();
            }
            
            }
        
    }
}
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
 
namespace TranslaterText
{
    class TextReadOrWriteOfFile
    {
        public string ReadTextOfFile(string pathFileText)
        {
            using (StreamReader textOfFile = new StreamReader(pathFileText, System.Text.Encoding.Default))
            {
                string text = textOfFile.ReadToEnd();
                return text;
            }
        }
       
        public void WriteOfTranslatedTextInFile (string pathFileText, string textTranslated)
        {
            using (StreamWriter textTranslationForEntru = new StreamWriter(pathFileText, true, System.Text.Encoding.Default))
            {
                textTranslationForEntru.Write(textTranslated);
            }
        }
    }
}
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Net;
using System.IO;
using System.Xml.Linq;

namespace TranslaterText
{
    class TextTranslationAPI
    {
        
        public static string Translate(string lang, string text)
           
        {
            string strUrl = "https://translate.yandex.net/api/v1.5/tr/translate?";
            string key = "trnsl.1.1.20151224T055717Z.6229809acdf07b74.5d473b9abe91234a4778085591e7124d65d75a75";
            strUrl += "key=" + key;
            strUrl += "&lang=" + lang;
            strUrl += "&text=" + text;
            WebClient webClitnt = new WebClient();
            webClitnt.Encoding = Encoding.UTF8;
            string stringXml = webClitnt.DownloadString(strUrl);
            XDocument document = XDocument.Parse(stringXml);
            string textTranslate = document.Root.Element("text").Value;
            return textTranslate;
        }
 
        public static string LanguageOfText(string text)
        {
            string str = "https://translate.yandex.net/api/v1.5/tr/detect?";
            string key = "trnsl.1.1.20151224T055717Z.6229809acdf07b74.5d473b9abe91234a4778085591e7124d65d75a75";
            str += "key=" + key;
            str += "&text=" + text;
            WebClient webClitnt = new WebClient();
            webClitnt.Encoding = Encoding.UTF8;
            string stringXml = webClitnt.DownloadString(str);
            XDocument document = XDocument.Parse(stringXml);
            string languageOfText = document.Root.Attribute("lang").Value;
            return languageOfText;
        }
    
    }
}

Решение задачи: «Переводчик с подключением Яндекс API на C#»

textual
Листинг программы
        static void Test1(string[] args)
        {
            try
            {
                string languagesForTranslate = "албанский sq,\nанглийский en,\nарабский ar,\nармянский hy,\nазербайджанский az,\nафрикаанс af,\nбаскский eu,\nбелорусский be,\nболгарский bg,\nбоснийский bs,\nваллийский cy,\nвьетнамский vi,\nвенгерский hu,\nгаитянский(креольский) ht,\nгалисийский gl,\nголландский nl,\nгреческий el,\nгрузинский  ka,\nдатский da,\nиврит he,\nиндонезийский id,\nирландский  ga,\nитальянский it,\nиспанский es,\nказахский  kk,\nкаталанский ca,\nкиргизский  ky,\nкитайский zh,\nкорейский ko,\nлатынь  la,\nлатышский   lv,\nлитовский   lt,\nмалагасийский   mg,\nмалайский   ms,\nмальтийский mt,\nмакедонский mk,\nмонгольский mn,\nнемецкий de,\nнорвежский  no,\nперсидский  fa,\nпольский  pl,\nпортугальский pt,\nрумынский ro,\nрусский ru,\nсербский sr,\nсловацкий sk,\nсловенский  sl,\nсуахили sw,\nтаджикский  tg,\nтайский th,\nтагальский  tl,\nтатарский   tt,\nтурецкий tr,\nузбекский   uz,\nукраинский  uk,\nфинский fi,\nфранцузский fr,\nхорватский  hr,\nчешский cs,\nшведский sv,\nэстонский   et,\nяпонский ja";
                Console.WriteLine("Перечень языков перевода\n\n" + languagesForTranslate + "\n");
                
                string text = File.ReadAllText(args[0]);
                TextTranslationAPI api = new TextTranslationAPI();
                TranslateCommand languageOfText = new TranslateCommand {
                    Type = RequestType.Detect,
                    Parameters = new Dictionary<string,string>{ {"text", text} },
                    ResultSelector = x => x.Attribute("lang").Value
                };
 
                string languageFrom = api.GetResult(languageOfText);
                Console.WriteLine("Язык текста для перевода " + languageFrom + "\n");
                Console.WriteLine("Выберите из перечня языков, язык на который будет переводится текст в вашем файле:\n");
                Console.WriteLine("Пример: -en\n");
                string languageTo = Console.ReadLine();
 
                string translateLanguage = languageFrom + languageTo;
                TranslateCommand translate = new TranslateCommand{
                    Type = RequestType.Translate,
                    Parameters = new Dictionary<string,string>{ {"lang", translateLanguage}, {"text", text} },
                    ResultSelector = x => x.Element("text").Value
                };
                string result = api.GetResult(translate);
                string adresOutPutFile = string.Format(@"D:\Temp\{0}.txt", translateLanguage);
                File.WriteAllText(adresOutPutFile, result);
            }
            catch (Exception ex)
            {
                
                Console.WriteLine("ОШИБКА, НЕВЕРНО ВВЕЛИ ЯЗЫК НА КОТОРЫЙ БУДЕТ ПЕРЕВОДИТСЯ ТЕКСТ В ВАШЕМ ФАЙЛЕ: " + ex.Message);
            }
            
        }
        
    
    enum RequestType
    {
        Translate,
        Detect
    }
    
    struct TranslateCommand
    {
        public RequestType Type;
        public Dictionary<string,string> Parameters;
        public Func<XElement,string> ResultSelector;
    }
    
    class TextTranslationAPI
    {
    
        private readonly string Url;
        private readonly string Key;
        public TextTranslationAPI(string url, string key)
        {
            Url = url;
            Key = key;
        }
        public TextTranslationAPI() : this(@"https://translate.yandex.net/api/v1.5/tr/", "trnsl.1.1.20151224T055717Z.6229809acdf07b74.5d473b9abe91234a4778085591e7124d65d75a75")
        {}
        
        private string GetAction(RequestType type)
        {
            switch(type)
            {
                case RequestType.Detect: 
                    return "detect";
                case RequestType.Translate:
                    return "translate";
                default:    
                    throw new ArgumentOutOfRangeException();
            }
        }
 
        public string GetResult(TranslateCommand command)
        {
            string strUrl = Url + GetAction(command.Type) + "?key=" + Key;
            foreach(var parameter in command.Parameters)
                strUrl += "&" + parameter.Key + "=" + HttpUtility.UrlEncode(parameter.Value);
            WebClient webClitnt = new WebClient();
            webClitnt.Encoding = Encoding.UTF8;
            string stringXml = webClitnt.DownloadString(strUrl);
            XDocument document = XDocument.Parse(stringXml);
            string textTranslate = command.ResultSelector(document.Root);
            return textTranslate;
        }
    
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5
Похожие ответы