Google.Cloud.Translation.V2

Google.Cloud.Translation.V2 is a.NET client library for the Google Cloud Translation API. It wraps the Google.Apis.Translate.v2 generated library, providing a higher-level API to make it easier to use.

Note: This documentation is for version 3.2.0-beta01 of the library. Some samples may not work with other versions.

Installation

Install the Google.Cloud.Translation.V2 package from NuGet. Add it to your project in the normal way (for example by right-clicking on the project in Visual Studio and choosing "Manage NuGet Packages..."). Please ensure you enable pre-release packages (for example, in the Visual Studio NuGet user interface, check the "Include prerelease" box). Some of the following samples might only work with the latest pre-release version (3.2.0-beta01) of Google.Cloud.Translation.V2.

Authentication

When running on Google Cloud Platform, no action needs to be taken to authenticate.

Otherwise, the simplest way of authenticating your API calls is to download a service account JSON file then set the GOOGLE_APPLICATION_CREDENTIALS environment variable to refer to it. The credentials will automatically be used to authenticate. See the Getting Started With Authentication guide for more details.

Alternatively, you can create a client using an API key. This is primarily supported to enable smooth migration from earlier client libraries; using OAuth2 as above is the preferred authentication mechanism.

Getting started

Common operations are exposed via the TranslationClient and AdvancedTranslationClient classes.

Client life-cycle management

In many cases you don't need to worry about disposing of TranslationClient and AdvancedTranslationClient objects, and can create them reasonably freely - but be aware that this can causes issues with memory and network connection usage. We advise you to reuse a single client object if possible; if your architecture requires you to frequently create new client objects, please dispose of them to help with timely resource clean-up. See the resource clean-up guide for more details.

Sample code

Translating a single item of text

TranslationClient client = TranslationClient.Create();
TranslationResult result = client.TranslateText("It is raining.", LanguageCodes.French);
Console.WriteLine($"Result: {result.TranslatedText}; detected language {result.DetectedSourceLanguage}");

Translating a single item of HTML

TranslationClient client = TranslationClient.Create();
TranslationResult result = client.TranslateHtml("<p><strong>It is raining.</strong></p>", LanguageCodes.French);
Console.WriteLine($"Result: {result.TranslatedText}; detected language {result.DetectedSourceLanguage}");

Translating multiple items of text

TranslationClient client = TranslationClient.Create();
IList<TranslationResult> results = client.TranslateText(
    new[] { "It is raining.", "It is sunny." },
    LanguageCodes.French);
foreach (TranslationResult result in results)
{
    Console.WriteLine($"Result: {result.TranslatedText}; detected language {result.DetectedSourceLanguage}");
}

Translating multiple items of HTML

TranslationClient client = TranslationClient.Create();
IList<TranslationResult> results = client.TranslateHtml(
    new[] { "<p><strong>It is raining.</strong></p>", "<p><strong>It is sunny.</strong></p>" },
    LanguageCodes.French);
foreach (TranslationResult result in results)
{
    Console.WriteLine($"Result: {result.TranslatedText}; detected language {result.DetectedSourceLanguage}");
}

Specifying a translation model

The Translation API is implemented by multiple underlying models. At the time of writing, one model is available in addition to "base": Neural Machine Translation (NMT). If you don't explicitly specify a model to use, the service will pick one.

See the API release notes for on-going changes and new models.

Both client classes allow models to be specified, but in different ways. In each case, the model can be specified when creating the client, or on a per-request basis. The difference is that TranslationClient uses the TranslationModel enum, making it simple to specify commonly-used models, whereas AdvancedTranslationClient just uses strings for the models.

For example, using a TranslationClient-wide model:

TranslationClient client = TranslationClient.Create(model: TranslationModel.Base);
TranslationResult result = client.TranslateText("It is raining.", LanguageCodes.French);
Console.WriteLine($"Result: {result.TranslatedText}; detected language {result.DetectedSourceLanguage}");

TranslationClient specifying a model for a single operation:

TranslationClient client = TranslationClient.Create();
TranslationResult result = client.TranslateText("It is raining.", LanguageCodes.French,
    model: TranslationModel.Base);
Console.WriteLine($"Result: {result.TranslatedText}; detected language {result.DetectedSourceLanguage}");

Using an AdvancedTranslationClient-wide model:

AdvancedTranslationClient client = AdvancedTranslationClient.Create(model: "base");
TranslationResult result = client.TranslateText("It is raining.", LanguageCodes.French);
Console.WriteLine($"Result: {result.TranslatedText}; detected language {result.DetectedSourceLanguage}");

AdvancedTranslationClient specifying a model for a single operation:

AdvancedTranslationClient client = AdvancedTranslationClient.Create();
TranslationResult result = client.TranslateText("It is raining.", LanguageCodes.French, model: "base");
Console.WriteLine($"Result: {result.TranslatedText}; detected language {result.DetectedSourceLanguage}");