ngx-translate-cache
Version:
ngx-translate extension to facilitate language cache.
169 lines (135 loc) • 5.43 kB
Markdown
# ngx-translate-cache
[![NPM version][npm-version-image]][npm-url]
[![MIT License][license-image]][license-url]
Based on and extension of [ngx-translate][ngx-translate-url].
This is basically a simplified version of [localize-router][localize-router-url].
If you are already using *localize-router* you don't need this extension.
This extension is aimed only to facilitate language cache with *ngx-translate*.
## Installation
To install this library, run:
```bash
$ npm install ngx-translate-cache --save
```
## Usage
```typescript
import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { TranslateCacheModule, TranslateCacheSettings, TranslateCacheService } from 'ngx-translate-cache';
@NgModule({
imports: [
TranslateModule.forRoot(),
TranslateCacheModule.forRoot({
cacheService: {
provide: TranslateCacheService,
useFactory: (translateService, translateCacheSettings) => {
return new TranslateCacheService(translateService, translateCacheSettings)
},
deps: [ TranslateService, TranslateCacheSettings ]
}
})
],
...
})
export class AppModule {}
```
### AoT
If you are using AoT [AoT compilation][aot-compiler-url]
or [Ionic][ionic-url], you must use an exported function instead of an inline function.
```ts
import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { TranslateCacheModule, TranslateCacheSettings, TranslateCacheService } from 'ngx-translate-cache';
export function TranslateCacheFactory(translateService, translateCacheSettings) {
return new TranslateCacheService(translateService, translateCacheSettings);
}
@NgModule({
imports: [
TranslateModule.forRoot(),
TranslateCacheModule.forRoot({
cacheService: {
provide: TranslateCacheService,
useFactory: TranslateCacheFactory,
deps: [ TranslateService, TranslateCacheSettings ]
}
})
],
...
})
export class AppModule {}
```
### Initializing
To initialize *ngx-translate* you usually do
```typescript
import { Component } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app',
template: `
<div>{{ 'HELLO' | translate }}</div>
`
})
export class AppComponent {
constructor(translateService: TranslateService) {
translateService.setDefaultLang('en');
translateService.use('en');
}
}
```
To initialize *ngx-translate* with *ngx-translate-cache*
```typescript
import { Component } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
import { TranslateCacheService } from 'ngx-translate-cache';
@Component({
selector: 'app',
template: `
<div>{{ 'HELLO' | translate }}</div>
`
})
export class AppComponent {
constructor(translateService: TranslateService,
translateCacheService: TranslateCacheService) {
translateService.setDefaultLang('en');
translateCacheService.init();
}
}
```
`init` method will subscribe to `translateService.onLangChange` event and update the cached language accordingly.
It also instruct *ngx-translate* to use the previous cached language if defined, or the browser current language if defined.
The order of precedence is as described below:
1. Cached language.
2. Current language of the browser.
3. Default language (language used as a fallback for *ngx-translate*).
You can also define the cache mechanism used (`LocalStorage` or `Cookie`), key used to store cached value and
cookie duration (defined in hours).
```typescript
import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { TranslateCacheModule, TranslateCacheSettings, TranslateCacheService } from 'ngx-translate-cache';
@NgModule({
imports: [
TranslateModule.forRoot(),
TranslateCacheModule.forRoot({
cacheService: {
provide: TranslateCacheService,
useFactory: (translateService, translateCacheSettings) => {
return new TranslateCacheService(translateService, translateCacheSettings)
},
deps: [ TranslateService, TranslateCacheSettings ]
},
cacheName: 'mylang', // default value is 'lang'.
cacheMechanism: 'Cookie', // default value is 'LocalStorage'.
cookieExpiry: 1, // default value is 720, a month.
})
],
...
})
export class AppModule {}
```
## License
MIT © [Jaime](mailto:jaime.glez.pacheco@gmail.com)
[npm-url]: https://www.npmjs.com/package/ngx-translate-cache
[npm-version-image]: https://img.shields.io/npm/v/npm.svg?style=flat
[license-image]: https://img.shields.io/npm/l/express.svg?style=flat
[license-url]: LICENSE
[ngx-translate-url]: https://github.com/ngx-translate/core
[localize-router-url]: https://github.com/Greentube/localize-router
[aot-compiler-url]: https://angular.io/docs/ts/latest/cookbook/aot-compiler.html
[ionic-url]: http://ionic.io/