Skip to content

Commit 850011f

Browse files
committed
feat: make tchoice translation replacements customizable
1 parent 961f0e3 commit 850011f

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

src/provider.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { createElement, ReactNode, useEffect, useState } from 'react';
2-
1+
import { createElement, isValidElement, ReactNode, useEffect, useState } from 'react';
32
import { Context } from './context';
43
import type DefaultOptionsInterface from './interfaces/default-options';
54
import type I18nProviderProps from './interfaces/i18n-provider-props';
@@ -165,13 +164,22 @@ export default function LaravelReactI18nProvider({ children, ssr, ...currentOpti
165164
/**
166165
* Translates the given message based on a count.
167166
*/
168-
function tChoice(key: string, number: number, replacements: ReplacementsInterface = {}): ReactNode {
167+
function tChoice(
168+
key: string,
169+
number: number,
170+
replacements: ReplacementsInterface & { count?: (n: number) => ReactNode | ReactNode } = {}
171+
): ReactNode {
169172
const message = _translate(key);
170173
const locale = isLocale(options.locale) ? options.locale : options.fallbackLocale;
171174

172175
return replacer(pluralization(message, number, locale), {
173176
...replacements,
174-
count: number.toString()
177+
count:
178+
typeof replacements.count === 'function'
179+
? replacements.count(number)
180+
: isValidElement(replacements.count)
181+
? replacements.count
182+
: replacements.count ?? number.toString()
175183
});
176184
}
177185

0 commit comments

Comments
 (0)