<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_v3.html">Cloud Translation API</a> . <a href="translate_v3.projects.html">projects</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="translate_v3.projects.locations.html">locations()</a></code>
</p>
<p class="firstline">Returns the locations Resource.</p>

<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#detectLanguage">detectLanguage(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Detects the language of text within a request.</p>
<p class="toc_element">
  <code><a href="#getSupportedLanguages">getSupportedLanguages(parent, displayLanguageCode=None, model=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns a list of supported languages for translation.</p>
<p class="toc_element">
  <code><a href="#translateText">translateText(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Translates input text and returns translated text.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="detectLanguage">detectLanguage(parent, body=None, x__xgafv=None)</code>
  <pre>Detects the language of text within a request.

Args:
  parent: string, Required. Project or location to make a call. Must refer to a caller&#x27;s project. Format: `projects/{project-number-or-id}/locations/{location-id}` or `projects/{project-number-or-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Only models within the same region (has same location-id) can be used. Otherwise an INVALID_ARGUMENT (400) error is returned. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request message for language detection.
  &quot;content&quot;: &quot;A String&quot;, # The content of the input stored as a string.
  &quot;labels&quot;: { # Optional. The labels with user-defined metadata for the request. Label keys and values can be no longer than 63 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. Label values are optional. Label keys must start with a letter. See https://cloud.google.com/translate/docs/advanced/labels for more information.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;mimeType&quot;: &quot;A String&quot;, # Optional. The format of the source text, for example, &quot;text/html&quot;, &quot;text/plain&quot;. If left blank, the MIME type defaults to &quot;text/html&quot;.
  &quot;model&quot;: &quot;A String&quot;, # Optional. The language detection model to be used. Format: `projects/{project-number-or-id}/locations/{location-id}/models/language-detection/{model-id}` Only one language detection model is currently supported: `projects/{project-number-or-id}/locations/{location-id}/models/language-detection/default`. If not specified, the default model is used.
}

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

Returns:
  An object of the form:

    { # The response message for language detection.
  &quot;languages&quot;: [ # The most probable language detected by the Translation API. For each request, the Translation API will always return only one result.
    { # The response message for language detection.
      &quot;confidence&quot;: 3.14, # The confidence of the detection result for this language.
      &quot;languageCode&quot;: &quot;A String&quot;, # The BCP-47 language code of source content in the request, detected automatically.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="getSupportedLanguages">getSupportedLanguages(parent, displayLanguageCode=None, model=None, x__xgafv=None)</code>
  <pre>Returns a list of supported languages for translation.

Args:
  parent: string, Required. Project or location to make a call. Must refer to a caller&#x27;s project. Format: `projects/{project-number-or-id}` or `projects/{project-number-or-id}/locations/{location-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Non-global location is required for AutoML models. Only models within the same region (have same location-id) can be used, otherwise an INVALID_ARGUMENT (400) error is returned. (required)
  displayLanguageCode: string, Optional. The language to use to return localized, human readable names of supported languages. If missing, then display names are not returned in a response.
  model: string, Optional. Get supported languages of this model. The format depends on model type: - AutoML Translation models: `projects/{project-number-or-id}/locations/{location-id}/models/{model-id}` - General (built-in) models: `projects/{project-number-or-id}/locations/{location-id}/models/general/nmt`, Returns languages supported by the specified model. If missing, we get supported languages of Google general NMT model.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response message for discovering supported languages.
  &quot;languages&quot;: [ # A list of supported language responses. This list contains an entry for each language the Translation API supports.
    { # A single supported language response corresponds to information related to one supported language.
      &quot;displayName&quot;: &quot;A String&quot;, # Human readable name of the language localized in the display language specified in the request.
      &quot;languageCode&quot;: &quot;A String&quot;, # Supported language code, generally consisting of its ISO 639-1 identifier, for example, &#x27;en&#x27;, &#x27;ja&#x27;. In certain cases, BCP-47 codes including language and region identifiers are returned (for example, &#x27;zh-TW&#x27; and &#x27;zh-CN&#x27;)
      &quot;supportSource&quot;: True or False, # Can be used as source language.
      &quot;supportTarget&quot;: True or False, # Can be used as target language.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="translateText">translateText(parent, body=None, x__xgafv=None)</code>
  <pre>Translates input text and returns translated text.

Args:
  parent: string, Required. Project or location to make a call. Must refer to a caller&#x27;s project. Format: `projects/{project-number-or-id}` or `projects/{project-number-or-id}/locations/{location-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Non-global location is required for requests using AutoML models or custom glossaries. Models and glossaries must be within the same region (have same location-id), otherwise an INVALID_ARGUMENT (400) error is returned. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request message for synchronous translation.
  &quot;contents&quot;: [ # Required. The content of the input in string format. We recommend the total content be less than 30k codepoints. The max length of this field is 1024. Use BatchTranslateText for larger text.
    &quot;A String&quot;,
  ],
  &quot;glossaryConfig&quot;: { # Configures which glossary should be used for a specific target language, and defines options for applying that glossary. # Optional. Glossary to be applied. The glossary must be within the same region (have the same location-id) as the model, otherwise an INVALID_ARGUMENT (400) error is returned.
    &quot;glossary&quot;: &quot;A String&quot;, # Required. The `glossary` to be applied for this translation. The format depends on glossary: - User provided custom glossary: `projects/{project-number-or-id}/locations/{location-id}/glossaries/{glossary-id}`
    &quot;ignoreCase&quot;: True or False, # Optional. Indicates match is case-insensitive. Default value is false if missing.
  },
  &quot;labels&quot;: { # Optional. The labels with user-defined metadata for the request. Label keys and values can be no longer than 63 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. Label values are optional. Label keys must start with a letter. See https://cloud.google.com/translate/docs/advanced/labels for more information.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;mimeType&quot;: &quot;A String&quot;, # Optional. The format of the source text, for example, &quot;text/html&quot;, &quot;text/plain&quot;. If left blank, the MIME type defaults to &quot;text/html&quot;.
  &quot;model&quot;: &quot;A String&quot;, # Optional. The `model` type requested for this translation. The format depends on model type: - AutoML Translation models: `projects/{project-number-or-id}/locations/{location-id}/models/{model-id}` - General (built-in) models: `projects/{project-number-or-id}/locations/{location-id}/models/general/nmt`, For global (non-regionalized) requests, use `location-id` `global`. For example, `projects/{project-number-or-id}/locations/global/models/general/nmt`. If not provided, the default Google model (NMT) will be used
  &quot;sourceLanguageCode&quot;: &quot;A String&quot;, # Optional. The BCP-47 language code of the input text if known, for example, &quot;en-US&quot; or &quot;sr-Latn&quot;. Supported language codes are listed in Language Support. If the source language isn&#x27;t specified, the API attempts to identify the source language automatically and returns the source language within the response.
  &quot;targetLanguageCode&quot;: &quot;A String&quot;, # Required. The BCP-47 language code to use for translation of the input text, set to one of the language codes listed in Language Support.
}

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

Returns:
  An object of the form:

    {
  &quot;glossaryTranslations&quot;: [ # Text translation responses if a glossary is provided in the request. This can be the same as `translations` if no terms apply. This field has the same length as `contents`.
    { # A single translation response.
      &quot;detectedLanguageCode&quot;: &quot;A String&quot;, # The BCP-47 language code of source text in 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 does not occur and this field is empty.
      &quot;glossaryConfig&quot;: { # Configures which glossary should be used for a specific target language, and defines options for applying that glossary. # The `glossary_config` used for this translation.
        &quot;glossary&quot;: &quot;A String&quot;, # Required. The `glossary` to be applied for this translation. The format depends on glossary: - User provided custom glossary: `projects/{project-number-or-id}/locations/{location-id}/glossaries/{glossary-id}`
        &quot;ignoreCase&quot;: True or False, # Optional. Indicates match is case-insensitive. Default value is false if missing.
      },
      &quot;model&quot;: &quot;A String&quot;, # Only present when `model` is present in the request. `model` here is normalized to have project number. For example: If the `model` requested in TranslationTextRequest is `projects/{project-id}/locations/{location-id}/models/general/nmt` then `model` here would be normalized to `projects/{project-number}/locations/{location-id}/models/general/nmt`.
      &quot;translatedText&quot;: &quot;A String&quot;, # Text translated into the target language. If an error occurs during translation, this field might be excluded from the response.
    },
  ],
  &quot;translations&quot;: [ # Text translation responses with no glossary applied. This field has the same length as `contents`.
    { # A single translation response.
      &quot;detectedLanguageCode&quot;: &quot;A String&quot;, # The BCP-47 language code of source text in 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 does not occur and this field is empty.
      &quot;glossaryConfig&quot;: { # Configures which glossary should be used for a specific target language, and defines options for applying that glossary. # The `glossary_config` used for this translation.
        &quot;glossary&quot;: &quot;A String&quot;, # Required. The `glossary` to be applied for this translation. The format depends on glossary: - User provided custom glossary: `projects/{project-number-or-id}/locations/{location-id}/glossaries/{glossary-id}`
        &quot;ignoreCase&quot;: True or False, # Optional. Indicates match is case-insensitive. Default value is false if missing.
      },
      &quot;model&quot;: &quot;A String&quot;, # Only present when `model` is present in the request. `model` here is normalized to have project number. For example: If the `model` requested in TranslationTextRequest is `projects/{project-id}/locations/{location-id}/models/general/nmt` then `model` here would be normalized to `projects/{project-number}/locations/{location-id}/models/general/nmt`.
      &quot;translatedText&quot;: &quot;A String&quot;, # Text translated into the target language. If an error occurs during translation, this field might be excluded from the response.
    },
  ],
}</pre>
</div>

</body></html>