Angular helpers for internationalizing and localizing your application
To set up or update an Angular project with this library use the Angular CLI's schematic commands:
ng add @hug/ngx-g11n
More details
The
ng add
command will ask you the following questions:
- ? Default language: the default language used by your application
- ? Default currency: the default currency used by your application
- ? Use navigator language: whether to use the navigator language
- ? Use Angular locale extra: whether to also register Angular locale extra
- ? Translations path: the path to your translation files
- ? Query param name: the name of the query parameter used to define the language
- ? Auto-inject locale in request headers: whether to inject the language in every requests header
- ? Add support for Angular Material: whether to also configure things for Angular Material
- ? Add locales [fr-CH, de-CH] by defaults: whether to add fr-CH and de-CH by default
And based on your answers, it will also potentialy perform the following actions:
- Run
ng add @angular/localize
schematic- Install
@angular/material-date-fns-adapter
as a dev dependency- Deploy default language files in either
/public
or/src/assets
folder- Add
skipLibCheck
inangularCompilerOptions
of yourtsconfig.json
file (for ng14 apps)- Add or modify the required configurations in your
angular.json
file:"projects": { "my-app": { "i18n" { "sourceLocale": "fr-CH" }, "architect": { "build": { "options": { "i18nMissingTranslation": "error" } }, "extract-i18n": { "builder": "@angular-devkit/build-angular:extract-i18n", "options": { "outputPath": "projects/demo-app/public/i18n", "outFile": "fr-CH.json", "format": "json" } } } } }- Provide and configure the library
ng update @hug/ngx-g11n
This library uses the official @angular/localize package under the hood, so manage your translations just as you would with it.
Then use the command ng extract-i18n
to extract the marked messages from your components into a single source language file.
<!-- Template content -->
<span i18n="@@demoText">Message to translate</span>
<!-- Template attribute -->
<span subtitle="Message to translate" i18n-subtitle="@@demoText">...</span>
<!-- Template ICU -->
<span i18n="@@demoPluralText">{items.length, plural, =0 {No item} =1 {1 item} other {{{items.length}} items}}</span>
// Script
const msgToTranslate = $localize`:@@demoText:Message to translate`;
The following helpers are available.
Get the current language of the application.
// import { currentLanguage } from '@hug/ngx-g11n/legacy'; /* for ng14 apps */
import { currentLanguage } from '@hug/ngx-g11n';
console.log(currentLanguage());
Set a language and reload the application.
// import { setLanguage } from '@hug/ngx-g11n/legacy'; /* for ng14 apps */
import { setLanguage } from '@hug/ngx-g11n';
setLanguage('en-US');
The behavior of the library can be configured either in:
app.config.ts
(if the app is a standalone Angular application)
// import { provideG11n } from '@hug/ngx-g11n/legacy'; /* for ng14 apps */
import { provideG11n } from '@hug/ngx-g11n';
export const appConfig: ApplicationConfig = {
providers: [
provideG11n(...features)
]
};
app.module.ts
(if the app is not a standalone Angular application)
// import { G11nModule } from '@hug/ngx-g11n/legacy'; /* for ng14 apps */
import { G11nModule } from '@hug/ngx-g11n';
@NgModule({
imports: [
G11nModule.forRoot(...features)
]
})
export class AppModule { }
The following features are available:
This feature will configure the library with fr-CH
and de-CH
as the default locales.
If you are not using Angular Material or prefer to use any other locale, please refer to the withLocales
feature.
import { withDefaultLocales } from '@hug/ngx-g11n/locales';
provideG11n(withDefaultLocales())
This feature will configure the library with the given locales.
The extra
and datefns
are optionals and based on your personal requirements.
// import { withLocales } from '@hug/ngx-g11n/legacy'; /* for ng14 apps */
import { withLocales } from '@hug/ngx-g11n';
provideG11n(withLocales({
'fr-CH': {
base: () => import('@angular/common/locales/fr-CH'),
extra: () => import('@angular/common/locales/extra/fr-CH'),
datefns: () => import('date-fns/locale/fr-CH')
}
}))
This feature will configure the library with everything that's required for Angular Material.
As the name suggests, it will also use the datefns adapter.
import { withDateFnsMaterial } from '@hug/ngx-g11n/material';
provideG11n(withDateFnsMaterial())
This feature will configure the library with an http interceptor.
Accept-Language: xyz
will be added to the header of every http requests.
// import { withInterceptor } from '@hug/ngx-g11n/legacy'; /* for ng14 apps */
import { withInterceptor } from '@hug/ngx-g11n';
provideG11n(withInterceptor())
This feature will override the defaults library options.
// import { withOptions } from '@hug/ngx-g11n/legacy'; /* for ng14 apps */
import { withOptions } from '@hug/ngx-g11n';
interface G11nOptions {
/** @default 'fr-CH' */
defaultLanguage?: string;
/** @default 'CHF' */
defaultCurrency?: string;
/** @default true */
useNavigatorLanguage?: boolean;
/** @default false */
loadLocaleExtra?: boolean;
/** @default '/translations' */
translationsPath?: string;
/** @default 'lang' */
queryParamName?: string;
/** @default localStorage */
storage?: Storage;
/** @default NO_DEBUG */
debug?: G11nDebug;
}
provideG11n(withOptions(options))
The following modes are available:
Will display each translation key next to its translation (ex: "message (@key)").
Useful when you need to quickly and easily retrieve the associated key of a message.
Use
withOptions({ debug: G11nDebug.SHOW_KEYS }))
or the query parameter (ex:?lang=keys
).
Will replace every translation with a dash (-
).
Useful when you need to see what messages are left untranslated.
Use
withOptions({ debug: G11nDebug.DUMMY_TRANSLATIONS }))
or the query parameter (ex:?lang=dummy
).
Will not load any external translation file, meaning the application will load with the hardcoded translations.
Use
withOptions({ debug: G11nDebug.NO_TRANSLATIONS }))
.
Disable any debug mode.
Use
withOptions({ debug: G11nDebug.NO_DEBUG })
.
See the developer docs.
Want to file a bug, contribute some code or improve documentation? Excellent!
But please read up first on the guidelines for contributing, and learn about submission process, coding rules and more.
Please read and follow the Code of Conduct, and help us keep this project open and inclusive.
Copyright (C) 2025 HUG - Hรดpitaux Universitaires Genรจve