Skip to main content

Translation

The library uses ngx-translate for internalization of the labels of the user interface. Currently, the library only supports English, but you can provide your own translations if you want to. If you use ngx-translate in your own project, you can still use our library's translations; for more information, see the setup guide below.

Setup#

You will always have to set up translations, even if you don't want to override the default translations.

Install ngx-translate#

npm install @ngx-translate/core --save

Import the TranslateModule#

import { TranslateModule } from "@ngx-translate/core";
import { StreamChatModule } from "stream-chat-angular";

imports: [TranslateModule.forRoot(), StreamChatModule];
export class AppModule {}
important

You should import the TranslateModule.forRoot() in a non-lazy loaded module (for example AppModule) even if the chat application is displayed from a lazy loaded module. If the translation isn't initialized properly the UI labels will be displayed as "streamChat...".

Set up the translations#

Initialize the translation in the constructor of the component which displays the chat UI (for example AppComponent)

import { StreamI18nService } from 'stream-chat-angular';

constructor(private streamI18nService: StreamI18nService) {
this.streamI18nService.setTranslation();
}
important

It's important to call the setTranslation in the constructor of the component that displays the chat UI. If the translation isn't initialized properly the UI labels will be displayed as "streamChat...".

Setup, if you're using ngx-translate in your project#

Module import#

If you are already using ngx-translate in your project, we suppose you already have it installed and the TranslateModule is configured and imported. You just have to import the StreamChatModule:

import { StreamChatModule } from "stream-chat-angular";

imports: [StreamChatModule];
export class AppModule {}

Register the translations#

Our library will use the same TranslateService as your project, and the library will register the translations through the StreamI18nService. Here is how to do it (typically, you will be doing it in your AppComponent ):

import { StreamI18nService } from 'stream-chat-angular';
import { TranslateService } from '@ngx-translate/core';

constructor(
private streamI18nService: StreamI18nService,
private translateService: TranslateService
) {
this.translateService.getTranslation('en').subscribe(() => {
this.streamI18nService.setTranslation('en');
});
}
important

The HTTP loader will override all registered translations. If you use that, it is necessary to wait for the HTTP loader to finish and only register the library's translations afterward (the code snippet above shows that scenario). Ngx-translate already has a GitHub issue open to solve that problem.

important

Our library uses the streamChat prefix for the translation keys, so you don't need to worry about translation keys clashing.

Provide a custom language key#

You can provide the language key for the translation registration:

import { StreamI18nService } from 'stream-chat-angular';
import { TranslateService } from '@ngx-translate/core';

constructor(
private streamI18nService: StreamI18nService,
private translateService: TranslateService
) {
this.translateService.getTranslation('de').subscribe(() => {
this.streamI18nService.setTranslation('de');
});
}

However, it is important to note that since our library currently only supports English, the translations will always be the same. You can also provide custom translations for each language key, if you want to.

Set the default language#

For the translations to work, it is necessary to set the default language. Here are two different ways to do that:

TranslateModule.forRoot({
defaultLanguage: "en",
});

or

this.translateService.use("en");

Custom translation#

You can entirely or partially override the library's default translations.

The setTranslation method of the StreamI18nService lets you to pass your own translations:

import { StreamI18nService } from 'stream-chat-angular';

const customTranslations = {'Nothing yet...': 'This channel is empty'};

constructor(private streamI18nService: StreamI18nService) {
this.streamI18nService.setTranslation('en', customTranslations);
}

You can see the list of translation keys here.

You can override the entire translation or just some keys.

Did you find this page helpful?