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"
}
]
}
}
npm install @nhost/google-translation
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.
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=xxxxxxx
Learn more about Google Projects and API keys.
nhost up
Learn more about the Nhost CLI.
Test the Google Translation GraphQL API in the browser:
https://local.functions.nhost.run/v1/graphql/google-translation
Add the Google Translation GraphQL API as a Remote Schema in Hasura.
URL
https://local.functions.nhost.run/v1/graphql/google-translation
Headers
x-nhost-webhook-secret: NHOST_WEBHOOK_SECRET (from env var)
You can use the GraphQL API to translate values from other columns.
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
.
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-secret
header is equal to theNHOST_WEBHOOK_SECRET
environment variable; and - the user is an admin (either valid
x-hasura-admin-secret
is passed on as a header orx-hasura-role
isadmin
), OR the user is authenticated (the requestAuthorization
has a valid JWT)
Other options are available to configure the GraphQL server:
- Google Project API and API Key can be passed on with the
projectId
andapiKey
parameters. When not set, they will fall back respectively toprocess.env.GOOGLE_TRANSLATION_PROJECT_ID
andprocess.env.GOOGLE_TRANSLATION_API_KEY
. -
graphiql
defaults totrue
. Set it tofalse
if you don't want to serve the GraphiQL UI. - Custom
cors
configuration. See GraphQL Yoga documentation for further information.
Install dependencies:
pnpm install
Start the development server:
pnpm run start
The GraphQL Server will reload every time the code changes.
Open GraphiQL: