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

<p class="toc_element">
  <code><a href="translate_v3beta1.projects.locations.operations.html">operations()</a></code>
</p>
<p class="firstline">Returns the operations Resource.</p>

<p class="toc_element">
  <code><a href="#batchTranslateDocument">batchTranslateDocument(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Translates a large volume of document in asynchronous batch mode. This function provides real-time output as the inputs are being processed. If caller cancels a request, the partial results (for an input file, it's all or nothing) may still be available on the specified output location. This call returns immediately and you can use google.longrunning.Operation.name to poll the status of the call.</p>
<p class="toc_element">
  <code><a href="#batchTranslateText">batchTranslateText(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Translates a large volume of text in asynchronous batch mode. This function provides real-time output as the inputs are being processed. If caller cancels a request, the partial results (for an input file, it's all or nothing) may still be available on the specified output location. This call returns immediately and you can use google.longrunning.Operation.name to poll the status of the call.</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="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets information about a location.</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="#list">list(name, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists information about the supported locations for this service.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#translateDocument">translateDocument(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Translates documents in synchronous mode.</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="batchTranslateDocument">batchTranslateDocument(parent, body=None, x__xgafv=None)</code>
  <pre>Translates a large volume of document in asynchronous batch mode. This function provides real-time output as the inputs are being processed. If caller cancels a request, the partial results (for an input file, it&#x27;s all or nothing) may still be available on the specified output location. This call returns immediately and you can use google.longrunning.Operation.name to poll the status of the call.

Args:
  parent: string, Required. Location to make a regional call. Format: `projects/{project-number-or-id}/locations/{location-id}`. The `global` location is not supported for batch translation. Only AutoML Translation models or glossaries within the same region (have the 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 BatchTranslateDocument request.
  &quot;glossaries&quot;: { # Optional. Glossaries to be applied. It&#x27;s keyed by target language code.
    &quot;a_key&quot;: { # Configures which glossary should be used for a specific target language, and defines options for applying that glossary.
      &quot;glossary&quot;: &quot;A String&quot;, # Required. Specifies the glossary used for this translation. Use this format: projects/*/locations/*/glossaries/*
      &quot;ignoreCase&quot;: True or False, # Optional. Indicates match is case-insensitive. Default value is false if missing.
    },
  },
  &quot;inputConfigs&quot;: [ # Required. Input configurations. The total number of files matched should be &lt;= 100. The total content size to translate should be &lt;= 100M Unicode codepoints. The files must use UTF-8 encoding.
    { # Input configuration for BatchTranslateDocument request.
      &quot;gcsSource&quot;: { # The Google Cloud Storage location for the input content. # Google Cloud Storage location for the source input. This can be a single file (for example, `gs://translation-test/input.docx`) or a wildcard (for example, `gs://translation-test/*`). File mime type is determined based on extension. Supported mime type includes: - `pdf`, application/pdf - `docx`, application/vnd.openxmlformats-officedocument.wordprocessingml.document - `pptx`, application/vnd.openxmlformats-officedocument.presentationml.presentation - `xlsx`, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet The max file size to support for `.docx`, `.pptx` and `.xlsx` is 100MB. The max file size to support for `.pdf` is 1GB and the max page limit is 1000 pages. The max file size to support for all input documents is 1GB.
        &quot;inputUri&quot;: &quot;A String&quot;, # Required. Source data URI. For example, `gs://my_bucket/my_object`.
      },
    },
  ],
  &quot;models&quot;: { # Optional. The models to use for translation. Map&#x27;s key is target language code. Map&#x27;s value is the model name. Value can be a built-in general model, or an AutoML Translation model. The value 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`, If the map is empty or a specific model is not requested for a language pair, then default google model (nmt) is used.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;outputConfig&quot;: { # Output configuration for BatchTranslateDocument request. # Required. Output configuration. If 2 input configs match to the same file (that is, same input path), we don&#x27;t generate output for duplicate inputs.
    &quot;gcsDestination&quot;: { # The Google Cloud Storage location for the output content. # Google Cloud Storage destination for output content. For every single input document (for example, gs://a/b/c.[extension]), we generate at most 2 * n output files. (n is the # of target_language_codes in the BatchTranslateDocumentRequest). While the input documents are being processed, we write/update an index file `index.csv` under `gcs_destination.output_uri_prefix` (for example, gs://translation_output/index.csv) The index file is generated/updated as new files are being translated. The format is: input_document,target_language_code,translation_output,error_output, glossary_translation_output,glossary_error_output `input_document` is one file we matched using gcs_source.input_uri. `target_language_code` is provided in the request. `translation_output` contains the translations. (details provided below) `error_output` contains the error message during processing of the file. Both translations_file and errors_file could be empty strings if we have no content to output. `glossary_translation_output` and `glossary_error_output` are the translated output/error when we apply glossaries. They could also be empty if we have no content to output. Once a row is present in index.csv, the input/output matching never changes. Callers should also expect all the content in input_file are processed and ready to be consumed (that is, no partial output file is written). Since index.csv will be keeping updated during the process, please make sure there is no custom retention policy applied on the output bucket that may avoid file updating. (https://cloud.google.com/storage/docs/bucket-lock?hl=en#retention-policy) The naming format of translation output files follows (for target language code [trg]): `translation_output`: gs://translation_output/a_b_c_[trg]_translation.[extension] `glossary_translation_output`: gs://translation_test/a_b_c_[trg]_glossary_translation.[extension] The output document will maintain the same file format as the input document. The naming format of error output files follows (for target language code [trg]): `error_output`: gs://translation_test/a_b_c_[trg]_errors.txt `glossary_error_output`: gs://translation_test/a_b_c_[trg]_glossary_translation.txt The error output is a txt file containing error details.
      &quot;outputUriPrefix&quot;: &quot;A String&quot;, # Required. There must be no files under &#x27;output_uri_prefix&#x27;. &#x27;output_uri_prefix&#x27; must end with &quot;/&quot; and start with &quot;gs://&quot;, otherwise an INVALID_ARGUMENT (400) error is returned.
    },
  },
  &quot;sourceLanguageCode&quot;: &quot;A String&quot;, # Required. The BCP-47 language code of the input document if known, for example, &quot;en-US&quot; or &quot;sr-Latn&quot;. Supported language codes are listed in Language Support (https://cloud.google.com/translate/docs/languages).
  &quot;targetLanguageCodes&quot;: [ # Required. The BCP-47 language code to use for translation of the input document. Specify up to 10 language codes here.
    &quot;A String&quot;,
  ],
}

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

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
  &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
  &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
      {
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="batchTranslateText">batchTranslateText(parent, body=None, x__xgafv=None)</code>
  <pre>Translates a large volume of text in asynchronous batch mode. This function provides real-time output as the inputs are being processed. If caller cancels a request, the partial results (for an input file, it&#x27;s all or nothing) may still be available on the specified output location. This call returns immediately and you can use google.longrunning.Operation.name to poll the status of the call.

Args:
  parent: string, Required. Location to make a call. Must refer to a caller&#x27;s project. Format: `projects/{project-number-or-id}/locations/{location-id}`. The `global` location is not supported for batch translation. Only AutoML Translation models or glossaries within the same region (have the 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 batch translation request.
  &quot;glossaries&quot;: { # Optional. Glossaries to be applied for translation. It&#x27;s keyed by target language code.
    &quot;a_key&quot;: { # Configures which glossary should be used for a specific target language, and defines options for applying that glossary.
      &quot;glossary&quot;: &quot;A String&quot;, # Required. Specifies the glossary used for this translation. Use this format: projects/*/locations/*/glossaries/*
      &quot;ignoreCase&quot;: True or False, # Optional. Indicates match is case-insensitive. Default value is false if missing.
    },
  },
  &quot;inputConfigs&quot;: [ # Required. Input configurations. The total number of files matched should be &lt;= 100. The total content size should be &lt;= 100M Unicode codepoints. The files must use UTF-8 encoding.
    { # Input configuration for BatchTranslateText request.
      &quot;gcsSource&quot;: { # The Google Cloud Storage location for the input content. # Required. Google Cloud Storage location for the source input. This can be a single file (for example, `gs://translation-test/input.tsv`) or a wildcard (for example, `gs://translation-test/*`). If a file extension is `.tsv`, it can contain either one or two columns. The first column (optional) is the id of the text request. If the first column is missing, we use the row number (0-based) from the input file as the ID in the output file. The second column is the actual text to be translated. We recommend each row be &lt;= 10K Unicode codepoints, otherwise an error might be returned. Note that the input tsv must be RFC 4180 compliant. You could use https://github.com/Clever/csvlint to check potential formatting errors in your tsv file. csvlint --delimiter=&#x27;\t&#x27; your_input_file.tsv The other supported file extensions are `.txt` or `.html`, which is treated as a single large chunk of text.
        &quot;inputUri&quot;: &quot;A String&quot;, # Required. Source data URI. For example, `gs://my_bucket/my_object`.
      },
      &quot;mimeType&quot;: &quot;A String&quot;, # Optional. Can be &quot;text/plain&quot; or &quot;text/html&quot;. For `.tsv`, &quot;text/html&quot; is used if mime_type is missing. For `.html`, this field must be &quot;text/html&quot; or empty. For `.txt`, this field must be &quot;text/plain&quot; or empty.
    },
  ],
  &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/labels for more information.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;models&quot;: { # Optional. The models to use for translation. Map&#x27;s key is target language code. Map&#x27;s value is model name. Value can be a built-in general model, or an AutoML Translation model. The value 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`, If the map is empty or a specific model is not requested for a language pair, then default google model (nmt) is used.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;outputConfig&quot;: { # Output configuration for BatchTranslateText request. # Required. Output configuration. If 2 input configs match to the same file (that is, same input path), we don&#x27;t generate output for duplicate inputs.
    &quot;gcsDestination&quot;: { # The Google Cloud Storage location for the output content. # Google Cloud Storage destination for output content. For every single input file (for example, gs://a/b/c.[extension]), we generate at most 2 * n output files. (n is the # of target_language_codes in the BatchTranslateTextRequest). Output files (tsv) generated are compliant with RFC 4180 except that record delimiters are &#x27;\n&#x27; instead of &#x27;\r\n&#x27;. We don&#x27;t provide any way to change record delimiters. While the input files are being processed, we write/update an index file &#x27;index.csv&#x27; under &#x27;output_uri_prefix&#x27; (for example, gs://translation-test/index.csv) The index file is generated/updated as new files are being translated. The format is: input_file,target_language_code,translations_file,errors_file, glossary_translations_file,glossary_errors_file input_file is one file we matched using gcs_source.input_uri. target_language_code is provided in the request. translations_file contains the translations. (details provided below) errors_file contains the errors during processing of the file. (details below). Both translations_file and errors_file could be empty strings if we have no content to output. glossary_translations_file and glossary_errors_file are always empty strings if the input_file is tsv. They could also be empty if we have no content to output. Once a row is present in index.csv, the input/output matching never changes. Callers should also expect all the content in input_file are processed and ready to be consumed (that is, no partial output file is written). Since index.csv will be keeping updated during the process, please make sure there is no custom retention policy applied on the output bucket that may avoid file updating. (https://cloud.google.com/storage/docs/bucket-lock?hl=en#retention-policy) The format of translations_file (for target language code &#x27;trg&#x27;) is: gs://translation_test/a_b_c_&#x27;trg&#x27;_translations.[extension] If the input file extension is tsv, the output has the following columns: Column 1: ID of the request provided in the input, if it&#x27;s not provided in the input, then the input row number is used (0-based). Column 2: source sentence. Column 3: translation without applying a glossary. Empty string if there is an error. Column 4 (only present if a glossary is provided in the request): translation after applying the glossary. Empty string if there is an error applying the glossary. Could be same string as column 3 if there is no glossary applied. If input file extension is a txt or html, the translation is directly written to the output file. If glossary is requested, a separate glossary_translations_file has format of gs://translation_test/a_b_c_&#x27;trg&#x27;_glossary_translations.[extension] The format of errors file (for target language code &#x27;trg&#x27;) is: gs://translation_test/a_b_c_&#x27;trg&#x27;_errors.[extension] If the input file extension is tsv, errors_file contains the following: Column 1: ID of the request provided in the input, if it&#x27;s not provided in the input, then the input row number is used (0-based). Column 2: source sentence. Column 3: Error detail for the translation. Could be empty. Column 4 (only present if a glossary is provided in the request): Error when applying the glossary. If the input file extension is txt or html, glossary_error_file will be generated that contains error details. glossary_error_file has format of gs://translation_test/a_b_c_&#x27;trg&#x27;_glossary_errors.[extension]
      &quot;outputUriPrefix&quot;: &quot;A String&quot;, # Required. There must be no files under &#x27;output_uri_prefix&#x27;. &#x27;output_uri_prefix&#x27; must end with &quot;/&quot; and start with &quot;gs://&quot;, otherwise an INVALID_ARGUMENT (400) error is returned.
    },
  },
  &quot;sourceLanguageCode&quot;: &quot;A String&quot;, # Required. Source language code.
  &quot;targetLanguageCodes&quot;: [ # Required. Specify up to 10 language codes here.
    &quot;A String&quot;,
  ],
}

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

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
  &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
  &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
      {
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

<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/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;: [ # A list of detected languages sorted by detection confidence in descending order. The most probable language first.
    { # 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="get">get(name, x__xgafv=None)</code>
  <pre>Gets information about a location.

Args:
  name: string, Resource name for the location. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A resource that represents Google Cloud Platform location.
  &quot;displayName&quot;: &quot;A String&quot;, # The friendly name for this location, typically a nearby city name. For example, &quot;Tokyo&quot;.
  &quot;labels&quot;: { # Cross-service attributes for the location. For example {&quot;cloud.googleapis.com/region&quot;: &quot;us-east1&quot;}
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;locationId&quot;: &quot;A String&quot;, # The canonical id for this location. For example: `&quot;us-east1&quot;`.
  &quot;metadata&quot;: { # Service-specific metadata. For example the available capacity at the given location.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # Resource name for the location, which may vary between implementations. For example: `&quot;projects/example-project/locations/us-east1&quot;`
}</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="list">list(name, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists information about the supported locations for this service.

Args:
  name: string, The resource that owns the locations collection, if applicable. (required)
  filter: string, A filter to narrow down results to a preferred subset. The filtering language accepts strings like &quot;displayName=tokyo&quot;, and is documented in more detail in [AIP-160](https://google.aip.dev/160).
  pageSize: integer, The maximum number of results to return. If not set, the service selects a default.
  pageToken: string, A page token received from the `next_page_token` field in the response. Send that page token to receive the subsequent page.
  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 Locations.ListLocations.
  &quot;locations&quot;: [ # A list of locations that matches the specified filter in the request.
    { # A resource that represents Google Cloud Platform location.
      &quot;displayName&quot;: &quot;A String&quot;, # The friendly name for this location, typically a nearby city name. For example, &quot;Tokyo&quot;.
      &quot;labels&quot;: { # Cross-service attributes for the location. For example {&quot;cloud.googleapis.com/region&quot;: &quot;us-east1&quot;}
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;locationId&quot;: &quot;A String&quot;, # The canonical id for this location. For example: `&quot;us-east1&quot;`.
      &quot;metadata&quot;: { # Service-specific metadata. For example the available capacity at the given location.
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
      &quot;name&quot;: &quot;A String&quot;, # Resource name for the location, which may vary between implementations. For example: `&quot;projects/example-project/locations/us-east1&quot;`
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # The standard List next-page token.
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="translateDocument">translateDocument(parent, body=None, x__xgafv=None)</code>
  <pre>Translates documents in synchronous mode.

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

{ # A document translation request.
  &quot;documentInputConfig&quot;: { # A document translation request input config. # Required. Input configurations.
    &quot;content&quot;: &quot;A String&quot;, # Document&#x27;s content represented as a stream of bytes.
    &quot;gcsSource&quot;: { # The Google Cloud Storage location for the input content. # Google Cloud Storage location. This must be a single file. For example: gs://example_bucket/example_file.pdf
      &quot;inputUri&quot;: &quot;A String&quot;, # Required. Source data URI. For example, `gs://my_bucket/my_object`.
    },
    &quot;mimeType&quot;: &quot;A String&quot;, # Specifies the input document&#x27;s mime_type. If not specified it will be determined using the file extension for gcs_source provided files. For a file provided through bytes content the mime_type must be provided. Currently supported mime types are: - application/pdf - application/vnd.openxmlformats-officedocument.wordprocessingml.document - application/vnd.openxmlformats-officedocument.presentationml.presentation - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
  },
  &quot;documentOutputConfig&quot;: { # A document translation request output config. # Optional. Output configurations. Defines if the output file should be stored within Cloud Storage as well as the desired output format. If not provided the translated file will only be returned through a byte-stream and its output mime type will be the same as the input file&#x27;s mime type.
    &quot;gcsDestination&quot;: { # The Google Cloud Storage location for the output content. # Optional. Google Cloud Storage destination for the translation output, e.g., `gs://my_bucket/my_directory/`. The destination directory provided does not have to be empty, but the bucket must exist. If a file with the same name as the output file already exists in the destination an error will be returned. For a DocumentInputConfig.contents provided document, the output file will have the name &quot;output_[trg]_translations.[ext]&quot;, where - [trg] corresponds to the translated file&#x27;s language code, - [ext] corresponds to the translated file&#x27;s extension according to its mime type. For a DocumentInputConfig.gcs_uri provided document, the output file will have a name according to its URI. For example: an input file with URI: &quot;gs://a/b/c.[extension]&quot; stored in a gcs_destination bucket with name &quot;my_bucket&quot; will have an output URI: &quot;gs://my_bucket/a_b_c_[trg]_translations.[ext]&quot;, where - [trg] corresponds to the translated file&#x27;s language code, - [ext] corresponds to the translated file&#x27;s extension according to its mime type. If the document was directly provided through the request, then the output document will have the format: &quot;gs://my_bucket/translated_document_[trg]_translations.[ext], where - [trg] corresponds to the translated file&#x27;s language code, - [ext] corresponds to the translated file&#x27;s extension according to its mime type. If a glossary was provided, then the output URI for the glossary translation will be equal to the default output URI but have `glossary_translations` instead of `translations`. For the previous example, its glossary URI would be: &quot;gs://my_bucket/a_b_c_[trg]_glossary_translations.[ext]&quot;. Thus the max number of output files will be 2 (Translated document, Glossary translated document). Callers should expect no partial outputs. If there is any error during document translation, no output will be stored in the Cloud Storage bucket.
      &quot;outputUriPrefix&quot;: &quot;A String&quot;, # Required. There must be no files under &#x27;output_uri_prefix&#x27;. &#x27;output_uri_prefix&#x27; must end with &quot;/&quot; and start with &quot;gs://&quot;, otherwise an INVALID_ARGUMENT (400) error is returned.
    },
    &quot;mimeType&quot;: &quot;A String&quot;, # Optional. Specifies the translated document&#x27;s mime_type. If not specified, the translated file&#x27;s mime type will be the same as the input file&#x27;s mime type. Currently only support the output mime type to be the same as input mime type. - application/pdf - application/vnd.openxmlformats-officedocument.wordprocessingml.document - application/vnd.openxmlformats-officedocument.presentationml.presentation - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
  },
  &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. Specifies the glossary used for this translation. Use this format: projects/*/locations/*/glossaries/*
    &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;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`, If not provided, the default Google model (NMT) will be used for translation.
  &quot;sourceLanguageCode&quot;: &quot;A String&quot;, # Optional. The BCP-47 language code of the input document 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. Source language must be specified if the request contains a glossary or a custom model.
  &quot;targetLanguageCode&quot;: &quot;A String&quot;, # Required. The BCP-47 language code to use for translation of the input document, 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:

    { # A translated document response message.
  &quot;documentTranslation&quot;: { # A translated document message. # Translated document.
    &quot;byteStreamOutputs&quot;: [ # The array of translated documents. It is expected to be size 1 for now. We may produce multiple translated documents in the future for other type of file formats.
      &quot;A String&quot;,
    ],
    &quot;detectedLanguageCode&quot;: &quot;A String&quot;, # The detected language for the input document. If the user did not provide the source language for the input document, this field will have the language code automatically detected. If the source language was passed, auto-detection of the language does not occur and this field is empty.
    &quot;mimeType&quot;: &quot;A String&quot;, # The translated document&#x27;s mime type.
  },
  &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. Specifies the glossary used for this translation. Use this format: projects/*/locations/*/glossaries/*
    &quot;ignoreCase&quot;: True or False, # Optional. Indicates match is case-insensitive. Default value is false if missing.
  },
  &quot;glossaryDocumentTranslation&quot;: { # A translated document message. # The document&#x27;s translation output if a glossary is provided in the request. This can be the same as [TranslateDocumentResponse.document_translation] if no glossary terms apply.
    &quot;byteStreamOutputs&quot;: [ # The array of translated documents. It is expected to be size 1 for now. We may produce multiple translated documents in the future for other type of file formats.
      &quot;A String&quot;,
    ],
    &quot;detectedLanguageCode&quot;: &quot;A String&quot;, # The detected language for the input document. If the user did not provide the source language for the input document, this field will have the language code automatically detected. If the source language was passed, auto-detection of the language does not occur and this field is empty.
    &quot;mimeType&quot;: &quot;A String&quot;, # The translated document&#x27;s mime type.
  },
  &quot;model&quot;: &quot;A String&quot;, # Only present when &#x27;model&#x27; is present in the request. &#x27;model&#x27; is normalized to have a project number. For example: If the &#x27;model&#x27; field in TranslateDocumentRequest 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`.
}</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. Specifies the glossary used for this translation. Use this format: projects/*/locations/*/glossaries/*
    &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/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. Specifies the glossary used for this translation. Use this format: projects/*/locations/*/glossaries/*
        &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. Specifies the glossary used for this translation. Use this format: projects/*/locations/*/glossaries/*
        &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>