chore(deps): Bump i18next from 26.4.4 to 26.4.7 (#2248)

Bumps [i18next](https://github.com/i18next/i18next) from 26.4.4 to
26.4.7.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next/releases">i18next's
releases</a>.</em></p>
<blockquote>
<h2>v26.4.7</h2>
<ul>
<li>perf: <code>cloneInstance()</code> no longer inherits
<code>preload</code>. <code>loadResources()</code> adds every
<code>preload</code> language to each load, and clones copied
<code>preload</code> from the parent, so a clone's <code>init()</code>
and every <code>changeLanguage()</code> walked all preloaded languages ×
all namespaces through <code>queueLoad()</code> /
<code>hasResourceBundle()</code>, although the parent had already loaded
them into the shared store. With i18next-http-middleware (one clone +
<code>changeLanguage()</code> per request), 25 preloaded languages and
20 namespaces, that was most of the per-request CPU: the reproduction
from the issue went from ~90 µs to ~10 µs per request, the same as with
a single language. A clone now only loads what it uses itself: its
<code>changeLanguage()</code> no longer waits for parent preload
languages that are still loading (the parent's own <code>init()</code>
still does), and <code>clone.loadNamespaces()</code> loads the new
namespace for the clone's language and fallbacks instead of every
preloaded language. <code>clone.loadLanguages()</code> works as before,
the parent instance is unchanged, and passing <code>preload</code> to
<code>cloneInstance()</code> keeps the old behavior. Thanks <a
href="https://github.com/theMostCuriousHomunculus"><code>@​theMostCuriousHomunculus</code></a>
for the detailed report (<a
href="https://redirect.github.com/i18next/i18next/issues/2451">#2451</a>).</li>
</ul>
<h2>v26.4.6</h2>
<ul>
<li>fix: a fallback language whose formatted code is already in the
hierarchy is no longer added a second time.
<code>toResolveHierarchy()</code> checked the raw
<code>fallbackLng</code> value against the list, but the list holds
formatted codes, so any fallback written differently from its formatted
form slipped through: <code>lng: 'de-CH'</code> with <code>fallbackLng:
'de-ch'</code> gave <code>languages</code> <code>['de-CH', 'de',
'de-CH']</code>, and the same happened with <code>fallbackLng:
'EN'</code> + <code>cleanCode</code>, <code>lowerCaseLng</code>, and
Intl aliases (<code>iw-IL</code> → <code>he-IL</code>). Missing keys
were looked up in the same language twice. Only exact duplicates are
removed; the order is unchanged. Thanks <a
href="https://github.com/lprnmns"><code>@​lprnmns</code></a> (<a
href="https://redirect.github.com/i18next/i18next/pull/2450">#2450</a>).</li>
</ul>
<h2>v26.4.5</h2>
<ul>
<li>fix: <code>hasLoadedNamespace(ns, { lng })</code> no longer stays
<code>false</code> forever when the passed in <code>lng</code> is loaded
under another code, or not at all. It checked the load state of the raw
<code>lng</code>, but <code>loadLanguages()</code> stores a language
under its resolved code (<code>de-ch</code> → <code>de-CH</code>,
<code>de-CH</code> → <code>de</code> with <code>load:
'languageOnly'</code>) and skips a <code>lng</code> outside
<code>supportedLngs</code> entirely (only the fallback gets loaded), so
that state never got set. react-i18next's <code>useTranslation(ns, { lng
})</code> then never became ready: with <code>useSuspense</code> it kept
throwing an already resolved promise and React retried forever (100%
CPU, SSR never finished), without it the load effect re-rendered in a
loop. It now checks the code the language is actually loaded under, and
for a <code>lng</code> outside <code>supportedLngs</code> only waits for
the fallback, which is also what <code>t()</code> resolves to. Calls
without <code>lng</code> and the <code>precheck</code> (react-i18next's
<code>bindI18n: 'languageChanging'</code>) are unchanged (<a
href="https://redirect.github.com/i18next/react-i18next/issues/1934">react-i18next#1934</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/i18next/i18next/blob/master/CHANGELOG.md">i18next's
changelog</a>.</em></p>
<blockquote>
<h2>26.4.7</h2>
<ul>
<li>perf: <code>cloneInstance()</code> no longer inherits
<code>preload</code>. <code>loadResources()</code> adds every
<code>preload</code> language to each load, and clones copied
<code>preload</code> from the parent, so a clone's <code>init()</code>
and every <code>changeLanguage()</code> walked all preloaded languages ×
all namespaces through <code>queueLoad()</code> /
<code>hasResourceBundle()</code>, although the parent had already loaded
them into the shared store. With i18next-http-middleware (one clone +
<code>changeLanguage()</code> per request), 25 preloaded languages and
20 namespaces, that was most of the per-request CPU: the reproduction
from the issue went from ~90 µs to ~10 µs per request, the same as with
a single language. A clone now only loads what it uses itself: its
<code>changeLanguage()</code> no longer waits for parent preload
languages that are still loading (the parent's own <code>init()</code>
still does), and <code>clone.loadNamespaces()</code> loads the new
namespace for the clone's language and fallbacks instead of every
preloaded language. <code>clone.loadLanguages()</code> works as before,
the parent instance is unchanged, and passing <code>preload</code> to
<code>cloneInstance()</code> keeps the old behavior. Thanks <a
href="https://github.com/theMostCuriousHomunculus"><code>@​theMostCuriousHomunculus</code></a>
for the detailed report (<a
href="https://redirect.github.com/i18next/i18next/issues/2451">#2451</a>).</li>
</ul>
<h2>26.4.6</h2>
<ul>
<li>fix: a fallback language whose formatted code is already in the
hierarchy is no longer added a second time.
<code>toResolveHierarchy()</code> checked the raw
<code>fallbackLng</code> value against the list, but the list holds
formatted codes, so any fallback written differently from its formatted
form slipped through: <code>lng: 'de-CH'</code> with <code>fallbackLng:
'de-ch'</code> gave <code>languages</code> <code>['de-CH', 'de',
'de-CH']</code>, and the same happened with <code>fallbackLng:
'EN'</code> + <code>cleanCode</code>, <code>lowerCaseLng</code>, and
Intl aliases (<code>iw-IL</code> → <code>he-IL</code>). Missing keys
were looked up in the same language twice. Only exact duplicates are
removed; the order is unchanged. Thanks <a
href="https://github.com/lprnmns"><code>@​lprnmns</code></a> (<a
href="https://redirect.github.com/i18next/i18next/pull/2450">#2450</a>).</li>
</ul>
<h2>26.4.5</h2>
<ul>
<li>fix: <code>hasLoadedNamespace(ns, { lng })</code> no longer stays
<code>false</code> forever when the passed in <code>lng</code> is loaded
under another code, or not at all. It checked the load state of the raw
<code>lng</code>, but <code>loadLanguages()</code> stores a language
under its resolved code (<code>de-ch</code> → <code>de-CH</code>,
<code>de-CH</code> → <code>de</code> with <code>load:
'languageOnly'</code>) and skips a <code>lng</code> outside
<code>supportedLngs</code> entirely (only the fallback gets loaded), so
that state never got set. react-i18next's <code>useTranslation(ns, { lng
})</code> then never became ready: with <code>useSuspense</code> it kept
throwing an already resolved promise and React retried forever (100%
CPU, SSR never finished), without it the load effect re-rendered in a
loop. It now checks the code the language is actually loaded under, and
for a <code>lng</code> outside <code>supportedLngs</code> only waits for
the fallback, which is also what <code>t()</code> resolves to. Calls
without <code>lng</code> and the <code>precheck</code> (react-i18next's
<code>bindI18n: 'languageChanging'</code>) are unchanged (<a
href="https://redirect.github.com/i18next/react-i18next/issues/1934">react-i18next#1934</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/i18next/i18next/commit/5546d211a32e73642d22b57e58cc762338270afa"><code>5546d21</code></a>
26.4.7</li>
<li><a
href="https://github.com/i18next/i18next/commit/f27c937e5866f33700db40d0bf055694ee890cca"><code>f27c937</code></a>
build</li>
<li><a
href="https://github.com/i18next/i18next/commit/50ecc221940e99dcb36670c93b342a896165fca4"><code>50ecc22</code></a>
perf: clones no longer inherit preload, so changeLanguage on a clone
doesn't ...</li>
<li><a
href="https://github.com/i18next/i18next/commit/bc951ab36e601d459e4afe7040c72cc7632d3b9e"><code>bc951ab</code></a>
26.4.6</li>
<li><a
href="https://github.com/i18next/i18next/commit/45d0aba52fba755039a8f6f6be76825f5aebaa81"><code>45d0aba</code></a>
changelog + build for 26.4.6</li>
<li><a
href="https://github.com/i18next/i18next/commit/0458efc507c88e78b2daa4b0cab9c254cfdc77d2"><code>0458efc</code></a>
fix: don't repeat a fallback language that differs only in casing (<a
href="https://redirect.github.com/i18next/i18next/issues/2450">#2450</a>)</li>
<li><a
href="https://github.com/i18next/i18next/commit/ce7b9cf970b2e6dcbecc6eb997d460ea1ea811ad"><code>ce7b9cf</code></a>
26.4.5</li>
<li><a
href="https://github.com/i18next/i18next/commit/4d4c60720e05da72e53af33fa0a8e0d69a56487a"><code>4d4c607</code></a>
build</li>
<li><a
href="https://github.com/i18next/i18next/commit/8f8651e938e122b5e40eacf616c9fb823a189087"><code>8f8651e</code></a>
fix: hasLoadedNamespace with a passed in lng checks the code it is
actually l...</li>
<li><a
href="https://github.com/i18next/i18next/commit/15d0b9d90e0564947861b926352b06deff0a8a05"><code>15d0b9d</code></a>
changelog: link GHSA-5jr9-983r-c8x4 in v26.4.4</li>
<li>Additional commits viewable in <a
href="https://github.com/i18next/i18next/compare/v26.4.4...v26.4.7">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=i18next&package-manager=npm_and_yarn&previous-version=26.4.4&new-version=26.4.7)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This commit is contained in:
dependabot[bot]
2026-10-19 13:57:18 +00:00
committed by GitHub
parent 51664b082b
commit d5755ea60b
2 changed files with 5 additions and 5 deletions
+4 -4
View File
@@ -30,7 +30,7 @@
"downshift": "^9.4.0",
"events": "^3.3.0",
"file-saver": "^2.0.5",
"i18next": "^26.4.4",
"i18next": "^26.4.7",
"i18next-browser-languagedetector": "^8.2.1",
"i18next-resources-to-backend": "^1.2.3",
"json-stringify-pretty-compact": "^4.0.0",
@@ -6628,9 +6628,9 @@
}
},
"node_modules/i18next": {
"version": "26.4.4",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-26.4.4.tgz",
"integrity": "sha512-O+rqmQUi54OwAgnZ4SAwO6aRrbXZt36VZXWt6zvq0FpC3vJbH46oQRs6u4Uwm1vf8ZI7UqOXQiJhQVTor7vRiQ==",
"version": "26.4.7",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-26.4.7.tgz",
"integrity": "sha512-p/3hqy6EcuqRs6wNwBYwGGC1fzBJSMxV9zMuN814ab/7QjdZbXfjXwuPZdQbngX6KDOTxM01uUiZyqmMB8ghZg==",
"funding": [
{
"type": "individual",
+1 -1
View File
@@ -48,7 +48,7 @@
"downshift": "^9.4.0",
"events": "^3.3.0",
"file-saver": "^2.0.5",
"i18next": "^26.4.4",
"i18next": "^26.4.7",
"i18next-browser-languagedetector": "^8.2.1",
"i18next-resources-to-backend": "^1.2.3",
"json-stringify-pretty-compact": "^4.0.0",