Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Json;
- using System.Linq;
- using System.Net;
- using System.Text;
- // ключи
- const string SUB_KEY = "86e2f8ab0a5f463da5483b83d746e8c8";
- const string SUB_REGION = "westeurope";
- Console.Write("Получаем языки...");
- // получаем список языков
- var languages = GetAvailableLanguages().ToList();
- Console.WriteLine();
- // выводим все доступные для перевода языки
- foreach (var (k, n, nn) in languages)
- Console.WriteLine("{0}: {1} ({2})", k, n, nn);
- string key, name, nativeName;
- // спрашиваем конечный язык
- while (true) {
- Console.Write("\nВыберите язык (символы до двоеточия): ");
- // получаем язык
- var input = Console.ReadLine();
- // ищем его в списке
- (key, name, nativeName) = languages.FirstOrDefault(p => p.Item1 == input);
- // если нам скормили несуществующий язык, выводим ошибку
- if ((key, name, nativeName) == default)
- Console.WriteLine("Выбранный язык не найден. Попробуйте снова.");
- // иначе прерываем бесконечный порочный цикл
- else break;
- }
- Console.WriteLine("Буду переводить на {0} ({1})", name, nativeName);
- // спрашиваем и переводим~
- while (true) {
- Console.Write("Что перевести: ");
- // получаем то, что нужно перевести
- var input = Console.ReadLine();
- // выводим результат перевода
- Console.WriteLine("Результат перевода на {0}: {1}", name, Translate(input));
- }
- string Translate(string input) {
- // создаём запрос и указываем заголовки
- var req = WebRequest.Create($"https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&to={key}");
- req.Method = "POST";
- req.Headers["Ocp-Apim-Subscription-Key"] = SUB_KEY;
- req.Headers["Ocp-Apim-Subscription-Region"] = SUB_REGION;
- req.ContentType = "application/json";
- // скармливаем входной JSON с текстом для перевода
- using (var sw = new StreamWriter(req.GetRequestStream(), Encoding.UTF8))
- sw.Write(new JsonArray(new JsonObject {
- ["Text"] = input
- }).ToString());
- // получаем ответ
- var res = req.GetResponse();
- var stream = res.GetResponseStream();
- // если потока нет, возвращаем null
- if (stream == null) return null;
- // получаем ответ
- JsonValue jsonVal;
- using (var sr = new StreamReader(stream))
- jsonVal = JsonValue.Parse(sr.ReadToEnd());
- // если нет результатов, или в JSON есть какие-то некорректные поля, возвращаем null
- if (!(jsonVal is JsonArray results) || results.Count != 1 || !(results[0] is JsonObject result) ||
- !result.ContainsKey("translations") || !(result["translations"] is JsonArray translations) ||
- translations.Count == 0 || !(translations[0] is JsonObject translation) || !translation.ContainsKey("text") ||
- translation["text"].JsonType != JsonType.String)
- return null;
- // иначе возвращаем результат перевода
- return translation["text"];
- }
- static IEnumerable<(string, string, string)> GetAvailableLanguages() {
- // создаём запрос
- var req = WebRequest.Create(
- "https://api.cognitive.microsofttranslator.com/languages?api-version=3.0&scope=translation");
- // получаем ответ
- var res = req.GetResponse();
- var stream = res.GetResponseStream();
- // если потока нет, уходим
- if (stream == null) yield break;
- // получаем ответ
- JsonObject json;
- using (var sr = new StreamReader(stream)) json = JsonValue.Parse(sr.ReadToEnd()) as JsonObject;
- // если JSON в некорректном виде, уходим
- if (json == null) yield break;
- // получаем объект с языками
- var translation = (JsonObject) json["translation"];
- // итерируем по ключам JSON
- foreach (var jsonKey in translation.Keys)
- // и возвращаем каждый язык кортежом
- yield return (jsonKey, translation[jsonKey]["name"], translation[jsonKey]["nativeName"]);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement