Skip to content

chore(deps): update react-i18next to 17.1.9 - #22

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/react-i18next-17.x
Open

renovate[bot] wants to merge 1 commit into
mainfrom
renovate/react-i18next-17.x

Conversation

@renovate

@renovate renovate Bot commented Mar 27, 2026 •

Copy link
Copy Markdown
Contributor

Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence
react-i18next 16.5.2 → 17.1.9 age confidence

Release Notes

i18next/react-i18next (react-i18next)

v17.1.9

Compare Source

  • fix(useTranslation): namespaces added to or removed from the ns array are now picked up. The hook used the array itself as the useMemo dependency list, and React only compares the entries both lists have in common when its length changes, so going from useTranslation(['nsA']) to useTranslation(['nsA', 'nsB']) kept returning ['nsA']: React warned that the dependency array changed size, nsB was never loaded, and with nsMode: 'fallback' keys only in nsB rendered as the key. Removing a namespace kept the old list the same way. The namespaces are now compared by content, so a growing list loads the new namespace (suspending until it is loaded, as switching from 'nsA' to 'nsB' already does) and t uses it. Lists that keep their length behave as before. Thanks @​lprnmns (#​1945).

v17.1.8

Compare Source

  • fix(Trans): an interpolation variable named format is no longer dropped. Trans reads format in an interpolation object as the formatter name ({{ value, format }}), so with {{ format }} as the only key nothing was left: <Trans>Export as {{ format }}</Trans> warned TRANS_INVALID_OBJ and used the default string Export as instead of Export as {{format}}. When format is the object's only key it is now treated as the variable. {{ value, format }} works as before. Without an i18nKey, the key derived from the children changes accordingly, from Export as to Export as {{format}}. i18next-cli serializes Trans children with react-i18next, so extracting with this version produces the same key. Thanks @​Pharex38 (#​1944).

v17.1.7

Compare Source

  • fix(IcuTrans): each HTML entity in a translation is now decoded exactly once. Named, decimal and hexadecimal entities were decoded in three passes, and each pass decoded the output of the previous one, so an escaped numeric entity was decoded twice: "Write &amp;#&#8203;169; to get &#&#8203;169;" rendered Write © to get © instead of Write &#&#8203;169; to get ©, and &amp;#&#8203;60; rendered < instead of &#&#8203;60;. This also hit interpolated values with escapeValue: true, where a value containing &#&#8203;60; is escaped to &amp;#&#8203;60;. Escaped named entities like &amp;lt; already stayed &lt;, as browsers and Trans decode them. Unknown named entities and entities above U+10FFFF still stay as written. Thanks @​Pharex38 (#​1943).

v17.1.6

Compare Source

  • fix(Trans): a count passed in tOptions is now used. Trans spread tOptions and then set its own count prop, so a count only in tOptions was overwritten with undefined: <Trans i18nKey="items" tOptions={{ count: 5 }} /> rendered the key items instead of 5 items, and with children Trans could pick the wrong plural form. Like context, Trans now falls back to tOptions.count, handled the same way as the count prop. A count prop, a count in the children or values.count still take precedence, and tOptions is not modified. Thanks @​nk-batman21 (#​1942).

v17.1.5

Compare Source

  • fix(Trans): with an array of keys and no children, Trans now falls back to the last key when none of them has a translation, as t() does. It used the array itself as defaultValue, which i18next handles as an object, so <Trans i18nKey={['notifications.crm_item_created', 'crm_item_created']} components={[<strong />]} /> rendered key 'crm_item_created (en)' returned an object instead of string. instead of crm_item_created. An array of selectors falls back to the key of the last selector. The first key that has a translation still wins, and children, defaults and tOptions.defaultValue are used as before. With saveMissing, these calls now report the missing key, like a single i18nKey does. Thanks @​nk-batman21 (#​1941).

v17.1.4

Compare Source

  • fix(types): without allowObjectInHTMLChildren, the children of HTML elements now use React's own type (DOMAttributes<T>['children']) instead of the ReactI18NextChildren | Iterable<ReactI18NextChildren> union. Both accept the same children, so nothing compiles differently. For default installs the global HTMLAttributes augmentation now repeats whatever @types/react declares, so changes in React's types flow through instead of meeting a copy, and type errors on element children no longer list an extra Iterable<...>. With allowObjectInHTMLChildren: true nothing changes. First step of #​1928.

v17.1.3

Compare Source

  • fix(IcuTrans): numeric HTML entities above U+FFFF, like emoji, now decode to the right character. "Hello &#x1F44B; <0>friend</0> &#&#8203;127881;" rendered U+F44B and U+F389, private-use glyphs that usually show as a box, instead of 👋 and 🎉: the decoder used String.fromCharCode, which keeps only the low 16 bits of the code point. This shows up with translations that a TMS or CMS exports HTML-encoded. Entities above U+10FFFF, which are no valid code points, now stay as written instead of becoming U+0000. Entities below U+10000, including surrogate pairs written as two entities, decode as before. Thanks @​nk-batman21 (#​1940).

v17.1.2

Compare Source

  • fix(Trans): when the only child is a string, a tag whose index the children don't have now renders its own text. <Trans i18nKey="welcome">Welcome</Trans> with "Welcome <1>friend</1>" rendered Welcome e, and defaults="Hi <1>there</1>" with the child Hi rendered Hi i. The fallback for a single object of components ({{ 1: <strong /> }}) looked the tag up on the string and rendered one of its characters. It now applies only when that child is an object, so {{ 1: <strong /> }} renders as before, and the tag falls back to its inner text, as it already did with several children or with a number or an element as the only child. This also stops a single-entry array child holding null ({[null]}, e.g. from a .map that returned null) from throwing Cannot read properties of null. Thanks @​Cayan (#​1939).

v17.1.1

Compare Source

  • fix(Trans): with components as an object with index keys, the component for key 0 is now rendered. components={{ 0: <a href={path} /> }} with "You're eligible. <0>Get started here.</0>" rendered the text without the link, a self-closing <0/> rendered nothing, and in <0>a <1>b</1></0> both elements were lost, while keys 1 and up and the array form worked. The object was passed on as the indexed children, so <0> resolved to the object itself. It is now looked up by key, like a named components map. This also fixes an array components next to react.transDefaultProps.components, which the merge turns into such an object ({ Bold, 0, 1 }) and so lost its first entry, and a self-closing named tag in a mixed object ({ 0: <a />, Bold: <b /> } with <Bold/>), which rendered as the text <Bold />. Arrays, named maps and index objects starting at 1 render as before. Thanks @​nk-batman21 (#​1938).

v17.1.0

Compare Source

  • feat(types): with i18next's new parseInterpolation: 'icu' (or 'mf2') type option (i18next v26.5.0), the values of IcuTrans and IcuTransWithoutContext are typed from the message of i18nKey, like the options of t(): a misspelled argument, a value of the wrong type or a value meant for another key is a type error. values was Record<string, any> before, and still is with any other parseInterpolation setting. values stays optional, as on Trans. useTranslation's t and Trans values get the checks from i18next's types without changes here.
  • fix(types): IcuTrans and IcuTransWithoutContext now infer the literal i18nKey (const type parameter, as Trans does), so props that depend on the key are checked against that key instead of all keys of the namespace.

v17.0.21

Compare Source

  • fix(IcuTrans): explicit values now win over interpolation.defaultVariables, as they do in t(). IcuTrans merged them the other way round, so <IcuTrans values={{ user: 'John Doe' }} /> rendered the configured default variable user instead of John Doe. Trans had the same inverted merge and is fixed too. Compatibility note: only names that are set both in values and in defaultVariables render differently.
  • feat: new entry point react-i18next/IcuTransWithoutContext (with types) for React Server Components. Importing IcuTransWithoutContext from react-i18next in a Server Component could fail the build with createContext is not a function, because the main entry creates the React context when it is loaded. Like react-i18next/TransWithoutContext, the new entry point does not.
  • fix(build): the ESM build's dist/es/package.json now declares "sideEffects": false, like the root package.json already did. Bundlers use the nearest package.json, so the ESM build counted as having side effects and unused exports were kept: an app that only uses Trans still bundled IcuTrans with its HTML entity decoder, useTranslation and use-sync-external-store. With esbuild, a Trans-only bundle (React and i18next external) goes from 20.9 KB to 11.6 KB minified, 8.3 KB to 5.0 KB gzipped.
  • docs: the icu.macro Babel macro is now marked as deprecated in favour of using IcuTrans directly. It fails on Babel 8 (t.jSXIdentifier is not a function), <Plural count={count}> renders the raw ICU message, and a React key on <Plural>/<Select> becomes an ICU case. It keeps working on Babel 7 and is not removed. The IcuTrans docs page has a corrected example and props table and covers Server Components.

v17.0.20

Compare Source

  • fix: useTranslation no longer suspends when a missing namespace is loaded by a synchronous backend. With useSuspense (the default), a namespace that wasn't in the store yet always made the component throw the loading promise, even when the backend had already delivered the resources while that promise was being created. React then showed the Suspense fallback and rendered again right away, which appears as a fallback flash (a white flash in React Native) and costs performance. The hook now starts the load first, checks the store again and only suspends if the namespace is still missing. This helps every backend that calls back synchronously, for example i18next-resources-to-backend with a static resources object or a loader that returns the data directly. Async backends, and an instance that isn't initialized yet, still suspend as before. Thanks @​oblador (#​1937).

v17.0.19

Compare Source

  • fix: useTranslation with an inline selector keyPrefix (useTranslation('ns', { keyPrefix: ($) => $.role })) returned a new t on every render, so every effect, useCallback and useMemo depending on t ran again each time. The cached t was compared against the keyPrefix function itself, and an inline arrow is a new function on every render. It is now compared against the key the selector resolves to (with the same options and namespace list getFixedT resolves it with), so t keeps its identity as long as the resolved prefix does, just like a string keyPrefix. A selector that resolves to a different key still gets a new t, and i18next still resolves the selector on each t call as before. Fixes #​1936.
  • fix: useTranslation kept returning the previous t when only the namespace (useTranslation('a') → useTranslation('b')) or only the i18n instance (another instance with the same language, via props or I18nextProvider) changed on a mounted component. That t kept resolving against the old namespace or instance until something else (the language, the ready state, a bound i18n event) produced a new one. Both are now part of the check that decides whether the cached t can be reused.

v17.0.18

Compare Source

  • fix(Trans): with shouldUnescape, the default unescape now turns &nbsp; and &#&#8203;160; into a no-break space (U+00A0) instead of a regular space (U+0020). The regular space dropped what the entity is for: u&nbsp;nás or 10&nbsp;km could wrap across lines, and consecutive &nbsp;s collapsed into one space. This also matches IcuTrans, whose entity decoder already mapped &nbsp; to U+00A0. Compatibility note: only affects shouldUnescape; snapshots or exact textContent comparisons of such text now contain U+00A0 (Testing Library's default normalizer still matches it as a space). A custom react.unescape function can restore the old mapping for text nodes. Thanks @​lprnmns (#​1935).

v17.0.17

Compare Source

  • perf: useTranslation no longer unsubscribes and resubscribes its i18n listeners on every render. The subscribe callback handed to useSyncExternalStore depended on the merged options object, which is rebuilt whenever props is a new object: with no options (the {} default), with options passed inline (useTranslation('ns', { keyPrefix })), and through withTranslation and <Translation>. A new subscribe makes React resubscribe, so each render of each caller ran i18n.off and i18n.on in an extra effect. It now depends only on the instance and the bindI18n/bindI18nStore event names. No updates were ever missed, because React re-checks the snapshot after resubscribing; this only removes the churn, which adds up with many mounted components that re-render often. Reported via next-i18next#2349.

v17.0.16

Compare Source

  • fix(Trans): a selector i18nKey that points into a secondary namespace of useTranslation now resolves the same way t() does. With const { t } = useTranslation(['ns1', 'ns2']), t($ => $.ns2.message) works since 17.0.7, but <Trans t={t} i18nKey={$ => $.ns2.message} /> rendered the raw key (or its children). Trans always passed an ns option to t, filled from t.ns (the primary namespace only), and an explicit ns makes i18next's fixed t skip the hook's full namespace list (scopeNs). When Trans or TransWithoutContext gets a t that carries its own namespace and no ns prop, it now leaves ns out and lets that t apply its own. String keys, keyPrefix, nsMode: 'fallback', an explicit ns prop and Trans without a t prop behave as before. Compatibility note: if the primary namespace has a nested object named like a secondary namespace (ns1 → ns2.message), Trans now resolves $ => $.ns2.message to ns2:message, as t() already does. Fixes #​1933.

v17.0.15

Compare Source

  • fix(Trans): empty paired component tags now preserve a component's single valid React-element child, whether supplied through a named component map (<wrap></wrap>), a component array (<0></0>), or indexed JSX children (<1></1>). This matches the existing behavior for two or more children and self-closing tags. React represents one JSX child as an element and multiple children as an array; the previous array-only check silently rendered the one-child case empty. Compatibility note: when that sole element contains an interpolation object, the restored raw children can expose an existing React rendering limitation as an error instead of silently rendering empty; the same shape already errors with two children. Fixes #​1932.

v17.0.14

Compare Source

  • fix: the i18n object returned by useTranslation was only refreshed when i18n.language changed, so a resolvedLanguage (or languages) change of its own kept handing components the previous snapshot. That happens whenever the translations for the current language arrive after the switch — i18next resolves to the fallback until its store has them — and components reading i18n.resolvedLanguage (language switchers, for example) then stayed one switch behind. The cached wrapper is now keyed on all three language fields, which are exactly the ones the surrounding useMemo already depends on; wrapper identity still only changes when the language state does, so the caching from #​1885 is unaffected. Reported via next-i18next#2348.

v17.0.13

Compare Source

  • fix(types): the selector-form keyPrefix overload of useTranslation() is now available under enableSelector: 'strict'. useTranslation was gated on true | 'optimize' only, so under 'strict' it resolved to the legacy signature and the selector overload disappeared entirely (keyPrefix: ($) => $.ns.foo failed with Type '($: any) => any' is not assignable to type 'undefined'). Trans already handled all three modes. Companion to the same fix for getFixedT in i18next#2446. Thanks @​hovelopin (#​1930).

v17.0.12

Compare Source

  • fix(IcuTrans): key-less icu.macro nodes (<Trans>Welcome, {name}!</Trans>, <Select>, <Plural> without i18nKey) rendered an empty string since 17.0.0. The macro now emits <IcuTrans defaultTranslation="…"> without a key and IcuTrans passed undefined to t(), which returns ''. Like Trans, IcuTrans now uses defaultTranslation as the key when i18nKey is not provided.

v17.0.11

Compare Source

  • chore: html-parse-stringify updated to ^4.0.1. The parser powering <Trans> is now actively maintained under the i18next org (i18next/html-parse-stringify) after years without upstream releases. 4.x brings modern dual ESM/CJS packaging with an exports map, zero runtime dependencies, reworked TypeScript types and a long list of parser fixes (literal < in text, multiline/CRLF attribute values, comments containing >, doctype handling, quote-aware bracket handling).
  • refactor(Trans): the internal escapeLiteralLessThan scanner (~80 lines) is replaced by the parser's new allowedTags option with identical semantics: only numbered tags, kept basic HTML tags and known component names are parsed as markup, any other tag-shaped sequence in the translation stays literal text. Rendered output is unchanged (all 493 tests pass, including the #​1880 and #​1893 escaping cases).

v17.0.10

Compare Source

  • fix(warnings): the useTranslation and Trans "You will need to pass in an i18next instance" warnings now match the useSSR wording, mentioning the props/context alternatives and the most common unexplained cause at scale: duplicate react-i18next copies in monorepo setups. The Trans variant also referenced the internal i18nextReactModule name; it now points to the public initReactI18next API.
  • feat(warnings): development-only warning (SUSPENDED_WHILE_LOADING, logged once) right before useTranslation suspends while translations are loading. With the default useSuspense: true and no <Suspense> boundary this previously surfaced as a blank screen or a cryptic React error; the warning now names both fixes (add a <Suspense> boundary or set react.useSuspense: false). No-op in production builds; the process.env.NODE_ENV check is wrapped so runtimes without a process global (raw ESM in the browser, some edge runtimes) stay silent instead of throwing.
  • ci: weekly workflow typechecking the test suite against @types/react@next / @types/react-dom@next, so the next React major's type changes (like the React 18 TFunctionResult/children wave) surface before user reports.

v17.0.9

Compare Source

  • fix: allow TypeScript 7 in the optional typescript peer dependency range (^5 || ^6 || ^7). With typescript@7.0.2 in a project, npm install failed with an ERESOLVE peer conflict. Fixes #​1927, thanks @​andikapradanaarif.
  • fix(types): <Trans t={t} ns="ns" …> with a t from useTranslation(['ns']) now typechecks under TypeScript 7. TS7 intersects the Ns inference candidates coming from the t prop (readonly ['ns']) and the ns prop ('ns') into an unsatisfiable 'ns' & readonly ['ns'], where TS6 resolved them. The ns prop on TransProps, TransSelectorProps and IcuTransWithoutContextProps now also accepts a single namespace out of an array-typed Ns (Ns | (Ns extends readonly (infer S extends string)[] ? S : never)) — which matches runtime behavior and is unchanged under TS5/TS6.

v17.0.8

Compare Source

  • fix(types): <Trans i18nKey={$ => ...}> now typechecks under enableSelector: 'strict'. The Trans component's conditional type was gated on _EnableSelector extends true | 'optimize', excluding 'strict' and falling back to the legacy string-key signature. Runtime was already correct (it calls keyFromSelector(i18nKey) whenever typeof i18nKey === 'function'); this is a type-only fix that widens the conditional to include 'strict'. Thanks @​Faithfinder (#​1921)

v17.0.7

Compare Source

  • feat: useTranslation([nsA, nsB, ...]) now passes its full namespace list to getFixedT via the new scopeNs opt (requires i18next ≥ v26.0.10). This makes selector calls with a secondary-namespace prefix resolve correctly under default nsMode: t($ => $.nsB.foo) previously missed silently because the bound ns was the primary string only and i18next's selector rewrite needed an array. Resolution semantics are unchanged — plain t('key') lookups still stay isolated to the primary namespace by default; use nsMode: 'fallback' to opt into multi-ns fallback resolution as before. Fixes i18next#2429 for useTranslation-based callers.

v17.0.6

Compare Source

  • fix: restore the v17 nodesToString output format consumed by i18next-cli's extractor while still rendering 1919 correctly
    • 17.0.5 fixed 1919 by changing what nodesToString produced, which inadvertently changed the extracted translation strings for keep-tags wrapping non-keep React elements
    • The fix now lives in the renderer: indexed <N> placeholders nested inside a keep-tag are scoped to that tag's own original React children (matching kept tags by name and positional occurrence at each level), so the translation string format produced by nodesToString is unchanged

v17.0.5

Compare Source

  • fix: <Trans /> no longer breaks child rendering when a kept HTML node (transKeepBasicHtmlNodesFor) wraps a non-keep React element 1919 — superseded by 17.0.6, which keeps the same runtime fix without changing the nodesToString output

v17.0.4

Compare Source

  • fix: avoid React does not recognize the 'i18nIsDynamicList' prop on a DOM element warning 1915

v17.0.3

Compare Source

  • fix: avoid invalid prop on React.Fragment inside <Trans /> 1914

v17.0.2

Compare Source

  • fix(IcuTrans): explicit values now win over interpolation.defaultVariables, as they do in t(). IcuTrans merged them the other way round, so <IcuTrans values={{ user: 'John Doe' }} /> rendered the configured default variable user instead of John Doe. Trans had the same inverted merge and is fixed too. Compatibility note: only names that are set both in values and in defaultVariables render differently.
  • feat: new entry point react-i18next/IcuTransWithoutContext (with types) for React Server Components. Importing IcuTransWithoutContext from react-i18next in a Server Component could fail the build with createContext is not a function, because the main entry creates the React context when it is loaded. Like react-i18next/TransWithoutContext, the new entry point does not.
  • fix(build): the ESM build's dist/es/package.json now declares "sideEffects": false, like the root package.json already did. Bundlers use the nearest package.json, so the ESM build counted as having side effects and unused exports were kept: an app that only uses Trans still bundled IcuTrans with its HTML entity decoder, useTranslation and use-sync-external-store. With esbuild, a Trans-only bundle (React and i18next external) goes from 20.9 KB to 11.6 KB minified, 8.3 KB to 5.0 KB gzipped.
  • docs: the icu.macro Babel macro is now marked as deprecated in favour of using IcuTrans directly. It fails on Babel 8 (t.jSXIdentifier is not a function), <Plural count={count}> renders the raw ICU message, and a React key on <Plural>/<Select> becomes an ICU case. It keeps working on Babel 7 and is not removed. The IcuTrans docs page has a corrected example and props table and covers Server Components.

v17.0.1

Compare Source

  • fix: useTranslation with an inline selector keyPrefix (useTranslation('ns', { keyPrefix: ($) => $.role })) returned a new t on every render, so every effect, useCallback and useMemo depending on t ran again each time. The cached t was compared against the keyPrefix function itself, and an inline arrow is a new function on every render. It is now compared against the key the selector resolves to (with the same options and namespace list getFixedT resolves it with), so t keeps its identity as long as the resolved prefix does, just like a string keyPrefix. A selector that resolves to a different key still gets a new t, and i18next still resolves the selector on each t call as before. Fixes #​1936.
  • fix: useTranslation kept returning the previous t when only the namespace (useTranslation('a') → useTranslation('b')) or only the i18n instance (another instance with the same language, via props or I18nextProvider) changed on a mounted component. That t kept resolving against the old namespace or instance until something else (the language, the ready state, a bound i18n event) produced a new one. Both are now part of the check that decides whether the cached t can be reused.

v17.0.0

Compare Source

Potentially breaking changes
  • fix: transKeepBasicHtmlNodesFor now correctly preserves HTML tag names when children contain interpolations or mixed content 230
    • Previously, <strong>{{name}}</strong> was incorrectly serialized as <1>{{name}}</1> — the tag name was only preserved for plain string children
    • This bug existed since the feature was introduced and affects auto-generated keys (when no explicit i18nKey is provided)
    • If you rely on auto-generated Trans keys containing indexed tags for kept HTML elements with interpolation children, you will need to update your translation files
Other changes
  • updated dev dependencies (vitest, rollup plugins, happy-dom, typescript, etc.)
16.6.6
  • fix(peer-deps): bump i18next peer dependency to >= 25.10.9 to match required type exports (ConstrainTarget, ApplyTarget, GetSource) used by TransSelector 1911
16.6.5
  • fix(types): selector keyPrefix overload in useTranslation no longer matches when keyPrefix is absent, fixing defaultNS: false with explicit ns option 2412
16.6.4
  • allow TypeScript 6 as peer dependency 1910
16.6.3
  • fix(types): merge TransSelector overloads into a single signature so typeof Trans remains extendable 1909
16.6.2
  • feat(types): useTranslation now accepts selector functions as keyPrefix with full type-safe key narrowing when enableSelector is enabled 2367
16.6.1
  • feat(types): i18nKey of <Trans i18nKey={sk} /> to accept a SelectorKey 2364
16.6.0
  • warn when t is called before ready with useSuspense: false 1896
  • type-safe values prop on <Trans /> component — interpolation variables are now inferred from the translation string when custom types are configured 1772
16.5.8
  • A selector function cannot be resolved without an i18n instance... returning empty string is safer than leaking the raw function reference. 1907
16.5.7
  • fix: <Trans> component with enableSelector: true does not support multiple selectors for fallbacks 1907
16.5.6
  • fix: prevent crash in useSSR when init() hasn't been called before useSSR — now logs a warning instead of throwing 1604
16.5.5
  • fix: prevent crash in useSSR, getInitialProps and Translation when no i18next instance is available (e.g. in monorepo setups with duplicate react-i18next copies) — now logs a clear warning instead of throwing 1604
16.5.4
  • fix: Overriding React component props not working 1902
16.5.3
  • fix: Trans named tags with underscore 1901
16.5.2
  • fix: Type errors when you've declared a resources type 1899 via 1900
16.5.1
16.5.0
  • Add configuration option transDefaultProps to set default props for the Trans component (e.g. tOptions, shouldUnescape, values) 1895
16.4.1
  • fix(Trans): prevent double-escaping of interpolated values in component props (e.g. title). Unescape HTML entities before passing prop values to React to avoid rendered output like &amp;quot; / &amp;#&#8203;39;. 1893
16.4.0
  • <Trans count> prop: optional - infer count from children 1891
16.3.5
  • fix runaway effect in useTranslation 1888 by 1889
16.3.4
  • Fix: avoid the "ref is not a prop" warning when a user ref is placed on an element inside <Trans> 1887, by still trying to fix element.ref access issue with react 19 1846
16.3.3
  • improve useTranslation to fix "Maximum update depth exceeded" but still support new react-compiler 1885 1863
16.3.2
  • fix: avoid "Uncaught TypeError: Cannot redefine property: __original"
16.3.1
  • revert fix: Incosistent behaviour of Trans and t. Trans set defaultValue when t call doesn't set the field. 1876 f22d478
16.3.0
  • fix: add i18n wrapper for React Compiler and React.memo compatibility 1884
16.2.4
  • try to fix "Trans component do not render anymore children as default value in test environment" 1883 by also respecting 1876
16.2.3
  • fix hyphened component break issue 1882
16.2.2
  • fix trans component break with less than sign 1880, closes 1734
16.2.1
  • fix regression in v16.2.0: bindI18nStore does not work correctly 1879
16.2.0
  • try to address: useTranslation hook violates React's rules of hooks by conditionally calling inner hooks 1863
16.1.6
  • fix: fix: handle spread props for inner components in Trans (icu) 1877
16.1.5
  • fix: Incosistent behaviour of Trans and t. Trans set defaultValue when t call doesn't set the field. 1876
  • Trans: use also defaultValue via tOptions as fallback
16.1.4
  • fix: detect pre-transformation use of interpolation like number/date/etc. 1875
16.1.3
  • fix: ensure invalid identifiers are quoted in the props object 1874
16.1.2
  • missing.js extensions for Icu imports
16.1.1
  • exports for IcuTrans component 1873
16.1.0
  • Introduce IcuTrans component 1869
16.0.1
  • fix: Using component with named tags throws error when Selector API is enabled 1867 with 1868
16.0.0
  • major upgrade i18next dep to address 1865
15.7.4
  • downgrade i18next dep to address 1865
15.7.3
  • exports TransSelectorProps 1862 to address 1861
15.7.2
  • update i18next dependency
15.7.1
  • Fix: _EnableSelector type (for compatibility, enableSelector does not exist in TypeOptions) 1858
15.7.0
  • add new selector API to improve TypeScript IDE performance 1852
    • read more about it here
15.6.1

avoid exception when passing bindI18n: false 1856

15.6.0

fix: passing components as object should still allow for indexed matching of children 1854

15.5.3

chore: update @babel/runtime 1851

15.5.2

fix element.ref access issue with react 19 1846

15.5.1

add typescript as optional peer dependency 1843

15.5.0

feat: use const type parameters for useTranslation() 1842

15.4.1

fix: unique key warning on componentized element 1835

15.4.0

feat: add meta with codes on warnings to allow conditional logging 1826

15.3.0

Uses the i18next logger instead of the default console logger, if there is a valid i18next instance. Now the debug i18next option is respected, and you can also inject your own logger module: https://www.i18next.com/misc/creating-own-plugins#logger

15.2.0

This version may be breaking if you still use React < v18 with TypeScript.
For JS users this version is equal to v15.1.4

  • fix: Global JSX namespace is deprecated 1823 with 1822
15.1.4
  • Fix: warning each child should have a unique key 1820
15.1.3
  • fix: Self-closing REACT components in translation strings should not attempt to replace the component's children 1815 1816
15.1.2
  • fix: Attempted to assign to readonly property 1813
15.1.1
  • fix: Not all namespaces are loaded when passing the lng option to useTranslate 1809
15.1.0
  • fix: <Trans /> warns 'Each child in a list should have a unique "key" prop.' for react 19 1806
15.0.3
15.0.2
  • try to fix Trans handling with alwaysFormat set to true 1801
15.0.1
  • revert arrow function in class property to address this
15.0.0
  • use optional chaining, nullish coalescing and nullish coalescing assignment 1774
  • Build config and optimizations 1769
  • some dependency updates 1768
  • use modern hasLoadedNamespace code (now requires at least i18next > v19.4.5 (introduced in june 2020))
14.1.3
  • create a isObject helper function 1766
  • optimize nodesToString 1765
  • Simplifies hasValidReactChildren 1764
  • create a isString helper to avoid code duplication 1763
  • use arrow functions where possible 1762
  • use the commented out async code 1761
14.1.2
  • bring back internal interpolationOverride handling for Trans component (if there are childrens), fixes 1754
14.1.1
  • do not modify passed tOptions context property to address 1745
14.1.0
  • types(Trans): add typechecking on context prop 1732 (might break if using "internal" Trans or TransProps)
14.0.8
  • fix: issue 1728 when useSuspense is false and default ns 1731
14.0.7
  • try to get rid of internal interpolationOverride handling for Trans component, fixes 1729
14.0.6
  • align context handling of Trans component with t function, fixes 1729
14.0.5
  • Fix 1691 for strict mode, by preserving change language binding 1720
14.0.4
  • fix interpolation of the count prop 1719
14.0.3
  • revert changes done in v14.0.2 since it breaks normal language change render updates
14.0.2
  • Fix/bug 1691 make returned t function identical upon second effect run in strict mode 1716
14.0.1
  • types: fix typo in CustomInstanceExtensions 1713
14.0.0
  • types: reportNamespaces is now optional, should fix 1693
13.5.0
  • self-closing components in translation strings should not attempt to replace the component's children 1695
13.4.1
  • types: use CustomInstanceExtenstions to extend reportNamespaces
13.4.0
  • fix: separate cjs and mjs typings
13.3.2
  • types: fix consider importing '*.js'
13.3.1
  • optimize defaultVariables feature introduced in last release
13.3.0
  • Respect defaultVariables in the interpolation options 1685
13.2.2
  • Fix missing TransWithoutContext type 1672
13.2.1
  • types: Allow iterable ReactI18NextChildren as children 1669
13.2.0
  • Don't use defaults prop as default key 1664
13.1.2
  • postpone usage of newer ES syntax
13.1.1
  • Render all children regardless of type when using i18nIsDynamicList prop 1661
13.1.0
  • Fix non-list dynamic content in Trans component 1660
13.0.3
  • fix unescape is not consistently called for all values 1657
13.0.2
  • export icu.macro 1652
13.0.1
  • types: Fix performance issue in Trans component 1646
13.0.0
  • Update types to support t function redesign 1615
  • requires i18next >= v23.0.1
12.3.1
  • optimization for optional lng prop for useTranslation, should now prevent missings when lazy loading translations 1637
12.3.0
  • optional lng prop for useTranslation (helping on server side 1637)
12.2.2
  • try to fix conditional exports in package.json
12.2.1
  • type fix: the type of defaultNS in I18nextProvider should support string[] 1633
12.2.0
  • if defaultValue is passed in not ready t functio (via useTranslation) return that instead of the key, even though the user-land could should be fixed 1618
12.1.5
12.1.4
  • fix crash in gatsby 1594
12.1.3
  • fix fallback of t function in Trans component
12.1.2
  • fix crash in gatsby 1594
12.1.1
  • fix for node resolution 1589
12.1.0
  • context-less version of Trans component to be used for environments without react context 1588
12.0.0
  • Update t function types to rely on types coming from i18next 1501
11.18.6
  • types: nsMode 1554
11.18.5
  • support unescaping forward slash 1548
11.18.4
  • fix: reset t when keyPrefix is updated 1544
11.18.3
  • types: bindI18n option for UseTranslationOptions
11.18.2
  • more html entities to unescape by default 1538
11.18.1
  • types: allow iterable with objects as children 1531
11.18.0
  • ability to add custom unescape function 1529
11.17.4
  • fix: UMD build 1527
11.17.3
  • style: explicit React imports 1525
11.17.2
  • reset t if ns changes in useTranslation 1518
11.17.1
  • Stricter typescript type for Trans components prop 1516
11.17.0
  • Add support for keyPrefix in withTranslation 1512
11.16.11
  • types: fix Translation component types regression 1511
11.16.10
  • types: translation component types 1509
11.16.9
  • types: fix missing generic type for HTMLAttributes 1499
11.16.8
  • types: fix Trans component to support react 18 types, by introducing allowObjectInHTMLChildren TS option 1492
11.16.7
  • types: Added objects explicitly to Trans children 1486
11.16.6
  • fix: warn just once 'i18n.languages were undefined or empty' and return true, like before
11.16.5
  • types: ReactNode should be prefixed with React 1481
11.16.4
  • fix type 'TFunctionResult' is not assignable to type 'ReactNode' on React 18 1480
11.16.3
  • types: children fix for React v18 1478
  • fix: apply same fix for local hasLoadedNamespace function
11.16.2
  • update macro to wrap defaults in brackets when necessary 1472
11.16.1
  • types: for context prop of Trans component
11.16.0
  • fix: transSupportBasicHtmlNodes for keepArray check 1470
  • feat: add context prop to Trans component 1464
11.15.7
  • types: add nsSeparator to CustomTypeOptions 1471
11.15.6
  • fix error for typescript 4.6 1453
11.15.5
  • types: fix never return type when using plurals 1453
11.15.4
  • types: add values field to Plural component in macros 1446
11.15.3
  • types: fix for issue introduced with type extension for react-native 1436
11.15.2
  • types: TypeScript interface for the Trans component does now accept react-native props 1418
11.15.1
  • add missing types for shouldUnescape and useTranslation 1429
11.15.0

[!IMPORTANT]
✂ PR body was truncated to here.


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.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from e940920 to a04f770 Compare March 28, 2026 14:05
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.0.0 chore(deps): update react-i18next to 17.0.1 Mar 28, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from a04f770 to ac80de2 Compare March 31, 2026 06:32
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.0.1 chore(deps): update react-i18next to 17.0.2 Mar 31, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from ac80de2 to 0a69e43 Compare April 15, 2026 14:02
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.0.2 chore(deps): update react-i18next to 17.0.3 Apr 15, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from 0a69e43 to ff3c5cd Compare April 17, 2026 07:57
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.0.3 chore(deps): update react-i18next to 17.0.4 Apr 17, 2026
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.0.4 chore(deps): update react-i18next to 17.0.6 Apr 27, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from ff3c5cd to 798ae75 Compare April 27, 2026 16:52
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.0.6 chore(deps): update react-i18next to 17.0.7 May 7, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from 798ae75 to 27cd3d9 Compare May 7, 2026 06:35
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from 27cd3d9 to 1c05b5a Compare May 14, 2026 15:35
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.0.7 chore(deps): update react-i18next to 17.0.8 May 14, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from 1c05b5a to 3a9021a Compare May 14, 2026 22:46
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from 3a9021a to 7aaf189 Compare July 9, 2026 18:40
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.0.8 chore(deps): update react-i18next to 17.0.9 Jul 9, 2026
@socket-security

socket-security Bot commented Jul 9, 2026 •

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updatednpm/​react-i18next@​16.5.2 ⏵ 17.0.119910010097 +1100

View full report

@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from 7aaf189 to c05569c Compare July 15, 2026 23:32
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.0.9 chore(deps): update react-i18next to 17.0.10 Jul 15, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from c05569c to b41a12b Compare July 23, 2026 00:00
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.0.10 chore(deps): update react-i18next to 17.0.11 Jul 23, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from b41a12b to bb3cce1 Compare August 20, 2026 11:55
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.0.11 chore(deps): update react-i18next to 17.0.12 Aug 20, 2026
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.0.12 chore(deps): update react-i18next to 17.0.13 Sep 1, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from bb3cce1 to 65d1887 Compare September 1, 2026 14:48
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from 65d1887 to c275f86 Compare September 13, 2026 18:56
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.0.13 chore(deps): update react-i18next to 17.0.14 Sep 13, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from c275f86 to 295c664 Compare September 21, 2026 22:45
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.0.14 chore(deps): update react-i18next to 17.0.15 Sep 21, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from 295c664 to 3db830d Compare October 6, 2026 17:38
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.0.15 chore(deps): update react-i18next to 17.0.16 Oct 6, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from 3db830d to b6a1ca5 Compare October 15, 2026 20:45
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.0.16 chore(deps): update react-i18next to 17.0.18 Oct 15, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from b6a1ca5 to 9dde3d2 Compare October 16, 2026 07:13
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.0.18 chore(deps): update react-i18next to 17.0.19 Oct 16, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from 9dde3d2 to 9e0417a Compare October 16, 2026 16:32
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.0.19 chore(deps): update react-i18next to 17.0.20 Oct 16, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from 9e0417a to 599b2b4 Compare October 17, 2026 14:43
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.0.20 chore(deps): update react-i18next to 17.0.21 Oct 17, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from 599b2b4 to 84c7277 Compare October 17, 2026 22:46
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.0.21 chore(deps): update react-i18next to 17.1.0 Oct 17, 2026
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.1.0 chore(deps): update react-i18next to 17.1.2 Oct 22, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch 2 times, most recently from bbfde72 to 5bbe10b Compare October 23, 2026 00:07
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.1.2 chore(deps): update react-i18next to 17.1.3 Oct 23, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from 5bbe10b to 2708124 Compare October 23, 2026 18:00
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.1.3 chore(deps): update react-i18next to 17.1.4 Oct 23, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from 2708124 to 4411717 Compare October 23, 2026 23:40
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.1.4 chore(deps): update react-i18next to 17.1.5 Oct 23, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from 4411717 to 0cb1e0a Compare October 24, 2026 06:55
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.1.5 chore(deps): update react-i18next to 17.1.6 Oct 24, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from 0cb1e0a to 163b915 Compare October 24, 2026 10:33
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.1.6 chore(deps): update react-i18next to 17.1.7 Oct 24, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from 163b915 to 360a055 Compare October 24, 2026 18:34
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.1.7 chore(deps): update react-i18next to 17.1.8 Oct 24, 2026
@renovate
renovate Bot force-pushed the renovate/react-i18next-17.x branch from 360a055 to ea4c04e Compare October 25, 2026 18:21
@renovate renovate Bot changed the title chore(deps): update react-i18next to 17.1.8 chore(deps): update react-i18next to 17.1.9 Oct 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants