--- Added: v2.0.0 Status: Active Last reviewed: 2018-06-07 --- # Translation service Supports localisation. ## Class members ### Methods - **addTranslationFolder**(name: `string` = `""`, path: `string` = `""`)
Adds a new folder of translation source files. - _name:_ `string` - Name for the translation provider - _path:_ `string` - Path to the folder - **get**(key: `string|Array`, interpolateParams?: `Object`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Gets the translation for the supplied key. - _key:_ `string|Array` - Key to translate - _interpolateParams:_ `Object` - (Optional) String(s) to be interpolated into the main message - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Translated text - **instant**(key: `string|Array`, interpolateParams?: `Object`): `string|any`
Directly returns the translation for the supplied key. - _key:_ `string|Array` - Key to translate - _interpolateParams:_ `Object` - (Optional) String(s) to be interpolated into the main message - **Returns** `string|any` - Translated text - **onTranslationChanged**(lang: `string`)
Triggers a notification callback when the translation language changes. - _lang:_ `string` - The new language code - **use**(lang: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Sets the target language for translations. - _lang:_ `string` - Code name for the language - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Translations available for the language ## Details In the `get` and `instant` methods, the `interpolateParams` parameter supplies interpolation strings for keys that include them. For example, in the standard `en.json`, the `CORE.PAGINATION.ITEMS_RANGE` key is defined as: "Showing {{ range }} of {{ total }}" The `range` and `total` interpolations are supplied to the `get` method using an object with fields of the same name: ```ts this.trans.get( "CORE.PAGINATION.ITEMS_RANGE", { range: "1..10", total: "122" } ).subscribe(translation => { this.translatedText = translation; }); ``` ### Registering translation sources To supply your own set of translation source files, you first need to create a subfolder for them within your application's `assets` folder. The folder can have any name you like but it must also have a sub-folder called `i18n` where the translation lists will be stored. So, the general format of the path to this folder will be: `/src/assets/my-translations/i18n` If you wanted English and French translations then you would add `en.json` and `fr.json` files into the `i18n` folder and add your new keys: // en.json ... "WELCOME_MESSAGE": "Welcome!" ... // fr.json ... "WELCOME_MESSAGE": "Bienvenue !" ... The files follow the same hierarchical key:value JSON format as the built-in translations. You can add new keys to your local files or redefine existing keys but the built-in definitions will be used for any keys you don't explicitly define in your files. For example, `en.json` might look like the following: ```json { "title": "my app", "LOGIN": { "LABEL": { "LOGIN": "Custom Sign In" } } } ``` To enable the new translations in your app, you also need to register them in your `app.module.ts` file. Import `TRANSLATION_PROVIDER` and add the path of your translations folder to the `providers`: ```ts // Other imports... import { TRANSLATION_PROVIDER } from "@alfresco/adf-core"; ... @NgModule({ imports: [ ... ], declarations: [ ... ], providers: [ { provide: TRANSLATION_PROVIDER, multi: true, useValue: { name: 'my-translations', source: 'assets/my-translations' } } ... ``` You can now use your new keys in your component: ```ts ... ngOnInit() { this.trans.use("fr"); this.trans.get("WELCOME_MESSAGE").subscribe(translation => { this.translatedText = translation; }); } ... ``` Note: the `source` property points to the web application root. Ensure you have webpack correctly set up to copy all the i18n files at compile time. ```text index.html assets/ng2-alfresco-core/i18n/en.json ... ``` You can register as many entries as you like. ### Switching languages Depending on your application, you may want to have buttons or dropdown menus to allow language selection for the end users. You can use [`TranslationService`](../core/translation.service.md) to switch languages from your code based on input events of your choice: ```ts class MyComponent { constructor(private translateService: TranslationService) { } onLanguageClicked(lang: string) { this.translateService.use(lang || 'en'); } } ``` ## See Also - [Internationalization](../user-guide/internationalization.md)