You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

137 lines
3.6 KiB

import i18next, { ReactOptions, i18n, ThirdPartyModule, WithT, TFunction, Resource } from 'i18next';
import * as React from 'react';
type Omit<T, K> = Pick<T, Exclude<keyof T, K>>;
type Subtract<T extends K, K> = Omit<T, keyof K>;
export type Namespace = string | string[];
export function setDefaults(options: ReactOptions): void;
export function getDefaults(): ReactOptions;
export function setI18n(instance: i18n): void;
export function getI18n(): i18n;
export const initReactI18next: ThirdPartyModule;
export function composeInitialProps(ForComponent: any): (ctx: unknown) => Promise<any>;
export function getInitialProps(): {
initialI18nStore: {
[ns: string]: {};
};
initialLanguage: string;
};
export interface ReportNamespaces {
addUsedNamespaces(namespaces: Namespace[]): void;
getUsedNamespaces(): string[];
}
declare module 'i18next' {
interface i18n {
reportNamespaces: ReportNamespaces;
}
}
export interface TransProps<E extends Element = HTMLDivElement>
extends React.HTMLProps<E>,
Partial<WithT> {
children?: React.ReactNode;
components?: readonly React.ReactElement[] | { readonly [tagName: string]: React.ReactElement };
count?: number;
context?: string;
defaults?: string;
i18n?: i18n;
i18nKey?: string;
ns?: Namespace;
parent?: string | React.ComponentType<any> | null; // used in React.createElement if not null
tOptions?: {};
values?: {};
shouldUnescape?: boolean;
t?: TFunction;
}
export function Trans<E extends Element = HTMLDivElement>(props: TransProps<E>): React.ReactElement;
export function useSSR(initialI18nStore: Resource, initialLanguage: string): void;
export interface UseTranslationOptions {
i18n?: i18n;
useSuspense?: boolean;
keyPrefix?: string;
bindI18n?: string | false;
nsMode?: 'fallback' | 'default';
// other of these options might also work: https://github.com/i18next/i18next/blob/master/index.d.ts#L127
}
export type UseTranslationResponse = [TFunction, i18n, boolean] & {
t: TFunction;
i18n: i18n;
ready: boolean;
};
export function useTranslation(
ns?: Namespace,
options?: UseTranslationOptions,
): UseTranslationResponse;
// Need to see usage to improve this
export function withSSR(): <Props>(
WrappedComponent: React.ComponentType<Props>,
) => {
({
initialI18nStore,
initialLanguage,
...rest
}: {
initialI18nStore: Resource;
initialLanguage: string;
} & Props): React.FunctionComponentElement<Props>;
getInitialProps: (ctx: unknown) => Promise<any>;
};
export interface WithTranslation extends WithT {
i18n: i18n;
tReady: boolean;
}
export interface WithTranslationProps {
i18n?: i18n;
useSuspense?: boolean;
}
export function withTranslation(
ns?: Namespace,
options?: {
withRef?: boolean;
},
): <
C extends React.ComponentType<React.ComponentProps<C> & WithTranslationProps>,
ResolvedProps = JSX.LibraryManagedAttributes<
C,
Subtract<React.ComponentProps<C>, WithTranslationProps>
>
>(
component: C,
) => React.ComponentType<Omit<ResolvedProps, keyof WithTranslation> & WithTranslationProps>;
export interface I18nextProviderProps {
children?: React.ReactNode;
i18n: i18n;
defaultNS?: string;
}
export const I18nextProvider: React.FunctionComponent<I18nextProviderProps>;
export const I18nContext: React.Context<{ i18n: i18n }>;
export interface TranslationProps {
children: (
t: TFunction,
options: {
i18n: i18n;
lng: string;
},
ready: boolean,
) => React.ReactNode;
ns?: Namespace;
i18n?: i18n;
useSuspense?: boolean;
nsMode?: 'fallback' | 'default';
}
export function Translation(props: TranslationProps): any;