UNPKG

react-i18next

Version:

Internationalization for react done right. Using the i18next i18n ecosystem.

130 lines (119 loc) 3.7 kB
import type { i18n, ApplyTarget, ConstrainTarget, GetSource, ParseKeys, Namespace, SelectorFn, TypeOptions, TOptions, TFunction, } from 'i18next'; import * as React from 'react'; type _DefaultNamespace = TypeOptions['defaultNS']; type _EnableSelector = TypeOptions['enableSelector']; type TransChild = React.ReactNode | Record<string, unknown>; type $NoInfer<T> = [T][T extends T ? 0 : never]; export type TransProps< Key extends ParseKeys<Ns, TOpt, KPrefix>, Ns extends Namespace = _DefaultNamespace, KPrefix = undefined, TContext extends string | undefined = undefined, TOpt extends TOptions & { context?: TContext } = { context: TContext }, E = React.HTMLProps<HTMLDivElement>, > = E & { children?: TransChild | readonly TransChild[]; components?: readonly React.ReactElement[] | { readonly [tagName: string]: React.ReactElement }; count?: number; context?: TContext; defaults?: string; i18n?: i18n; i18nKey?: Key | Key[]; ns?: Ns; parent?: string | React.ComponentType<any> | null; // used in React.createElement if not null tOptions?: TOpt; values?: {}; shouldUnescape?: boolean; t?: TFunction<Ns, KPrefix>; }; export interface TransLegacy { < Key extends ParseKeys<Ns, TOpt, KPrefix>, Ns extends Namespace = _DefaultNamespace, KPrefix = undefined, TContext extends string | undefined = undefined, TOpt extends TOptions & { context?: TContext } = { context: TContext }, E = React.HTMLProps<HTMLDivElement>, >( props: TransProps<Key, Ns, KPrefix, TContext, TOpt, E>, ): React.ReactElement; } export interface TransSelectorProps< Key, Ns extends Namespace = _DefaultNamespace, KPrefix = undefined, TContext extends string | undefined = undefined, TOpt extends TOptions & { context?: TContext } = { context: TContext }, > { children?: TransChild | readonly TransChild[]; components?: readonly React.ReactElement[] | { readonly [tagName: string]: React.ReactElement }; count?: number; context?: TContext; defaults?: string; i18n?: i18n; i18nKey?: Key; ns?: Ns; parent?: string | React.ComponentType<any> | null; // used in React.createElement if not null tOptions?: TOpt; values?: {}; shouldUnescape?: boolean; t?: TFunction<Ns, KPrefix>; } export interface TransSelector { < Target extends ConstrainTarget<TOpt>, Key extends SelectorFn<GetSource<$NoInfer<Ns>, KPrefix>, ApplyTarget<Target, TOpt>, TOpt>, const Ns extends Namespace = _DefaultNamespace, KPrefix = undefined, TContext extends string | undefined = undefined, TOpt extends TOptions & { context?: TContext } = { context: TContext }, E = React.HTMLProps<HTMLDivElement>, >( props: TransSelectorProps<Key, Ns, KPrefix, TContext, TOpt> & E, ): React.ReactElement; } export const Trans: _EnableSelector extends true | 'optimize' ? TransSelector : TransLegacy; export type ErrorCode = | 'NO_I18NEXT_INSTANCE' | 'NO_LANGUAGES' | 'DEPRECATED_OPTION' | 'TRANS_NULL_VALUE' | 'TRANS_INVALID_OBJ' | 'TRANS_INVALID_VAR' | 'TRANS_INVALID_COMPONENTS'; export type ErrorMeta = { code: ErrorCode; i18nKey?: string; [x: string]: any; }; /** * Use to type the logger arguments * @example * ``` * import type { ErrorArgs } from 'react-i18next'; * * const logger = { * // .... * warn: function (...args: ErrorArgs) { * if (args[1]?.code === 'TRANS_INVALID_OBJ') { * const [msg, { i18nKey, ...rest }] = args; * return log(i18nKey, msg, rest); * } * log(...args); * } * } * i18n.use(logger).use(i18nReactPlugin).init({...}); * ``` */ export type ErrorArgs = readonly [string, ErrorMeta | undefined, ...any[]];