Simple translation module for NestJS.
npm i @qntm-code/nest-translate
or
yarn add @qntm-code/nest-translate
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'