<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="translate_v2.html">Google Cloud Translation API</a> . <a href="translate_v2.translations.html">translations</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#list">list(q, target, x__xgafv=None, source=None, format=None, cid=None, model=None)</a></code></p>
<p class="firstline">Translates input text, returning translated text.</p>
<p class="toc_element">
  <code><a href="#translate">translate(body, x__xgafv=None)</a></code></p>
<p class="firstline">Translates input text, returning translated text.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="list">list(q, target, x__xgafv=None, source=None, format=None, cid=None, model=None)</code>
  <pre>Translates input text, returning translated text.

Args:
  q: string, The input text to translate. Repeat this parameter to perform translation
operations on multiple text inputs. (required) (repeated)
  target: string, The language to use for translation of the input text, set to one of the
language codes listed in Language Support. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  source: string, The language of the source text, set to one of the language codes listed in
Language Support. If the source language is not specified, the API will
attempt to identify the source language automatically and return it within
the response.
  format: string, The format of the source text, in either HTML (default) or plain-text. A
value of "html" indicates HTML and a value of "text" indicates plain-text.
    Allowed values
      html - Specifies the input is in HTML
      text - Specifies the input is in plain textual format
  cid: string, The customization id for translate (repeated)
  model: string, The `model` type requested for this translation. Valid values are
listed in public documentation.

Returns:
  An object of the form:

    { # The main language translation response message.
    "translations": [ # Translations contains list of translation results of given text
      {
        "translatedText": "A String", # Text translated into the target language.
        "model": "A String", # The `model` type used for this translation. Valid values are
            # listed in public documentation. Can be different from requested `model`.
            # Present only if specific model type was explicitly requested.
        "detectedSourceLanguage": "A String", # The source language of the initial request, detected automatically, if
            # no source language was passed within the initial request. If the
            # source language was passed, auto-detection of the language will not
            # occur and this field will be empty.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="translate">translate(body, x__xgafv=None)</code>
  <pre>Translates input text, returning translated text.

Args:
  body: object, The request body. (required)
    The object takes the form of:

{ # The main translation request message for the Cloud Translation API.
    "q": [ # The input text to translate. Repeat this parameter to perform translation
        # operations on multiple text inputs.
      "A String",
    ],
    "source": "A String", # The language of the source text, set to one of the language codes listed in
        # Language Support. If the source language is not specified, the API will
        # attempt to identify the source language automatically and return it within
        # the response.
    "model": "A String", # The `model` type requested for this translation. Valid values are
        # listed in public documentation.
    "target": "A String", # The language to use for translation of the input text, set to one of the
        # language codes listed in Language Support.
    "format": "A String", # The format of the source text, in either HTML (default) or plain-text. A
        # value of "html" indicates HTML and a value of "text" indicates plain-text.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The main language translation response message.
    "translations": [ # Translations contains list of translation results of given text
      {
        "translatedText": "A String", # Text translated into the target language.
        "model": "A String", # The `model` type used for this translation. Valid values are
            # listed in public documentation. Can be different from requested `model`.
            # Present only if specific model type was explicitly requested.
        "detectedSourceLanguage": "A String", # The source language of the initial request, detected automatically, if
            # no source language was passed within the initial request. If the
            # source language was passed, auto-detection of the language will not
            # occur and this field will be empty.
      },
    ],
  }</pre>
</div>

</body></html>