@nhost/google-translation v0.2.2
This package creates a Google Translation GraphQL API.
query {
# Detect the initial language automatically, and set the destination language to the user's default, or the server's default
first: googleTranslation(text: "le service est disponible")
# Specify the destination language
second: googleTranslation(text: "le service est disponible", to: "es")
# Specify both initial and destination languages
third: googleTranslation(text: "le service est disponible", from: "fr", to: "it")
}Result:
{
"data": {
"first": "service is available",
"second": "el servicio está disponible",
"third": "il servizio è disponibile"
}
}You can also user the Google Translation GraphQL API with Hasura Remote Schema Relationships and connect data from your database and the Google Translation API. This allows you to request data from your database and the Google Translation API in a single GraphQL query:
query {
books {
title # a text column in the books table
translatedTitle # title translated into the user's default locale
italianTitle: translatedTitle(to: "it") # title translated into italian
}
}Result:
{
"data": {
"books": [
{
"title": "Guerre et Paix",
"translatedTitle": "War and peace",
"italianTitle": "Guerra e Pace"
},
{
"title": "Le Bruit et la Fureur",
"translatedTitle": "The Sound and the Fury",
"italianTitle": "Il suono e la furia"
}
]
}
}Install
npm install @nhost/google-translationQuick Start
Serverless Function Setup
Create a new Serverless Function functions/graphql/google-translation.ts:
import { createGoogleTranslationGraphQLServer } from '@nhost/google-translation'
export default createGoogleTranslationGraphQLServer()You can run the Google Translation GraphQL API in any JS environment because it's built using GraphQL Yoga.
Google Project ID and API Key
Add GOOGLE_TRANSLATION_PROJECT_ID as an environment variable. If you're using Nhost, add GOOGLE_TRANSLATION_API_KEY to .env.development like this:
GOOGLE_TRANSLATION_PROJECT_ID=project-id
GOOGLE_TRANSLATION_API_KEY=xxxxxxxLearn more about Google Projects and API keys.
Start Nhost
nhost upLearn more about the Nhost CLI.
Test
Test the Google Translation GraphQL API in the browser:
https://local.functions.nhost.local.run/v1/graphql/google-translation
Remote Schema
Add the Google Translation GraphQL API as a Remote Schema in Hasura.
URL
https://local.functions.local.nhost.run/v1/graphql/google-translationHeaders
x-nhost-webhook-secret: NHOST_WEBHOOK_SECRET (from env var)Remote Schema Relationships
You can use the GraphQL API to translate values from other columns.
Settings
Default language
It is possible to configure a default language by setting the getDefaultLanguage option, which is a function that gets the context as first argument, and returns either the language code, or null.
The getDefaultLanguage option is preconfigured to get the user locale from the authenticated user, using the auth.users.locale value as per defined in Hasura Auth.
If the getDefaultLanguage option returns null, the default language falls back to the defaultLanguage string option, which is preconfigured as en.
Permissions
The canTranslate options is a function that accepts the GraphQL Yoga context as an argument, augmented with the useLanguage string value that has been set by the getDefaultLanguage method.
By default, the canTranslate method returns true when:
- the
x-nhost-webhook-secretheader is equal to theNHOST_WEBHOOK_SECRETenvironment variable; and - the user is an admin (either valid
x-hasura-admin-secretis passed on as a header orx-hasura-roleisadmin), OR the user is authenticated (the requestAuthorizationhas a valid JWT)
Server settings
Other options are available to configure the GraphQL server:
- Google Project API and API Key can be passed on with the
projectIdandapiKeyparameters. When not set, they will fall back respectively toprocess.env.GOOGLE_TRANSLATION_PROJECT_IDandprocess.env.GOOGLE_TRANSLATION_API_KEY. graphiqldefaults totrue. Set it tofalseif you don't want to serve the GraphiQL UI.- Custom
corsconfiguration. See GraphQL Yoga documentation for further information.
Development
Install dependencies:
pnpm installStart the development server:
pnpm run startThe GraphQL Server will reload every time the code changes.
Open GraphiQL: