/nest-translate

Translation module for NestJS

Primary LanguageTypeScriptMIT LicenseMIT

 @qntm-code/nest-translate

Simple translation module for NestJS.

GitHub release Tests codecov Quality Gate Status Reliability Rating Vulnerabilities Bugs Security Rating Maintainability Rating

Installation

npm i @qntm-code/nest-translate

or

yarn add @qntm-code/nest-translate

Usage

Import the TranslateModule into your root module. The TranslateModule requires a configuration object with the default language and a list of namespaces with the translations for each language.

import { Module } from '@nestjs/common';
import { TranslateModule } from '@qntm-code/nest-translate';

@Module({
  imports: [
    TranslateModule.forRoot({
      defaultLanguage: 'en',
      translations: [
        {
          language: 'en',
          namespace: 'greetings',
          values: {
            hello: 'Hello',
            world: 'World',
            personal: {
              hello_name: 'Hello {name}',
              goodbye_name: 'Goodbye {name}',
            },
          },
        },
        {
          language: 'de',
          namespace: 'greetings',
          values: {
            hello: 'Hallo',
            world: 'Welt',
            personal: {
              hello_name: 'Hallo {name}',
            },
          },
        },
      ],
    }),
  ],
})
export class AppModule {}

In this example we are providing the values as a JavaScript object, but it is also possible to load the values from a JSON file.

import { Module } from '@nestjs/common';
import { TranslateModule } from '@qntm-code/nest-translate';

import enGreetings from './greetings.en.json';
import deGreetings from './greetings.de.json';

@Module({
  imports: [
    TranslateModule.forRoot({
      defaultLanguage: 'en',
      translations: [
        {
          language: 'en',
          namespace: 'greetings',
          values: enGreetings,
        },
        {
          language: 'de',
          namespace: 'greetings',
          values: deGreetings,
        },
      ],
    }),
  ],
})

Inject the TranslateService into your controller or service:

import { Injectable } from '@nestjs/common';
import { TranslateService } from '@qntm-code/nest-translate';

@Injectable()
export class AppService {
  constructor(private readonly translateService: TranslateService) {}

  public getHelloWorld(language: string): string {
    const hello = this.translateService.translate(language, 'greetings.hello');

    const world = this.translateService.translate(language, 'greetings.world');

    return `${hello} ${world}`;
  }
}

The translate module uses messageformat to format the translated strings. You can pass additional parameters to the translate method:

const hello = this.translateService.translate('en', 'greetings.personal.hello_name', { name: 'John' });
// 'Hello Jon'

If a translation is not found in the provided language, the default language is used. If the translation is not found in the default language, the key is returned.

const hello = this.translateService.translate('de', 'greetings.personal.goodbye_name', { name: 'John' });
// 'Goodbye Jon'

const goodMorning = this.translateService.translate('de', 'greetings.good_morning');
// 'greetings.good_morning'