Пример #1
0
		// The response from the TranslateAsync call is a TranslationResponse
		// This contains a collection of TranslationSets, and the original query string
		private static void SuccessfulQuery(TranslationResponse response)
		{
			Console.WriteLine("Found {0} results:", response.Translations.Count());
			var i = 0;

			// Each TranslationSet contains an original phrase, which indicates the sense
			// This is followed by a list of possible translations in that context
			foreach(var set in response.Translations)
			{
				Console.WriteLine("Result #{0}: original sense is \"{1}\" ({2})", ++i, set.Original.Sense, set.Original.PartOfSpeech);
				Console.WriteLine();

				foreach(var translation in set.Translations)
					Console.WriteLine(string.Format("\t{0}", translation.Term));

				Console.WriteLine();
			}

			Console.WriteLine();
			Console.WriteLine();
		}
		public async Task<TranslationResponse> TranslateAsync(string word)
		{
			var raw = await m_client.DownloadStringTaskAsync(GetUri(word));
			var obj = JObject.Parse(raw);

			var error = obj["Error"];
			if(error != null && error.Value<string>() == "UnsupportedDictionary")
				throw new NotSupportedException(string.Format("The specified dictionary, {0}, is not available via the WordReference API.", m_lookup));

			var response = new TranslationResponse { Query = word };
			var list = new List<TranslationSet>();

			foreach(var pair in obj)
			{
				var key = pair.Key;

				// TODO: Add support for compounds etc
				if(!key.Contains("term"))
					continue;

				foreach(var cat in pair.Value)
				{
					var catProp = cat as JProperty;

					if(!Categories.Contains(catProp.Name))
						continue;

					foreach(var index in cat.Children().Children())
					{
						var set = new TranslationSet();
						list.Add(set);

						var translationList = new List<Phrase>();

						foreach(var translation in index.Children().Children())
						{
							var translationProp = translation as JProperty;

							switch(translationProp.Name)
							{
							case "Note":
								continue;

							case "OriginalTerm":
								set.Original = ParseWord(translationProp);
								break;

							default:
								translationList.Add(ParseWord(translationProp));
								break;
							}
						}

						set.Translations = translationList;
					}
				}
			}

			response.Translations = list;
			return response;
		}