-
Notifications
You must be signed in to change notification settings - Fork 67
Howto write a HashTranslateLoader #39
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -69,3 +69,47 @@ export function HttpLoaderFactory(http: HttpClient) { | |
``` | ||
|
||
For now this loader only support the json format. | ||
|
||
## Custom TranslateLoader strategies | ||
### HashTranslateLoader - Hashing translation files with angular-cli, webpack and SystemJS | ||
Allow caching of translation files by the browser could help to speed up the initial load of your app but with the default setup your translation files could miss the latest changes because the cache doesn't have the latest version of your translation file yet. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Drop this line. |
||
|
||
When using the angular-cli (uses webpack under the hood) you can write your own `TranslateLoader` that always loads the latest translation file available during your application build. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
|
||
```typescript | ||
// webpack-translate-loader.ts | ||
import { TranslateLoader } from '@ngx-translate/core'; | ||
import { Observable } from 'rxjs/Observable'; | ||
|
||
export class HashTranslateLoader implements TranslateLoader { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's more accurate changing the class name to |
||
getTranslation(lang: string): Observable<any> { | ||
return Observable.fromPromise(System.import(`../assets/i18n/${lang}.json`)); | ||
} | ||
} | ||
``` | ||
|
||
When your project cannot find `System` then adding this to your `typings.d.ts` file helps: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Cause |
||
```typescript | ||
declare var System: System; | ||
interface System { | ||
import(request: string): Promise<any>; | ||
} | ||
``` | ||
|
||
Now you can use the `HashTranslateLoader` with your `app.module`: | ||
```typescript | ||
@NgModule({ | ||
bootstrap: [AppComponent], | ||
imports: [ | ||
TranslateModule.forRoot({ | ||
loader: { | ||
provide: TranslateLoader, | ||
useClass: HashTranslateLoader | ||
} | ||
}) | ||
] | ||
}) | ||
export class AppModule { } | ||
``` | ||
|
||
One disadvantage of this solution is that you have to rebuild your application when there are only changes inside your language files. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think will be better changed to:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think you can remove the line
74
and change the title toAngular CLI/Webpack TranslateLoader Example