{"id":13807500,"url":"https://github.com/doorgets/ng-translate","last_synced_at":"2025-05-14T00:31:36.323Z","repository":{"id":16279175,"uuid":"79392680","full_name":"doorgets/ng-translate","owner":"doorgets","description":"Angular 2 translation module i18n (internationalization) from JSON file with pluralization (Zero value state included)","archived":false,"fork":false,"pushed_at":"2024-02-04T15:31:08.000Z","size":3095,"stargazers_count":8,"open_issues_count":17,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-11-18T23:53:20.307Z","etag":null,"topics":["angular2","i18n","interpolation","ionic","ng2-translate","ngx-translate","pluralization","systemjs","translation"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/doorgets.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-01-18T22:48:25.000Z","updated_at":"2024-02-06T15:14:01.000Z","dependencies_parsed_at":"2024-02-04T17:03:51.043Z","dependency_job_id":null,"html_url":"https://github.com/doorgets/ng-translate","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doorgets%2Fng-translate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doorgets%2Fng-translate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doorgets%2Fng-translate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doorgets%2Fng-translate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/doorgets","download_url":"https://codeload.github.com/doorgets/ng-translate/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254046319,"owners_count":22005572,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular2","i18n","interpolation","ionic","ng2-translate","ngx-translate","pluralization","systemjs","translation"],"created_at":"2024-08-04T01:01:26.106Z","updated_at":"2025-05-14T00:31:31.311Z","avatar_url":"https://github.com/doorgets.png","language":"TypeScript","funding_links":[],"categories":["Table of contents"],"sub_categories":["Angular"],"readme":"# doorgets-ng-translate [![Build Status](https://travis-ci.org/doorgets/ng-translate.svg?branch=master)](https://travis-ci.org/doorgets/ng-translate) [![Dependency Status](https://david-dm.org/doorgets/ng-translate.svg)](https://david-dm.org/doorgets/ng-translate)\n\nBest Angular 2/4/5/6 (ngx) ng6 translate module i18n (internationalization) from JSON file with pluralization (Zero value state included)\n\nDemo: http://www.ng-translate.com\n\nPlunker: https://plnkr.co/edit/bpqyjTLuFIzZtR33Ov24?p=preview\n\n\n\n\n# Table of contents\n* [Installation](#installation)\n* [Configuration](#configuration)\n  * [SystemJS](#configuration-with-systemjs)\n  * [Webpack](#configuration-with-webpack)\n  * [Ionic2](#configuration-with-ionic2)\n* [How it works](#how-it-works)\n  * [Interpolation without params](#interpolation-without-params)\n  * [Interpolation with Simple params](#interpolation-with-simple-params)\n  * [Interpolation with Pluraliszation params](#interpolation-with-pluralization-params)\n  * [Interpolation with Zero value params](#interpolation-with-zero-value-params)\n* [Examples usage](#examples-usage)\n  * [Simple translation](#simple-translation)\n  * [Simple translation from shortcut](#simple-translation-from-shortcut)\n  * [Translate with params](#translate-with-params)\n  * [Translate with params from shortcut](#translate-with-params-from-shortcut)\n  * [Translate with muliple params](#translate-with-muliple-params)\n  * [Translate with muliple params from shortcut](#translate-with-muliple-params-from-shortcut)\n  * [Translate with plural params](#translate-with-plural-params)\n  * [Translate with plural params from shortcut](#translate-with-plural-params-from-shortcut)\n  * [Translate with Zero value params](#translate-with-zero-value-params)\n  * [Translate with Zero value params from shortcut](#translate-with-zero-value-params-from-shortcut)\n* [Api Reference](#api-reference)\n  * [Setup your ng translate module](#setup-your-ng-translate-module)\n  * [Change current language](#change-current-language)\n  * [Translation using get method](#translation-using-get-method)\n  * [Translation using get method with params](#translation-using-ge-method-with-params)\n  * [Translation in instant](#translation-in-instant)\n\n## Installation\n\nInstall npm module\n\n```sh\n// Angular 15+\nnpm install doorgets-ng-translate --save\n\n// Angular 2 -\u003e 8\nnpm install doorgets-ng-translate@1.0.4 --save\n\n\n```\n## Configuration\n\n### Configuration with SystemJS\n\n#### 1. Import doorgets-ng-translate module into systemjs-config.ts file:\n\n```ts\nSystem.config({\n  ...\n  map: {\n    ...,\n    'doorgets-ng-translate': 'node_modules/doorgets-ng-translate'\n  },\n  packages: {\n    ...,\n    'doorgets-ng-translate': {main: 'bundles/doorgets-ng-translate.umd.js', defaultExtension: 'js'}\n});\n```\n#### 2. Update your app.module.ts file:\n```ts\nimport { HttpModule } from '@angular/http';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { DoorgetsTranslateModule } from 'doorgets-ng-translate';\nimport { AppComponent } from './app.component';\n\n@NgModule({\n    imports: [\n        BrowserModule,\n        HttpModule,\n        DoorgetsTranslateModule.forRoot()\n    ],\n    declarations: [AppComponent],\n    bootstrap: [AppComponent]\n})\nexport class AppModule {\n}\n```\nImport:\n```ts\n...\nimport { HttpModule } from '@angular/http';\nimport { DoorgetsTranslateModule } from 'doorgets-ng-translate';\n...\n```\n@NgModule:\n```ts\n  imports: [\n    BrowserModule,\n    HttpModule,\n    DoorgetsTranslateModule.forRoot()\n  ],\n```\n#### 3. Update your app.component.ts file:\n```ts\nimport { Component, OnInit } from '@angular/core';\nimport { DoorgetsTranslateService } from 'doorgets-ng-translate';\n\n@Component({\n    selector: 'my-app',\n    template: ``,\n})\nexport class AppComponent implements OnInit {\n    constructor(private doorgetsTranslateService: DoorgetsTranslateService) { }\n\n    ngOnInit() {\n      this.doorGetTranslateService.init({\n        languages: ['en', 'fr'],\n        current: 'fr',\n        default: 'fr'\n      });\n    }\n}\n\n```\n\nImport DoorgetsTranslateService:\n```ts\n  import { DoorgetsTranslateService } from 'doorgets-ng-translate';\n```\n\nInit constructor:\n```ts\n  constructor(private doorGetTranslateService: DoorgetsTranslateService) {}\n```\n\nSet Languages, Current and Default:\n```ts\n  ngOnInit() {\n    this.doorGetTranslateService.init({\n      languages: ['en', 'fr'],\n      current: 'fr',\n      default: 'fr'\n    });\n  }\n```\n\n####4. Finally, create a `locale` folder at the root of your project with appropiate country traduction files\n```\n|-- + locale/\n    |-- en.json\n    |-- fr.json\n    |-- es.json\n    |-- ...\n|-- + src/\n|-- package.json\n|-- tsconfig.json\n|-- systemjs.config.js\n```\n\n**[Back to top](#table-of-contents)**\n\n### Configuration with Webpack\n\n#### 1. Import doorgets-ng-translate module into vendor.ts file:\n\n```ts\n// Angular\nimport '@angular/platform-browser';\nimport '@angular/platform-browser-dynamic';\nimport '@angular/core';\nimport '@angular/common';\nimport '@angular/http';\nimport '@angular/router';\n// RxJS\nimport 'rxjs';\n// Doorgets\nimport 'doorgets-ng-translate';\n```\n\n#### 2. Update app.module.ts file (Angular 9):\n```ts\nimport { NgModule } from '@angular/core';\nimport { HttpModule } from '@angular/http';\nimport { HttpClient } from '@angular/common/http';\n\nimport { BrowserModule }  from '@angular/platform-browser';\nimport { AppComponent } from './app.component';\n\nimport { DoorgetsTranslateModule , NgTranslate, NgTranslateAbstract } from 'doorgets-ng-translate';\n\nexport function newNgTranslate(http: HttpClient) {\n  return new NgTranslate(http, '../../public/locale');\n}\n\n@NgModule({\n  imports: [\n    HttpModule,\n    DoorgetsTranslateModule.forRoot({\n      provide: NgTranslateAbstract,\n      useFactory: (newNgTranslate),\n      deps: [HttpClient]\n    }),\n    BrowserModule\n  ],\n  declarations: [\n    AppComponent\n  ],\n  bootstrap: [ AppComponent ]\n})\nexport class AppModule { }\n```\nImport:\n```ts\n...\nimport { HttpModule, Http } from '@angular/http';\nimport { HttpClient } from '@angular/common/http';\nimport { DoorgetsTranslateModule , NgTranslate, NgTranslateAbstract } from 'doorgets-ng-translate';\n...\n```\n\nExport:\n```ts\n...\nexport function newNgTranslate(http: HttpClient) {\n  return new NgTranslate(http, '../../public/locale');\n}\n...\n```\n\n@NgModule:\n```ts\n  imports: [\n    HttpModule,\n    DoorgetsTranslateModule.forRoot({\n      provide: NgTranslateAbstract,\n      useFactory: (newNgTranslate),\n      deps: [Http]\n    }),\n    BrowserModule\n  ],\n```\n\n#### 2. Update app.module.ts file (Angular 2 -\u003e 8):\n```ts\nimport { NgModule } from '@angular/core';\nimport { HttpModule, Http } from '@angular/http';\nimport { BrowserModule }  from '@angular/platform-browser';\nimport { AppComponent } from './app.component';\n\nimport { DoorgetsTranslateModule , NgTranslate, NgTranslateAbstract } from 'doorgets-ng-translate';\n\nexport function newNgTranslate(http: Http) {\n  return new NgTranslate(http, '../../public/locale');\n}\n\n@NgModule({\n  imports: [\n    HttpModule,\n    DoorgetsTranslateModule.forRoot({\n      provide: NgTranslateAbstract,\n      useFactory: (newNgTranslate),\n      deps: [Http]\n    }),\n    BrowserModule\n  ],\n  declarations: [\n    AppComponent\n  ],\n  bootstrap: [ AppComponent ]\n})\nexport class AppModule { }\n```\nImport:\n```ts\n...\nimport { HttpModule, Http } from '@angular/http';\nimport { DoorgetsTranslateModule , NgTranslate, NgTranslateAbstract } from 'doorgets-ng-translate';\n...\n```\n\nExport:\n```ts\n...\nexport function newNgTranslate(http: Http) {\n  return new NgTranslate(http, '../../public/locale');\n}\n...\n```\n\n@NgModule:\n```ts\n  imports: [\n    HttpModule,\n    DoorgetsTranslateModule.forRoot({\n      provide: NgTranslateAbstract,\n      useFactory: (newNgTranslate),\n      deps: [Http]\n    }),\n    BrowserModule\n  ],\n```\n\n#### 3. Update app.component.ts file:\n```ts\nimport { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport '../../public/css/styles.css';\n\nimport { DoorgetsTranslateService } from 'doorgets-ng-translate';\n\n@Component({\n  selector: 'my-app',\n  templateUrl: './app.component.html',\n  styleUrls: ['./app.component.css'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AppComponent implements OnInit {\n\n  constructor(private doorGetTranslateService: DoorgetsTranslateService) {}\n\n  ngOnInit() {\n    this.doorGetTranslateService.init({\n      languages: ['en', 'fr'],\n      current: 'fr',\n      default: 'fr'\n    });\n  }\n}\n```\n\nImport DoorgetsTranslateService:\n```ts\n  import { DoorgetsTranslateService } from 'doorgets-ng-translate';\n```\n\nInit constructor:\n```ts\n  constructor(private doorGetTranslateService: DoorgetsTranslateService) {}\n```\n\nSet Languages, Current and Default:\n```ts\n  ngOnInit() {\n    this.doorGetTranslateService.init({\n      languages: ['en', 'fr'],\n      current: 'fr',\n      default: 'fr'\n    });\n  }\n```\n\n#### 4. Finally, create a `locale` folder at the `public` folder of your project with appropiate country traduction files\n```\n|-- + public/\n    |-- + locale/\n        |-- en.json\n        |-- fr.json\n        |-- es.json\n        |-- ...\n|-- + config/\n|-- + src/\n|-- package.json\n|-- tsconfig.json\n|-- webpack.config.js\n```\n\n**[Back to top](#table-of-contents)**\n\n### Configuration with Ionic2\n\n#### 1. Update app.module.ts file\n\n```ts\nimport { NgModule, ErrorHandler } from '@angular/core';\nimport { HttpModule, Http } from '@angular/http';\nimport { FormsModule } from '@angular/forms';\n\nimport { IonicApp, IonicModule, IonicErrorHandler } from 'ionic-angular';\nimport { MyApp } from './app.component';\nimport { AboutPage } from '../pages/about/about';\nimport { ContactPage } from '../pages/contact/contact';\nimport { HomePage } from '../pages/home/home';\nimport { TabsPage } from '../pages/tabs/tabs';\n\nimport { DoorgetsTranslateModule , NgTranslate, NgTranslateAbstract } from 'doorgets-ng-translate';\n\nexport function newNgTranslate(http: Http) {\n  return new NgTranslate(http, './assets/locale');\n}\n\n@NgModule({\n  declarations: [\n    MyApp,\n    AboutPage,\n    ContactPage,\n    HomePage,\n    TabsPage\n  ],\n  imports: [\n    HttpModule,\n    DoorgetsTranslateModule.forRoot({\n      provide: NgTranslateAbstract,\n      useFactory: (newNgTranslate),\n      deps: [Http]\n    }),\n    IonicModule.forRoot(MyApp),\n    FormsModule\n  ],\n  bootstrap: [IonicApp],\n  entryComponents: [\n    MyApp,\n    AboutPage,\n    ContactPage,\n    HomePage,\n    TabsPage\n  ],\n  providers: [{provide: ErrorHandler, useClass: IonicErrorHandler}]\n})\nexport class AppModule {}\n```\n\nImport:\n```ts\n...\nimport { HttpModule, Http } from '@angular/http';\nimport { DoorgetsTranslateModule , NgTranslate, NgTranslateAbstract } from 'doorgets-ng-translate';\n...\n```\n\nExport:\n```ts\n...\nexport function newNgTranslate(http: Http) {\n  return new NgTranslate(http, './assets/locale');\n}\n...\n```\n\n@NgModule:\n```ts\n  imports: [\n    HttpModule,\n    DoorgetsTranslateModule.forRoot({\n      provide: NgTranslateAbstract,\n      useFactory: (newNgTranslate),\n      deps: [Http]\n    }),\n    IonicModule.forRoot(MyApp),\n    FormsModule\n  ],\n```\n\n#### 2. Update app.component.ts file:\n```ts\nimport { Component } from '@angular/core';\nimport { Platform } from 'ionic-angular';\nimport { StatusBar, Splashscreen } from 'ionic-native';\n\nimport { TabsPage } from '../pages/tabs/tabs';\n\nimport { DoorgetsTranslateService } from 'doorgets-ng-translate';\n\n@Component({\n  templateUrl: 'app.html'\n})\nexport class MyApp {\n\n  rootPage = TabsPage;\n\n  constructor(platform: Platform, private doorgetsTranslateService: DoorgetsTranslateService) {\n    platform.ready().then(() =\u003e {\n      doorgetsTranslateService.init({\n        languages: ['en', 'fr'],\n        current: 'fr',\n        default: 'fr'\n      });\n\n      StatusBar.styleDefault();\n      Splashscreen.hide();\n    });\n  }\n}\n```\n\nImport DoorgetsTranslateService:\n```ts\n  import { DoorgetsTranslateService } from 'doorgets-ng-translate';\n```\n\nInit constructor:\n```ts\n  constructor(platform: Platform, private doorgetsTranslateService: DoorgetsTranslateService) {\n```\n\nSet Languages, Current and Default:\n```ts\n  platform.ready().then(() =\u003e {\n    doorgetsTranslateService.init({\n      languages: ['en', 'fr'],\n      current: 'fr',\n      default: 'fr'\n    });\n\n    StatusBar.styleDefault();\n    Splashscreen.hide();\n  });\n```\n\n#### 3. Finally, create a `locale` folder at the `assets` folder of your project with appropiate country traduction files\n```\n|-- + resources/\n|-- + src/\n    |-- + assets/\n        |-- + locale/\n            |-- en.json\n            |-- fr.json\n            |-- es.json\n            |-- ...\n    |-- + app/\n    |-- + pages/\n    |-- + theme/\n    |-- ...\n|-- config.xml\n|-- package.json\n|-- tsconfig.json\n|-- ionic.config.json\n```\n\n**[Back to top](#table-of-contents)**\n\n## How it works\n\n### Interpolation without params\nTranslation file:\n```json\n  {\n    \"How are you?\": \"Comment ça va?\",\n    \"hello\": {\n      \"form\": \"Comment ça va?\"\n    }\n  }\n```\nFor simple translation you can use human sentence inside key object:\n```ts\n  \"How are you?\" // result =\u003e Comment ça va?\n```\n\nOr your can use key and subkey:\n```ts\n  \"hello.form\" // result =\u003e Comment ça va?\n```\n\n### Interpolation with Simple params\n\n\u003e Params works with __collection__ `['firstParam', 'secondParam', '...']`, __not__ Object `{}`\n\u003e\n\u003e Marker key is the concatenation of __$__ and __position__ key inside collection\n\u003e\n\u003e Why? this is very faster than object !\n\n  Translation file:\n```json\n  {\n    \"Hello $0, my name is $1, i live in $2\": \"Salut $0, je m'appel $1, je vie à $2\"\n  }\n```\nCollection params: __[\"John Doe\", \"Mounir R'Quiba\", \"Paris\"]__\n```ts\n  // $ + position =\u003e $0 =\u003e John Doe\n  // $ + position =\u003e $1 =\u003e Mounir R'Quiba\n  // $ + position =\u003e $2 =\u003e Paris\n  \"Hello $0, my name is $1, i live in $2\"\n  // result =\u003e \"Salut John Doe, je m'appel Mounir R'Quiba, je vie à Paris\"\n```\n\n### Interpolation with Pluralization params\n\u003e Pluralizaition works with THE BANANA IN THE BOX `[(` open tag and `)]` to close tag\n\u003e\n\u003e Every block is serparated by a pipe `|`\n\u003e\n\u003e You can use 1 to 3 blocks, so the maximum of pipes is 2\n\n  Translation file:\n```json\n  {\n    \"I have [($0|$0 apple|$0 apples)] in [($1|$1 bag|$1 bags)]\": \"J'ai [($0|$0 pomme|$0 pommes)] dans [($1|$1 sac|$1 sacs)]\"\n  }\n```\n\nCollection params: __[2, 1]__\n```ts\n  // $ + position =\u003e $0 =\u003e 2\n  // $ + position =\u003e $1 =\u003e 1\n  \"I have [($0|$0 apple|$0 apples)] in [($1|$1 bag|$1 bags)]\"\n  // result =\u003e \"J'ai 2 pommes dans 1 sac\"\n```\n\nExplanation\n```ts\n   [($0|$0 apple|$0 apples)]\n```\n\n\u003e __block 1:__ `$0` is the key to find\n\u003e\n\u003e __block 2:__ `$0 apple` is the translated sentence when $0 \u003c= 1\n\u003e\n\u003e __block 3:__ `$0 apples` is the translated sentence when $0 \u003e 1\n\n\n\n### Interpolation with Zero value params\n\u003e Zero value works with THE BANANA IN THE BOX `[(` open tag and `)]` to close tag\n\u003e\n\u003e Every block is serparated by a pipe `|`\n\u003e\n\u003e You can use 1 to 4 blocks, so the maximum of pipes is 3\n\n  Translation file:\n```json\n  {\n    \"I have [($0|$0 apple|$0 apples|nothing)] [($1|in my bag|in $1 bags|)]\": \"[($0|J'ai une pomme|J'ai $0 pommes|Je n'ai rien)] [($1|dans mon sac|dans mes $1 sacs|)]\"\n  }\n```\n\nCollection params: __[1, 1]__\n```ts\n  // $ + position =\u003e $0 =\u003e 1\n  // $ + position =\u003e $1 =\u003e 1\n  \"I have [($0|$0 apple|$0 apples|nothing)] in [($1|$1 bag|$1 bags|my bag)]\"\n  // result =\u003e \"J'ai une pomme dans mon sac\"\n```\n\nCollection params: __[0, 0]__\n```ts\n  // $ + position =\u003e $0 =\u003e 0\n  // $ + position =\u003e $1 =\u003e 0\n  \"I have [($0|$0 apple|$0 apples|nothing)] in [($1|$1 bag|$1 bags|my bag)]\"\n  // result =\u003e \"Je n'ai rien\"\n```\n\nExplanation\n```ts\n   [($0|$0 apple|$0 apples|nothing)]\n```\n\n\u003e __block 1:__ `$0` is the key to find\n\u003e\n\u003e __block 2:__ `$0 apple` is the translated sentence when $0 == 1\n\u003e\n\u003e __block 3:__ `$0 apples` is the translated sentence when $0 \u003e 1\n\n\u003e __block 4:__ `nothing` is the translated sentence when $0 \u003c= 0\n\n\n**[Back to top](#table-of-contents)**\n\n## Examples usage\n\n### Simple translation\n\n__./locale/fr.json__\n```json\n{\n  \"Are you ready?\": \"Êtes-vous prêt ?\",\n}\n```\n\n__@Directive:__\n```html\n    \u003cspan [dgTranslate]\u003eAre you ready?\u003c/span\u003e\n```\n\u003e *Output:* __Êtes-vous prêt ?__\n\n__@Directive:__\n```html\n    \u003cspan [dgTranslate]=\"'Are you ready?'\"\u003e\u003c/span\u003e\n```\n\n\u003e *Output:* __Êtes-vous prêt ?__\n\n__@Pipe:__\n```html\n    {{ 'Are you ready?' | dgTranslate }}\n```\n\n\u003e *Output:* __Êtes-vous prêt ?__\n\n\n### Simple translation from shortcut\n\n__./locale/fr.json__\n```json\n{\n  \"label\": {\n    \"ready\": \"Êtes-vous prêt ?\"\n  }\n}\n```\n\n__@Directive:__\n```html\n    \u003cspan [dgTranslate]\u003elabel.ready\u003c/span\u003e\n```\n\u003e *Output:* __Êtes-vous prêt ?__\n\n__@Directive:__\n```html\n    \u003cspan [dgTranslate]=\"label.ready'\"\u003e\u003c/span\u003e\n```\n\n\u003e *Output:* __Êtes-vous prêt ?__\n\n__@Pipe:__\n```html\n    {{ label.ready' | dgTranslate }}\n```\n\n\u003e *Output:* __Êtes-vous prêt ?__\n\n### Translate with params\n\n__./locale/fr.json__\n```json\n{\n  \"Hello $0\": \"Salut $0\"\n}\n```\n\n__@Directive:__\n```html\n    \u003cspan [dgTranslate] [dgTranslateOptions]=\"[myName]\"\u003e\n      Hello $0\n    \u003c/span\u003e\n```\nmyName = Mounir R'Quiba\n\n\u003e *Output:* __Salut Mounir R'Quiba__\n\n__@Directive:__\n```html\n    \u003cspan [dgTranslate]=\"'Hello $0'\" [dgTranslateOptions]=\"[myName]\"\u003e\u003c/span\u003e\n```\nmyName = Mounir R'Quiba\n\n\u003e *Output:* __Salut Mounir R'Quiba__\n\n__@Pipe:__\n```html\n    {{ 'Hello $0' | dgTranslate :myName }}\n```\nmyName = Mounir R'Quiba\n\n\u003e *Output:* __Salut Mounir R'Quiba__\n\n### Translate with params from shortcut\n\n__./locale/fr.json__\n```json\n{\n  \"label\": {\n    \"hello\": \"Salut $0\"\n  }\n}\n```\n\n__@Directive:__\n```html\n    \u003cspan [dgTranslate] [dgTranslateOptions]=\"[myName]\"\u003e\n     label.hello\n    \u003c/span\u003e\n```\nmyName = Mounir R'Quiba;\n\n\u003e *Output:* __Salut Mounir R'Quiba__\n\n__@Directive:__\n```html\n    \u003cspan [dgTranslate]=\"'label.hello'\" [dgTranslateOptions]=\"[myName]\"\u003e\u003c/span\u003e\n```\nmyName = Mounir R'Quiba;\n\n\u003e *Output:* __Salut Mounir R'Quiba__\n\n__@Pipe:__\n```html\n    {{ 'label.hello' | dgTranslate :myName }}\n```\nmyName = Mounir R'Quiba;\n\n\u003e *Output:* __Salut Mounir R'Quiba__\n\n\n\n\n### Translate with muliple params\n\n__./locale/fr.json__\n```json\n{\n  \"label\": {\n    \"name\": \"Je m'appel $0 j'aime coder avec $1\"\n  }\n}\n```\n\n__@Directive:__\n```html\n    \u003cspan [dgTranslate] [dgTranslateOptions]=\"[myName, myLanguage]\"\u003e\n      My name is $0 I like coding with $1\n    \u003c/span\u003e\n```\nmyName = Mounir R'Quiba; myLanguage = Angular 2;\n\n\u003e *Output:* __Je m'appel Mounir R'Quiba j'aime coder avec Angular 2__\n\n__@Directive:__\n```html\n    \u003cspan [dgTranslate]=\"'My name is $0 I like coding with $1'\" [dgTranslateOptions]=\"[myName, myLanguage]\"\u003e\u003c/span\u003e\n```\nmyName = Mounir R'Quiba; myLanguage = Angular 2;\n\n\u003e *Output:* __Je m'appel Mounir R'Quiba j'aime coder avec Angular 2__\n\n__@Pipe:__\n```html\n    {{ 'My name is $0 I like coding with $1' | dgTranslate :myName :myLanguage }}\n```\nmyName = Mounir R'Quiba; myLanguage = Angular 2;\n\n\u003e *Output:* __Je m'appel Mounir R'Quiba j'aime coder avec Angular 2__\n\n\n\n\n### Translate with muliple params from shortcut\n\n__./locale/fr.json__\n```json\n{\n  \"label\": {\n    \"name\": \"Je m'appel $0 j'aime coder avec $1\"\n  }\n}\n```\n\n__@Directive:__\n```html\n    \u003cspan [dgTranslate] [dgTranslateOptions]=\"[myName, myLanguage]\"\u003e\n     label.name\n    \u003c/span\u003e\n```\nmyName = Mounir R'Quiba; myLanguage = Angular 2;\n\n\u003e *Output:* __Je m'appel Mounir R'Quiba j'aime coder avec Angular 2__\n\n__@Directive:__\n```html\n    \u003cspan [dgTranslate]=\"'label.name'\" [dgTranslateOptions]=\"[myName, myLanguage]\"\u003e\u003c/span\u003e\n```\nmyName = Mounir R'Quiba; myLanguage = Mounir R'Quiba\n\n\u003e *Output:* __Je m'appel Mounir R'Quiba j'aime coder avec Angular 2__\n\n__@Pipe:__\n```html\n    {{ 'label.name' | dgTranslate :myName :myLanguage }}\n```\nmyName = Mounir R'Quiba; myLanguage = Mounir R'Quiba\n\n\u003e *Output:* __Je m'appel Mounir R'Quiba j'aime coder avec Angular 2__\n\n\n\n\n### Translate with plural params\n\n__./locale/fr.json__\n```json\n{\n  \"I have [($0|$0 apple|$0 apples)] in [($1|$1 bag|$1 bags)]\": \"J'ai [($0|$0 pomme|$0 pommes)] dans [($1|$1 sac|$1 sacs)]\"\n}\n```\n\n__@Directive:__\n```html\n    \u003cspan [dgTranslate] [dgTranslateOptions]=\"[countApple, countBag]\"\u003e\n      I have [($0|$0 apple|$0 apples)] in [($1|$1 bag|$1 bags)]\n    \u003c/span\u003e\n```\ncountApple = 2; countBag = 1;\n\n\u003e *Output:* __J'ai 2 pommes dans 1 sac__\n\n__@Directive:__\n```html\n    \u003cspan [dgTranslate]=\"'I have [($0|$0 apple|$0 apples)] in [($1|$1 bag|$1 bags)]'\" [dgTranslateOptions]=\"[countApple, countBag]\"\u003e\u003c/span\u003e\n```\ncountApple = 2; countBag = 1;\n\n\u003e *Output:* __J'ai 2 pommes dans 1 sac__\n\n__@Pipe:__\n```html\n    {{ 'I have [($0|$0 apple|$0 apples)] in [($1|$1 bag|$1 bags)]' | dgTranslate :countApple :countBag }}\n```\ncountApple = 2; countBag = 1;\n\n\u003e *Output:* __J'ai 2 pommes dans 1 sac__\n\n\n\n\n### Translate with plural params from shortcut\n\n__./locale/fr.json__\n```json\n{\n  \"label\": {\n    \"quantity\": \"J'ai [($0|$0 pomme|$0 pommes)] dans [($1|$1 sac|$1 sacs)]\"\n  }\n}\n```\n\n__@Directive:__\n```html\n    \u003cspan [dgTranslate] [dgTranslateOptions]=\"[countApple, countBag]\"\u003e\n     label.quantity\n    \u003c/span\u003e\n```\ncountApple = 2; countBag = 1;\n\n\u003e *Output:* __J'ai 2 pommes dans 1 sac__\n\n__@Directive:__\n```html\n    \u003cspan [dgTranslate]=\"'label.quantity'\" [dgTranslateOptions]=\"[countApple, countBag]\"\u003e\u003c/span\u003e\n```\ncountApple = 2; countBag = 1;\n\n\u003e *Output:* __J'ai 2 pommes dans 1 sac__\n\n__@Pipe:__\n```html\n    {{ 'label.quantity' | dgTranslate :countApple :countBag }}\n```\ncountApple = 2; countBag = 1;\n\n\u003e *Output:* __J'ai 2 pommes dans 1 sac__\n\n\n\n\n### Translate with Zero value params\n\n__./locale/fr.json__\n```json\n{\n  \"I have [($0|$0 apple|$0 apples|nothing)] in [($1|$1 bag|$1 bags|my bag)]\": \"J'ai [($0|$0 pomme|$0 pommes|rien)] dans [($1|$1 sac|$1 sacs|mon sac)]\"\n}\n```\n\n__@Directive:__\n```html\n    \u003cspan [dgTranslate] [dgTranslateOptions]=\"[countApple, countBag]\"\u003e\n      I have [($0|$0 apple|$0 apples|nothing)] in [($1|$1 bag|$1 bags|my bag)]\n    \u003c/span\u003e\n```\ncountApple = 2; countBag = 1;\n\n\u003e *Output:* __J'ai 2 pommes dans 1 sac__\n\ncountApple = 0; countBag = 0;\n\n\u003e *Output:* __J'ai rien dans mon sac__\n\n__@Directive:__\n```html\n    \u003cspan [dgTranslate]=\"'I have [($0|$0 apple|$0 apples|nothing)] in [($1|$1 bag|$1 bags|my bag)]'\" [dgTranslateOptions]=\"[countApple, countBag]\"\u003e\u003c/span\u003e\n```\ncountApple = 2; countBag = 1;\n\n\u003e *Output:* __J'ai 2 pommes dans 1 sac__\n\ncountApple = 0; countBag = 0;\n\n\u003e *Output:* __J'ai rien dans mon sac__\n\n__@Pipe:__\n```html\n    {{ 'I have [($0|$0 apple|$0 apples|nothing)] in [($1|$1 bag|$1 bags|my bag)]' | dgTranslate :countApple :countBag }}\n```\ncountApple = 2; countBag = 1;\n\n\u003e *Output:* __J'ai 2 pommes dans 1 sac__\n\ncountApple = 0; countBag = 0;\n\n\u003e *Output:* __J'ai rien dans mon sac__\n\n\n\n### Translate with zero value params from shortcut\n\n__./locale/fr.json__\n```json\n{\n  \"label\": {\n    \"zero\": \"J'ai [($0|$0 pomme|$0 pommes|rien)] en [($1|$1 sac|$1 sacs|mon sac)]\"\n  }\n}\n```\n\n__@Directive:__\n```html\n    \u003cspan [dgTranslate] [dgTranslateOptions]=\"[countApple, countBag]\"\u003e\n     label.zero\n    \u003c/span\u003e\n```\ncountApple = 2; countBag = 1;\n\n\u003e *Output:* __J'ai 2 pommes dans 1 sac__\n\ncountApple = 0; countBag = 0;\n\n\u003e *Output:* __J'ai rien dans mon sac__\n\n__@Directive:__\n```html\n    \u003cspan [dgTranslate]=\"'label.zero'\" [dgTranslateOptions]=\"[countApple, countBag]\"\u003e\u003c/span\u003e\n```\ncountApple = 2; countBag = 1;\n\n\u003e *Output:* __J'ai 2 pommes dans 1 sac__\n\ncountApple = 0; countBag = 0;\n\n\u003e *Output:* __J'ai rien dans mon sac__\n\n__@Pipe:__\n```html\n    {{ 'label.zero' | dgTranslate :countApple :countBag }}\n```\ncountApple = 2; countBag = 1;\n\n\u003e *Output:* __J'ai 2 pommes dans 1 sac__\n\ncountApple = 0; countBag = 0;\n\n\u003e *Output:* __J'ai rien dans mon sac__\n\n## Api Reference\n\n### Setup your ng translate module\n__Quick init__\n\n```ts\n doorGetTranslateService.init({\n  languages: ['fr', 'en'],\n  current: 'fr',\n  default: 'en'\n });\n```\n__Or__\n```ts\n doorGetTranslateService.add(['fr', 'en'])\n doorGetTranslateService.setCurrent('fr');\n doorGetTranslateService.setDefault('fr');\n```\n\n### Change current language\n```ts\n  doorGetTranslateService.setCurrent('en');\n```\n### Translation using get method\n```ts\n  doorGetTranslateService.get('myKey').subscribe((res: string) =\u003e {\n    // res contain translated value\n  });\n```\n### Translation using get method with params\n```ts\n  doorGetTranslateService.get('myKey', [1, 1]).subscribe((res: string) =\u003e {\n    // res contain translated value\n  });\n```\n### Translation in instant\n```ts\n  // res contain translated value\n  res = doorGetTranslateService.instant('myKey');\n```\n\n**[Back to top](#table-of-contents)**\n\n# License\n\nThe MIT License\n\nCopyright (c) 2017 Mounir R'Quiba http://www.doorgets.com/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n**[Back to top](#table-of-contents)**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoorgets%2Fng-translate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdoorgets%2Fng-translate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoorgets%2Fng-translate/lists"}