Skip to content
This repository was archived by the owner on Nov 8, 2021. It is now read-only.

Howto write a HashTranslateLoader #39

Merged
merged 2 commits into from
Mar 16, 2018
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

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 to Angular CLI/Webpack TranslateLoader Example

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.

Choose a reason for hiding this comment

The 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.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you are using Angular CLI.....


```typescript
// webpack-translate-loader.ts
import { TranslateLoader } from '@ngx-translate/core';
import { Observable } from 'rxjs/Observable';

export class HashTranslateLoader implements TranslateLoader {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's more accurate changing the class name to WebpackTranslateLoader.

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:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cause System will not be available you need to add it to your custom typings.d.ts

```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.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think will be better changed to:

The disadvantage of this solution is that you have to rebuild the application everytime your translate files has changes.