@ngx-translate/core@18.0.0 and @ngx-translate/http-loader@18.0.0 are now stable on npm (latest).
v18 is the major API-cleanup release: standalone providers everywhere, signal-based internals, the default → fallback rename finalized, and the deprecated surface removed. It also resolves three long-standing semantic gotchas and baselines the workspace on Angular 22 / TypeScript 6.0.
Highlights
Standalone-first setup.TranslateModule is gone — use provideTranslateService() / provideChildTranslateService() (works in standalone and NgModule apps).
New *translateBlock="let t" structural directive for cleaner template translations.
New isLoading: Signal<boolean> — true while any use() load is in flight; read it for language-switching spinners.
Isolated subtrees are now truly isolated — own events, lookups, and language state.
Angular 18–22 supported (16 and 17 dropped); built and tested against Angular 18/19/20/21/22.
Breaking changes — required edits
TranslateModule removed. Replace TranslateModule.forRoot({...}) / forChild({...}) with provideTranslateService({...}) / provideChildTranslateService({...}). The pipe, directive, and service are standalone.
Deprecated default* symbols removed — rename:
Removed
Replacement
defaultLang
fallbackLang
setDefaultLang()
setFallbackLang()
getDefaultLang()
getFallbackLang()
onDefaultLangChange
onFallbackLangChange
DefaultLangChangeEvent
FallbackLangChangeEvent
langs
getLangs()
setValue() (util)
insertValue()
Also removed: useDefaultLang and defaultLanguage config fields (along with TranslateModule).
Deprecated (still works, warns once): using element text content as a key (<span translate>Hello</span>). Use [translate]="'KEY'", the translate pipe, or *translateBlock. It will be removed next major.
A failed use() no longer mutates state. On loader failure, currentLang() / lastUseLanguage stay at the prior value instead of switching to the failed language. Use isLoading() or the returned Observable's error channel to drive switching UI.
Isolated subtrees no longer see ancestor translationChange$ events, nor borrow keys from outer scopes. Isolation now means own events + own lookups + own language state. If you wanted shared translations with subtree-scoped state, use provideChildTranslateService({ extend: true }).
instant() "unloaded language" warning is deduplicated per isolated subtree (was once per service instance).
ITranslateService gains isLoading: Signal<boolean>. If you mock it via implements/extends ITranslateService, add isLoading = signal(false).asReadonly(). See the "Mocking TranslateService" recipe in the README.
Loader errors are now logged instead of silently swallowed.
This PR contains the following updates:
| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [@ngx-translate/core](https://github.com/ngx-translate/core) | [`^17.0.0` → `^18.0.0`](https://renovatebot.com/diffs/npm/@ngx-translate%2fcore/17.0.0/18.0.0) |  |  |
---
### Release Notes
<details>
<summary>ngx-translate/core (@​ngx-translate/core)</summary>
### [`v18.0.0`](https://github.com/ngx-translate/core/releases/tag/v18.0.0)
[Compare Source](https://github.com/ngx-translate/core/compare/v17.0.0...v18.0.0)
`@ngx-translate/core@18.0.0` and `@ngx-translate/http-loader@18.0.0` are now stable on npm (`latest`).
v18 is the **major API-cleanup release**: standalone providers everywhere, signal-based internals, the `default` → `fallback` rename finalized, and the deprecated surface removed. It also resolves three long-standing semantic gotchas and baselines the workspace on Angular 22 / TypeScript 6.0.
#### Highlights
- **Standalone-first setup.** `TranslateModule` is gone — use `provideTranslateService()` / `provideChildTranslateService()` (works in standalone *and* NgModule apps).
- **New `*translateBlock="let t"` structural directive** for cleaner template translations.
- **New `isLoading: Signal<boolean>`** — true while any `use()` load is in flight; read it for language-switching spinners.
- **Isolated subtrees are now truly isolated** — own events, lookups, and language state.
- **Angular 18–22 supported** (16 and 17 dropped); built and tested against Angular 18/19/20/21/22.
#### Breaking changes — required edits
**`TranslateModule` removed.** Replace `TranslateModule.forRoot({...})` / `forChild({...})` with `provideTranslateService({...})` / `provideChildTranslateService({...})`. The pipe, directive, and service are standalone.
**Deprecated `default*` symbols removed — rename:**
| Removed | Replacement |
| ------------------------ | ------------------------- |
| `defaultLang` | `fallbackLang` |
| `setDefaultLang()` | `setFallbackLang()` |
| `getDefaultLang()` | `getFallbackLang()` |
| `onDefaultLangChange` | `onFallbackLangChange` |
| `DefaultLangChangeEvent` | `FallbackLangChangeEvent` |
| `langs` | `getLangs()` |
| `setValue()` (util) | `insertValue()` |
Also removed: `useDefaultLang` and `defaultLanguage` config fields (along with `TranslateModule`).
**Deprecated (still works, warns once):** using element text content as a key (`<span translate>Hello</span>`). Use `[translate]="'KEY'"`, the `translate` pipe, or `*translateBlock`. It will be removed next major.
#### Potentially breaking — low impact (behavior changes)
- **A failed `use()` no longer mutates state.** On loader failure, `currentLang()` / `lastUseLanguage` stay at the prior value instead of switching to the failed language. Use `isLoading()` or the returned Observable's error channel to drive switching UI.
- **Isolated subtrees no longer see ancestor `translationChange$` events, nor borrow keys from outer scopes.** Isolation now means own events + own lookups + own language state. If you wanted shared translations with subtree-scoped state, use `provideChildTranslateService({ extend: true })`.
- **`instant()` "unloaded language" warning is deduplicated per isolated subtree** (was once per service instance).
- **`ITranslateService` gains `isLoading: Signal<boolean>`.** If you mock it via `implements`/`extends ITranslateService`, add `isLoading = signal(false).asReadonly()`. See the "Mocking TranslateService" recipe in the README.
- Loader errors are now **logged** instead of silently swallowed.
#### Migration
Full step-by-step guide: **<https://ngx-translate.org>** → Getting Started → [Migration Guide](https://ngx-translate.org/getting-started/migration-guide/#_top).
***
**Angular compatibility:** 18, 19, 20, 21, 22 · **TypeScript:** 6.0 · **RxJS:** ≥7
</details>
---
### Configuration
📅 **Schedule**: (UTC)
- Branch creation
- At any time (no schedule defined)
- Automerge
- At any time (no schedule defined)
🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box
---
This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xNzguMSIsInVwZGF0ZWRJblZlciI6IjQ0LjE3OC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJyZW5vdmF0ZSJdfQ==-->
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
This PR contains the following updates:
^17.0.0→^18.0.0Release Notes
ngx-translate/core (@ngx-translate/core)
v18.0.0Compare Source
@ngx-translate/core@18.0.0and@ngx-translate/http-loader@18.0.0are now stable on npm (latest).v18 is the major API-cleanup release: standalone providers everywhere, signal-based internals, the
default→fallbackrename finalized, and the deprecated surface removed. It also resolves three long-standing semantic gotchas and baselines the workspace on Angular 22 / TypeScript 6.0.Highlights
TranslateModuleis gone — useprovideTranslateService()/provideChildTranslateService()(works in standalone and NgModule apps).*translateBlock="let t"structural directive for cleaner template translations.isLoading: Signal<boolean>— true while anyuse()load is in flight; read it for language-switching spinners.Breaking changes — required edits
TranslateModuleremoved. ReplaceTranslateModule.forRoot({...})/forChild({...})withprovideTranslateService({...})/provideChildTranslateService({...}). The pipe, directive, and service are standalone.Deprecated
default*symbols removed — rename:defaultLangfallbackLangsetDefaultLang()setFallbackLang()getDefaultLang()getFallbackLang()onDefaultLangChangeonFallbackLangChangeDefaultLangChangeEventFallbackLangChangeEventlangsgetLangs()setValue()(util)insertValue()Also removed:
useDefaultLanganddefaultLanguageconfig fields (along withTranslateModule).Deprecated (still works, warns once): using element text content as a key (
<span translate>Hello</span>). Use[translate]="'KEY'", thetranslatepipe, or*translateBlock. It will be removed next major.Potentially breaking — low impact (behavior changes)
use()no longer mutates state. On loader failure,currentLang()/lastUseLanguagestay at the prior value instead of switching to the failed language. UseisLoading()or the returned Observable's error channel to drive switching UI.translationChange$events, nor borrow keys from outer scopes. Isolation now means own events + own lookups + own language state. If you wanted shared translations with subtree-scoped state, useprovideChildTranslateService({ extend: true }).instant()"unloaded language" warning is deduplicated per isolated subtree (was once per service instance).ITranslateServicegainsisLoading: Signal<boolean>. If you mock it viaimplements/extends ITranslateService, addisLoading = signal(false).asReadonly(). See the "Mocking TranslateService" recipe in the README.Migration
Full step-by-step guide: https://ngx-translate.org → Getting Started → Migration Guide.
Angular compatibility: 18, 19, 20, 21, 22 · TypeScript: 6.0 · RxJS: ≥7
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate CLI.
970cce823fto80cba5bc1e80cba5bc1eto3b0133b8ff3b0133b8ffto1f7f9158341f7f915834to4e237beff9View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.