如何使用带有 GetLanguageNames 的文本翻译 API 获取语言名称

How to get language names using Text Translation API with GetLanguageNames

我无法使用文本翻译获得语言名称 API。我用这个方法得到了可用的语言:

public async Task<List<string>> GetLanguagesForTranslateAsync()
{
    string requestUri = "https://api.microsofttranslator.com/v2/http.svc/GetLanguagesForTranslate";
    string accessToken = await this.auth.GetTokenAsync();
    string response = await this.GetAsync(requestUri, accessToken);
    XDocument xml = XDocument.Parse(response);
    List<string> languages = new List<string>();
    foreach (XElement element in xml.Root.Descendants())
    {
        languages.Add(element.Value);
    }
    return languages;
}

private async Task<string> GetAsync(string url, string bearerToken)
{
    using (HttpClient httpClient = new HttpClient())
    {
        httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);
        HttpResponseMessage response = await httpClient.GetAsync(url);
        return await response.Content.ReadAsStringAsync();
    }
}

在这种情况下,我得到一个 XML,其语言代码如 "en"、"es"、"fr" 或 "zh-CHT",但我想得到 "english"、"spanish"、"french" 或 "chinese (traditional)"。寻找 the documentation 我试过这个方法:

public async Task<List<string>> GetLanguageNamesAsync(string locale, List<string> languageCodes)
{
    string requestUri = "https://api.microsofttranslator.com/v2/http.svc/GetLanguageNames";
    string content = $"locale=en&languageCodes=en,es,fr,zh-CHT";
    string accessToken = await this.auth.GetTokenAsync();
    string response = await this.PostAsync(requestUri, accessToken, content);
    XDocument xml = XDocument.Parse(response);
    List<string> languages = new List<string>();
    foreach (XElement element in xml.Root.Descendants())
    {
        languages.Add(element.Value);
    }
    return languages;
}

private async Task<string> PostAsync(string url, string bearerToken, string content)
{
    using (HttpClient httpClient = new HttpClient())
    {
        httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);
        HttpResponseMessage response = await httpClient.PostAsync(url, new StringContent(content));
        return await response.Content.ReadAsStringAsync();
    }
}

我收到此请求的响应:

请求错误

错误状态代码: 'InternalServerError'

详细信息:服务器在处理请求时遇到错误。请查看服务器日志以获取更多详细信息。

真正的XML响应:

<html version="-//W3C//DTD XHTML 2.0//EN"
      xml:lang="en"
      xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd"
      xmlns="http://www.w3.org/1999/xhtml"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <HEAD>
    <TITLE>Request Error</TITLE>
  </HEAD>
  <BODY>
    <DIV id="content">
      <P class="heading1"><B>Error Status Code:</B> 'InternalServerError'</P>
      <P><B>Details: </B>The server encountered an error processing the request. Please see the server logs for more details.</P>
      <!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-->
    </DIV>
  </BODY>
</html>

你知道发生了什么事吗?我还需要什么才能提出请求吗?

确保您可以卷曲 GetLanguages。以下对我有用。

curl -k --data "" "https://api.cognitive.microsoft.com/sts/v1.0/issueToken" -H "Ocp-Apim-Subscription-Key:<your Translation Text Key>" > Bearer.txt
set /p Bearer= < Bearer.txt
curl -H "Authorization: Bearer %Bearer%" "https://api.microsofttranslator.com/v1/http.svc/GetLanguageNames"
curl -H "Authorization: Bearer %Bearer%" "https://api.microsofttranslator.com/v2/http.svc/GetLanguagesForTranslate"
curl -H "Authorization: Bearer %Bearer%" "https://api.microsofttranslator.com/v2/Http.svc/Translate?Text=Hello%%20world.&From=en&To=es"