<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> . <a href="translate_v3.projects.locations.html">locations</a> . <a href="translate_v3.projects.locations.glossaries.html">glossaries</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a glossary and returns the long-running operation. Returns</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a glossary, or cancels glossary construction</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a glossary. Returns NOT_FOUND, if the glossary doesn't</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, filter=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists glossaries in a project. Returns NOT_FOUND, if the project doesn't</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>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent, body=None, x__xgafv=None)</code>
  <pre>Creates a glossary and returns the long-running operation. Returns
NOT_FOUND, if the project doesn&#x27;t exist.

Args:
  parent: string, Required. The project name. (required)
  body: object, The request body.
    The object takes the form of:

{ # Represents a glossary built from user provided data.
    &quot;endTime&quot;: &quot;A String&quot;, # Output only. When the glossary creation was finished.
    &quot;name&quot;: &quot;A String&quot;, # Required. The resource name of the glossary. Glossary names have the form
        # `projects/{project-number-or-id}/locations/{location-id}/glossaries/{glossary-id}`.
    &quot;languageCodesSet&quot;: { # Used with equivalent term set glossaries. # Used with equivalent term set glossaries.
      &quot;languageCodes&quot;: [ # The BCP-47 language code(s) for terms defined in the glossary.
          # All entries are unique. The list contains at least two entries.
          # Expected to be an exact match for GlossaryTerm.language_code.
        &quot;A String&quot;,
      ],
    },
    &quot;submitTime&quot;: &quot;A String&quot;, # Output only. When CreateGlossary was called.
    &quot;languagePair&quot;: { # Used with unidirectional glossaries. # Used with unidirectional glossaries.
      &quot;sourceLanguageCode&quot;: &quot;A String&quot;, # Required. The BCP-47 language code of the input text, for example,
          # &quot;en-US&quot;. Expected to be an exact match for GlossaryTerm.language_code.
      &quot;targetLanguageCode&quot;: &quot;A String&quot;, # Required. The BCP-47 language code for translation output, for example,
          # &quot;zh-CN&quot;. Expected to be an exact match for GlossaryTerm.language_code.
    },
    &quot;inputConfig&quot;: { # Input configuration for glossaries. # Required. Provides examples to build the glossary from.
        # Total glossary must not exceed 10M Unicode codepoints.
      &quot;gcsSource&quot;: { # The Google Cloud Storage location for the input content. # Required. Google Cloud Storage location of glossary data.
          # File format is determined based on the filename extension. API returns
          # [google.rpc.Code.INVALID_ARGUMENT] for unsupported URI-s and file
          # formats. Wildcards are not allowed. This must be a single file in one of
          # the following formats:
          #
          # For unidirectional glossaries:
          #
          # - TSV/CSV (`.tsv`/`.csv`): 2 column file, tab- or comma-separated.
          #   The first column is source text. The second column is target text.
          #   The file must not contain headers. That is, the first row is data, not
          #   column names.
          #
          # - TMX (`.tmx`): TMX file with parallel data defining source/target term
          # pairs.
          #
          # For equivalent term sets glossaries:
          #
          # - CSV (`.csv`): Multi-column CSV file defining equivalent glossary terms
          #   in multiple languages. See documentation for more information -
          #   [glossaries](https://cloud.google.com/translate/docs/advanced/glossary).
        &quot;inputUri&quot;: &quot;A String&quot;, # Required. Source data URI. For example, `gs://my_bucket/my_object`.
      },
    },
    &quot;entryCount&quot;: 42, # Output only. The number of entries defined in the glossary.
  }

  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;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;error&quot;: { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # 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).
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &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;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;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;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;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="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a glossary, or cancels glossary construction
if the glossary isn&#x27;t created yet.
Returns NOT_FOUND, if the glossary doesn&#x27;t exist.

Args:
  name: string, Required. The name of the glossary to delete. (required)
  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;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;error&quot;: { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # 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).
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &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;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;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;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;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="get">get(name, x__xgafv=None)</code>
  <pre>Gets a glossary. Returns NOT_FOUND, if the glossary doesn&#x27;t
exist.

Args:
  name: string, Required. The name of the glossary to retrieve. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents a glossary built from user provided data.
      &quot;endTime&quot;: &quot;A String&quot;, # Output only. When the glossary creation was finished.
      &quot;name&quot;: &quot;A String&quot;, # Required. The resource name of the glossary. Glossary names have the form
          # `projects/{project-number-or-id}/locations/{location-id}/glossaries/{glossary-id}`.
      &quot;languageCodesSet&quot;: { # Used with equivalent term set glossaries. # Used with equivalent term set glossaries.
        &quot;languageCodes&quot;: [ # The BCP-47 language code(s) for terms defined in the glossary.
            # All entries are unique. The list contains at least two entries.
            # Expected to be an exact match for GlossaryTerm.language_code.
          &quot;A String&quot;,
        ],
      },
      &quot;submitTime&quot;: &quot;A String&quot;, # Output only. When CreateGlossary was called.
      &quot;languagePair&quot;: { # Used with unidirectional glossaries. # Used with unidirectional glossaries.
        &quot;sourceLanguageCode&quot;: &quot;A String&quot;, # Required. The BCP-47 language code of the input text, for example,
            # &quot;en-US&quot;. Expected to be an exact match for GlossaryTerm.language_code.
        &quot;targetLanguageCode&quot;: &quot;A String&quot;, # Required. The BCP-47 language code for translation output, for example,
            # &quot;zh-CN&quot;. Expected to be an exact match for GlossaryTerm.language_code.
      },
      &quot;inputConfig&quot;: { # Input configuration for glossaries. # Required. Provides examples to build the glossary from.
          # Total glossary must not exceed 10M Unicode codepoints.
        &quot;gcsSource&quot;: { # The Google Cloud Storage location for the input content. # Required. Google Cloud Storage location of glossary data.
            # File format is determined based on the filename extension. API returns
            # [google.rpc.Code.INVALID_ARGUMENT] for unsupported URI-s and file
            # formats. Wildcards are not allowed. This must be a single file in one of
            # the following formats:
            #
            # For unidirectional glossaries:
            #
            # - TSV/CSV (`.tsv`/`.csv`): 2 column file, tab- or comma-separated.
            #   The first column is source text. The second column is target text.
            #   The file must not contain headers. That is, the first row is data, not
            #   column names.
            #
            # - TMX (`.tmx`): TMX file with parallel data defining source/target term
            # pairs.
            #
            # For equivalent term sets glossaries:
            #
            # - CSV (`.csv`): Multi-column CSV file defining equivalent glossary terms
            #   in multiple languages. See documentation for more information -
            #   [glossaries](https://cloud.google.com/translate/docs/advanced/glossary).
          &quot;inputUri&quot;: &quot;A String&quot;, # Required. Source data URI. For example, `gs://my_bucket/my_object`.
        },
      },
      &quot;entryCount&quot;: 42, # Output only. The number of entries defined in the glossary.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, filter=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists glossaries in a project. Returns NOT_FOUND, if the project doesn&#x27;t
exist.

Args:
  parent: string, Required. The name of the project from which to list all of the glossaries. (required)
  pageSize: integer, Optional. Requested page size. The server may return fewer glossaries than
requested. If unspecified, the server picks an appropriate default.
  filter: string, Optional. Filter specifying constraints of a list operation.
Filtering is not supported yet, and the parameter currently has no effect.
If missing, no filtering is performed.
  pageToken: string, Optional. A token identifying a page of results the server should return.
Typically, this is the value of [ListGlossariesResponse.next_page_token]
returned from the previous call to `ListGlossaries` method.
The first page is returned if `page_token`is empty or missing.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for ListGlossaries.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # A token to retrieve a page of results. Pass this value in the
        # [ListGlossariesRequest.page_token] field in the subsequent call to
        # `ListGlossaries` method to retrieve the next page of results.
    &quot;glossaries&quot;: [ # The list of glossaries for a project.
      { # Represents a glossary built from user provided data.
          &quot;endTime&quot;: &quot;A String&quot;, # Output only. When the glossary creation was finished.
          &quot;name&quot;: &quot;A String&quot;, # Required. The resource name of the glossary. Glossary names have the form
              # `projects/{project-number-or-id}/locations/{location-id}/glossaries/{glossary-id}`.
          &quot;languageCodesSet&quot;: { # Used with equivalent term set glossaries. # Used with equivalent term set glossaries.
            &quot;languageCodes&quot;: [ # The BCP-47 language code(s) for terms defined in the glossary.
                # All entries are unique. The list contains at least two entries.
                # Expected to be an exact match for GlossaryTerm.language_code.
              &quot;A String&quot;,
            ],
          },
          &quot;submitTime&quot;: &quot;A String&quot;, # Output only. When CreateGlossary was called.
          &quot;languagePair&quot;: { # Used with unidirectional glossaries. # Used with unidirectional glossaries.
            &quot;sourceLanguageCode&quot;: &quot;A String&quot;, # Required. The BCP-47 language code of the input text, for example,
                # &quot;en-US&quot;. Expected to be an exact match for GlossaryTerm.language_code.
            &quot;targetLanguageCode&quot;: &quot;A String&quot;, # Required. The BCP-47 language code for translation output, for example,
                # &quot;zh-CN&quot;. Expected to be an exact match for GlossaryTerm.language_code.
          },
          &quot;inputConfig&quot;: { # Input configuration for glossaries. # Required. Provides examples to build the glossary from.
              # Total glossary must not exceed 10M Unicode codepoints.
            &quot;gcsSource&quot;: { # The Google Cloud Storage location for the input content. # Required. Google Cloud Storage location of glossary data.
                # File format is determined based on the filename extension. API returns
                # [google.rpc.Code.INVALID_ARGUMENT] for unsupported URI-s and file
                # formats. Wildcards are not allowed. This must be a single file in one of
                # the following formats:
                #
                # For unidirectional glossaries:
                #
                # - TSV/CSV (`.tsv`/`.csv`): 2 column file, tab- or comma-separated.
                #   The first column is source text. The second column is target text.
                #   The file must not contain headers. That is, the first row is data, not
                #   column names.
                #
                # - TMX (`.tmx`): TMX file with parallel data defining source/target term
                # pairs.
                #
                # For equivalent term sets glossaries:
                #
                # - CSV (`.csv`): Multi-column CSV file defining equivalent glossary terms
                #   in multiple languages. See documentation for more information -
                #   [glossaries](https://cloud.google.com/translate/docs/advanced/glossary).
              &quot;inputUri&quot;: &quot;A String&quot;, # Required. Source data URI. For example, `gs://my_bucket/my_object`.
            },
          },
          &quot;entryCount&quot;: 42, # Output only. The number of entries defined in the glossary.
        },
    ],
  }</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>

</body></html>