@pearnaly/ngx-translate-browser-i18n-loader

Loads _locale/<lang>/messages.json translation files as defined by the browser.i18n (or chrome.i18n) api for browser extensions made with Angular and translated with ngx-translate

Usage no npm install needed!

<script type="module">
  import pearnalyNgxTranslateBrowserI18nLoader from 'https://cdn.skypack.dev/@pearnaly/ngx-translate-browser-i18n-loader';
</script>

README

ngx-translate-browser-i18n-loader

CI npm version

Loads _locale/<lang>/messages.json translation files as defined by the browser.i18n (or chrome.i18n) api for browser extensions made with Angular and translated with ngx-translate

Installation

npm install @pearnaly/ngx-translate-browser-i18n-loader

Usage

Your translation files are supposed to be under _locale/<lang>/messages.json (ex _locale/en_US/messages.json), that's why the path is hardcoded (Still if you need it please let me know I can extend it).

You have two ways to use it:

Extended service

The best way is to use the TranslateBrowserI18nService (extending the TranslateService). This will use the browser native browser/chrome.i18n translation functionality which internally reads your translation files under _locale/<lang>/messages.json. If you configure a different language than the browser one, then the native translation cannot be used, and the service will load (http) the appropriate translation file.

@NgModule({
  ...
  imports: [
    ...
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useClass: TranslateBrowserI18nLoader,
        deps: [HttpClient],
      },
    }),
  ],
  providers: [
    ...
    { provide: TranslateService, useClass: NativeTranslateService },
    { provide: AVAILABLE_LANGUAGES, useValue: ['en', 'en-CA', 'de', 'fr', 'it'] },
  ],
  ...
})
export class AppModule {
}

The default used language will be the one of the browser, and the default default language will be the one from the extension manifest. Provide the languages you support (directories under _locale/ but with - instead of _). The service implements the same fallback mechanism as the browser: if you try to use 'en-GB' and if it's not available, if will fallback to 'en'.

Loader only

If you don't want (or cannot) use the browser-native browser/chrome.i18n translation functionality, then just use the loader:

@NgModule({
  ...
  imports: [
    ...
    HttpClientModule,
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useClass: TranslateBrowserI18nLoader,
        deps: [HttpClient]
      }
    })
  ],
  ...
})
export class AppModule {
}

In your language initialization, you can use browser.i18n.getUILanguage() to load the current language of the browser.