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.
		
		
		
		
		
			
		
			
				
					1202 lines
				
				31 KiB
			
		
		
			
		
	
	
					1202 lines
				
				31 KiB
			| 
											3 years ago
										 | type Omit<T, K> = Pick<T, Exclude<keyof T, K>>; | ||
|  | type MergeBy<T, K> = Omit<T, keyof K> & K; | ||
|  | 
 | ||
|  | export interface FallbackLngObjList { | ||
|  |   [language: string]: readonly string[]; | ||
|  | } | ||
|  | 
 | ||
|  | export type FallbackLng = | ||
|  |   | string | ||
|  |   | readonly string[] | ||
|  |   | FallbackLngObjList | ||
|  |   | ((code: string) => string | readonly string[] | FallbackLngObjList); | ||
|  | 
 | ||
|  | export type FormatFunction = ( | ||
|  |   value: any, | ||
|  |   format?: string, | ||
|  |   lng?: string, | ||
|  |   options?: InterpolationOptions & { [key: string]: any }, | ||
|  | ) => string; | ||
|  | 
 | ||
|  | export interface InterpolationOptions { | ||
|  |   /** | ||
|  |    * Format function see formatting for details | ||
|  |    * @default noop | ||
|  |    */ | ||
|  |   format?: FormatFunction; | ||
|  |   /** | ||
|  |    * Used to separate format from interpolation value | ||
|  |    * @default ',' | ||
|  |    */ | ||
|  |   formatSeparator?: string; | ||
|  |   /** | ||
|  |    * Escape function | ||
|  |    * @default str => str | ||
|  |    */ | ||
|  |   escape?(str: string): string; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Always format interpolated values. | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   alwaysFormat?: boolean; | ||
|  |   /** | ||
|  |    * Escape passed in values to avoid xss injection | ||
|  |    * @default true | ||
|  |    */ | ||
|  |   escapeValue?: boolean; | ||
|  |   /** | ||
|  |    * If true, then value passed into escape function is not casted to string, use with custom escape function that does its own type check | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   useRawValueToEscape?: boolean; | ||
|  |   /** | ||
|  |    * Prefix for interpolation | ||
|  |    * @default '{{' | ||
|  |    */ | ||
|  |   prefix?: string; | ||
|  |   /** | ||
|  |    * Suffix for interpolation | ||
|  |    * @default '}}' | ||
|  |    */ | ||
|  |   suffix?: string; | ||
|  |   /** | ||
|  |    * Escaped prefix for interpolation (regexSafe) | ||
|  |    * @default undefined | ||
|  |    */ | ||
|  |   prefixEscaped?: string; | ||
|  |   /** | ||
|  |    * Escaped suffix for interpolation (regexSafe) | ||
|  |    * @default undefined | ||
|  |    */ | ||
|  |   suffixEscaped?: string; | ||
|  |   /** | ||
|  |    * Suffix to unescaped mode | ||
|  |    * @default undefined | ||
|  |    */ | ||
|  |   unescapeSuffix?: string; | ||
|  |   /** | ||
|  |    * Prefix to unescaped mode | ||
|  |    * @default '-' | ||
|  |    */ | ||
|  |   unescapePrefix?: string; | ||
|  |   /** | ||
|  |    * Prefix for nesting | ||
|  |    * @default '$t(' | ||
|  |    */ | ||
|  |   nestingPrefix?: string; | ||
|  |   /** | ||
|  |    * Suffix for nesting | ||
|  |    * @default ')' | ||
|  |    */ | ||
|  |   nestingSuffix?: string; | ||
|  |   /** | ||
|  |    * Escaped prefix for nesting (regexSafe) | ||
|  |    * @default undefined | ||
|  |    */ | ||
|  |   nestingPrefixEscaped?: string; | ||
|  |   /** | ||
|  |    * Escaped suffix for nesting (regexSafe) | ||
|  |    * @default undefined | ||
|  |    */ | ||
|  |   nestingSuffixEscaped?: string; | ||
|  |   /** | ||
|  |    * Separates options from key | ||
|  |    * @default ',' | ||
|  |    */ | ||
|  |   nestingOptionsSeparator?: string; | ||
|  |   /** | ||
|  |    * Global variables to use in interpolation replacements | ||
|  |    * @default undefined | ||
|  |    */ | ||
|  | 
 | ||
|  |   defaultVariables?: { [index: string]: any }; | ||
|  |   /** | ||
|  |    * After how many interpolation runs to break out before throwing a stack overflow | ||
|  |    * @default 1000 | ||
|  |    */ | ||
|  |   maxReplaces?: number; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * If true, it will skip to interpolate the variables | ||
|  |    * @default true | ||
|  |    */ | ||
|  |   skipOnVariables?: boolean; | ||
|  | } | ||
|  | 
 | ||
|  | export interface ReactOptions { | ||
|  |   /** | ||
|  |    * Set it to fallback to let passed namespaces to translated hoc act as fallbacks | ||
|  |    * @default 'default' | ||
|  |    */ | ||
|  |   nsMode?: 'default' | 'fallback'; | ||
|  |   /** | ||
|  |    * Set it to the default parent element created by the Trans component. | ||
|  |    * @default 'div' | ||
|  |    */ | ||
|  |   defaultTransParent?: string; | ||
|  |   /** | ||
|  |    * Set which events trigger a re-render, can be set to false or string of events | ||
|  |    * @default 'languageChanged' | ||
|  |    */ | ||
|  |   bindI18n?: string | false; | ||
|  |   /** | ||
|  |    * Set which events on store trigger a re-render, can be set to false or string of events | ||
|  |    * @default '' | ||
|  |    */ | ||
|  |   bindI18nStore?: string | false; | ||
|  |   /** | ||
|  |    * Set fallback value for Trans components without children | ||
|  |    * @default undefined | ||
|  |    */ | ||
|  |   transEmptyNodeValue?: string; | ||
|  |   /** | ||
|  |    * Set it to false if you do not want to use Suspense | ||
|  |    * @default true | ||
|  |    */ | ||
|  |   useSuspense?: boolean; | ||
|  |   /** | ||
|  |    * Function to generate an i18nKey from the defaultValue (or Trans children) | ||
|  |    * when no key is provided. | ||
|  |    * By default, the defaultValue (Trans text) itself is used as the key. | ||
|  |    * If you want to require keys for all translations, supply a function | ||
|  |    * that always throws an error. | ||
|  |    * @default undefined | ||
|  |    */ | ||
|  |   hashTransKey?(defaultValue: TOptionsBase['defaultValue']): TOptionsBase['defaultValue']; | ||
|  |   /** | ||
|  |    * Convert eg. <br/> found in translations to a react component of type br | ||
|  |    * @default true | ||
|  |    */ | ||
|  |   transSupportBasicHtmlNodes?: boolean; | ||
|  |   /** | ||
|  |    * Which nodes not to convert in defaultValue generation in the Trans component. | ||
|  |    * @default ['br', 'strong', 'i', 'p'] | ||
|  |    */ | ||
|  |   transKeepBasicHtmlNodesFor?: readonly string[]; | ||
|  |   /** | ||
|  |    * Wrap text nodes in a user-specified element. | ||
|  |    * @default '' | ||
|  |    */ | ||
|  |   transWrapTextNodes?: string; | ||
|  |   /** | ||
|  |    * Optional keyPrefix that will be automatically applied to returned t function in useTranslation for example. | ||
|  |    * @default undefined | ||
|  |    */ | ||
|  |   keyPrefix?: string; | ||
|  |   /** | ||
|  |    * Unescape function | ||
|  |    * by default it unescapes some basic html entities | ||
|  |    */ | ||
|  |   unescape?(str: string): string; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * This interface can be augmented by users to add types to `i18next` default PluginOptions. | ||
|  |  */ | ||
|  | export interface PluginOptions {} | ||
|  | 
 | ||
|  | interface DefaultPluginOptions { | ||
|  |   /** | ||
|  |    * Options for language detection - check documentation of plugin | ||
|  |    * @default undefined | ||
|  |    */ | ||
|  |   detection?: object; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Options for backend - check documentation of plugin | ||
|  |    * @default undefined | ||
|  |    */ | ||
|  |   backend?: object; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Options for cache layer - check documentation of plugin | ||
|  |    * @default undefined | ||
|  |    */ | ||
|  |   cache?: object; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Options for i18n message format - check documentation of plugin | ||
|  |    * @default undefined | ||
|  |    */ | ||
|  |   i18nFormat?: object; | ||
|  | } | ||
|  | 
 | ||
|  | export interface InitOptions extends MergeBy<DefaultPluginOptions, PluginOptions> { | ||
|  |   /** | ||
|  |    * Logs info level to console output. Helps finding issues with loading not working. | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   debug?: boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Resources to initialize with (if not using loading or not appending using addResourceBundle) | ||
|  |    * @default undefined | ||
|  |    */ | ||
|  |   resources?: Resource; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Allow initializing with bundled resources while using a backend to load non bundled ones. | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   partialBundledLanguages?: boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Language to use (overrides language detection) | ||
|  |    * @default undefined | ||
|  |    */ | ||
|  |   lng?: string; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Language to use if translations in user language are not available. | ||
|  |    * @default 'dev' | ||
|  |    */ | ||
|  |   fallbackLng?: false | FallbackLng; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Array of allowed languages | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   supportedLngs?: false | readonly string[]; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * If true will pass eg. en-US if finding en in supportedLngs | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   nonExplicitSupportedLngs?: boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Language codes to lookup, given set language is | ||
|  |    * 'en-US': 'all' --> ['en-US', 'en', 'dev'], | ||
|  |    * 'currentOnly' --> 'en-US', | ||
|  |    * 'languageOnly' --> 'en' | ||
|  |    * @default 'all' | ||
|  |    */ | ||
|  |   load?: 'all' | 'currentOnly' | 'languageOnly'; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Array of languages to preload. Important on server-side to assert translations are loaded before rendering views. | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   preload?: false | readonly string[]; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Language will be lowercased eg. en-US --> en-us | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   lowerCaseLng?: boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Language will be lowercased EN --> en while leaving full locales like en-US | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   cleanCode?: boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * String or array of namespaces to load | ||
|  |    * @default 'translation' | ||
|  |    */ | ||
|  |   ns?: string | readonly string[]; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Default namespace used if not passed to translation function | ||
|  |    * @default 'translation' | ||
|  |    */ | ||
|  |   defaultNS?: string | false | readonly string[]; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * String or array of namespaces to lookup key if not found in given namespace. | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   fallbackNS?: false | string | readonly string[]; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Calls save missing key function on backend if key not found. | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   saveMissing?: boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Calls save missing key function on backend if key not found also for plural forms. | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   saveMissingPlurals?: boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Experimental: enable to update default values using the saveMissing | ||
|  |    * (Works only if defaultValue different from translated value. | ||
|  |    * Only useful on initial development or when keeping code as source of truth not changing values outside of code. | ||
|  |    * Only supported if backend supports it already) | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   updateMissing?: boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * @default 'fallback' | ||
|  |    */ | ||
|  |   saveMissingTo?: 'current' | 'all' | 'fallback'; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Used to not fallback to the key as default value, when using saveMissing functionality. | ||
|  |    * i.e. when using with i18next-http-backend this will result in having a key with an empty string value. | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   missingKeyNoValueFallbackToKey?: boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Used for custom missing key handling (needs saveMissing set to true!) | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   missingKeyHandler?: | ||
|  |     | false | ||
|  |     | (( | ||
|  |         lngs: readonly string[], | ||
|  |         ns: string, | ||
|  |         key: string, | ||
|  |         fallbackValue: string, | ||
|  |         updateMissing: boolean, | ||
|  |         options: any, | ||
|  |       ) => void); | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Receives a key that was not found in `t()` and returns a value, that will be returned by `t()` | ||
|  |    * @default noop | ||
|  |    */ | ||
|  |   parseMissingKeyHandler?(key: string, defaultValue?: string): any; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Appends namespace to missing key | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   appendNamespaceToMissingKey?: boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Gets called in case a interpolation value is undefined. This method will not be called if the value is empty string or null | ||
|  |    * @default noop | ||
|  |    */ | ||
|  |   missingInterpolationHandler?: (text: string, value: any, options: InitOptions) => any; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Will use 'plural' as suffix for languages only having 1 plural form, setting it to false will suffix all with numbers | ||
|  |    * @default true | ||
|  |    */ | ||
|  |   simplifyPluralSuffix?: boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * String or array of postProcessors to apply per default | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   postProcess?: false | string | readonly string[]; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * passthrough the resolved object including 'usedNS', 'usedLang' etc into options object of postprocessors as 'i18nResolved' property | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   postProcessPassResolved?: boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Allows null values as valid translation | ||
|  |    * @default true | ||
|  |    */ | ||
|  |   returnNull?: boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Allows empty string as valid translation | ||
|  |    * @default true | ||
|  |    */ | ||
|  |   returnEmptyString?: boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Allows objects as valid translation result | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   returnObjects?: boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Returns an object that includes information about the used language, namespace, key and value | ||
|  |    */ | ||
|  |   returnDetails?: boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Gets called if object was passed in as key but returnObjects was set to false | ||
|  |    * @default noop | ||
|  |    */ | ||
|  |   returnedObjectHandler?(key: string, value: string, options: any): void; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Char, eg. '\n' that arrays will be joined by | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   joinArrays?: false | string; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Sets defaultValue | ||
|  |    * @default args => ({ defaultValue: args[1] }) | ||
|  |    */ | ||
|  |   overloadTranslationOptionHandler?(args: string[]): TOptions; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * @see https://www.i18next.com/interpolation.html
 | ||
|  |    */ | ||
|  |   interpolation?: InterpolationOptions; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Options for react - check documentation of plugin | ||
|  |    * @default undefined | ||
|  |    */ | ||
|  |   react?: ReactOptions; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Triggers resource loading in init function inside a setTimeout (default async behaviour). | ||
|  |    * Set it to false if your backend loads resources sync - that way calling i18next.t after | ||
|  |    * init is possible without relaying on the init callback. | ||
|  |    * @default true | ||
|  |    */ | ||
|  |   initImmediate?: boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Char to separate keys | ||
|  |    * @default '.' | ||
|  |    */ | ||
|  |   keySeparator?: false | string; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Char to split namespace from key | ||
|  |    * @default ':' | ||
|  |    */ | ||
|  |   nsSeparator?: false | string; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Char to split plural from key | ||
|  |    * @default '_' | ||
|  |    */ | ||
|  |   pluralSeparator?: string; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Char to split context from key | ||
|  |    * @default '_' | ||
|  |    */ | ||
|  |   contextSeparator?: string; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Prefixes the namespace to the returned key when using `cimode` | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   appendNamespaceToCIMode?: boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Compatibility JSON version | ||
|  |    * @default 'v4' | ||
|  |    */ | ||
|  |   compatibilityJSON?: 'v1' | 'v2' | 'v3' | 'v4'; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Options for https://github.com/locize/locize-lastused
 | ||
|  |    * @default undefined | ||
|  |    */ | ||
|  |   locizeLastUsed?: { | ||
|  |     /** | ||
|  |      * The id of your locize project | ||
|  |      */ | ||
|  |     projectId: string; | ||
|  | 
 | ||
|  |     /** | ||
|  |      * An api key if you want to send missing keys | ||
|  |      */ | ||
|  |     apiKey?: string; | ||
|  | 
 | ||
|  |     /** | ||
|  |      * The reference language of your project | ||
|  |      * @default 'en' | ||
|  |      */ | ||
|  |     referenceLng?: string; | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Version | ||
|  |      * @default 'latest' | ||
|  |      */ | ||
|  |     version?: string; | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Debounce interval to send data in milliseconds | ||
|  |      * @default 90000 | ||
|  |      */ | ||
|  |     debounceSubmit?: number; | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Hostnames that are allowed to send last used data. | ||
|  |      * Please keep those to your local system, staging, test servers (not production) | ||
|  |      * @default ['localhost'] | ||
|  |      */ | ||
|  |     allowedHosts?: readonly string[]; | ||
|  |   }; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Automatically lookup for a flat key if a nested key is not found an vice-versa | ||
|  |    * @default true | ||
|  |    */ | ||
|  |   ignoreJSONStructure?: boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Limit parallelism of calls to backend | ||
|  |    * This is needed to prevent trying to open thousands of | ||
|  |    * sockets or file descriptors, which can cause failures | ||
|  |    * and actually make the entire process take longer. | ||
|  |    * @default 10 | ||
|  |    */ | ||
|  |   maxParallelReads?: number; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * The maximum number of retries to perform. | ||
|  |    * Note that retries are only performed when a request has no response | ||
|  |    * and throws an error. | ||
|  |    * The default value is used if value is set below 0. | ||
|  |    * @default 5 | ||
|  |    */ | ||
|  |   maxRetries?: number; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Set how long to wait, in milliseconds, betweeen retries of failed requests. | ||
|  |    * This number is compounded by a factor of 2 for subsequent retry. | ||
|  |    * The default value is used if value is set below 1ms. | ||
|  |    * @default 350 | ||
|  |    */ | ||
|  |   retryTimeout?: number; | ||
|  | } | ||
|  | 
 | ||
|  | export interface TOptionsBase { | ||
|  |   /** | ||
|  |    * Default value to return if a translation was not found | ||
|  |    */ | ||
|  |   defaultValue?: any; | ||
|  |   /** | ||
|  |    * Count value used for plurals | ||
|  |    */ | ||
|  |   count?: number; | ||
|  |   /** | ||
|  |    * Used for contexts (eg. male\female) | ||
|  |    */ | ||
|  |   context?: any; | ||
|  |   /** | ||
|  |    * Object with vars for interpolation - or put them directly in options | ||
|  |    */ | ||
|  |   replace?: any; | ||
|  |   /** | ||
|  |    * Override language to use | ||
|  |    */ | ||
|  |   lng?: string; | ||
|  |   /** | ||
|  |    * Override languages to use | ||
|  |    */ | ||
|  |   lngs?: readonly string[]; | ||
|  |   /** | ||
|  |    * Override language to lookup key if not found see fallbacks for details | ||
|  |    */ | ||
|  |   fallbackLng?: FallbackLng; | ||
|  |   /** | ||
|  |    * Override namespaces (string or array) | ||
|  |    */ | ||
|  |   ns?: string | readonly string[]; | ||
|  |   /** | ||
|  |    * Override char to separate keys | ||
|  |    */ | ||
|  |   keySeparator?: false | string; | ||
|  |   /** | ||
|  |    * Override char to split namespace from key | ||
|  |    */ | ||
|  |   nsSeparator?: false | string; | ||
|  |   /** | ||
|  |    * Accessing an object not a translation string (can be set globally too) | ||
|  |    */ | ||
|  |   returnObjects?: boolean; | ||
|  |   /** | ||
|  |    * Returns an object that includes information about the used language, namespace, key and value | ||
|  |    */ | ||
|  |   returnDetails?: boolean; | ||
|  |   /** | ||
|  |    * Char, eg. '\n' that arrays will be joined by (can be set globally too) | ||
|  |    */ | ||
|  |   joinArrays?: string; | ||
|  |   /** | ||
|  |    * String or array of postProcessors to apply see interval plurals as a sample | ||
|  |    */ | ||
|  |   postProcess?: string | readonly string[]; | ||
|  |   /** | ||
|  |    * Override interpolation options | ||
|  |    */ | ||
|  |   interpolation?: InterpolationOptions; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * indexer that is open to any value | ||
|  |  */ | ||
|  | export type StringMap = { [key: string]: any }; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Options that allow open ended values for interpolation unless type is provided. | ||
|  |  */ | ||
|  | export type TOptions<TInterpolationMap extends object = StringMap> = TOptionsBase & | ||
|  |   TInterpolationMap; | ||
|  | 
 | ||
|  | export type Callback = (error: any, t: TFunction) => void; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Uses similar args as the t function and returns true if a key exists. | ||
|  |  */ | ||
|  | export interface ExistsFunction< | ||
|  |   TKeys extends string = string, | ||
|  |   TInterpolationMap extends object = StringMap, | ||
|  | > { | ||
|  |   (key: TKeys | TKeys[], options?: TOptions<TInterpolationMap>): boolean; | ||
|  | } | ||
|  | 
 | ||
|  | export interface WithT { | ||
|  |   // Expose parameterized t in the i18next interface hierarchy
 | ||
|  |   t: TFunction; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Object returned from t() function when passed returnDetails: true option. | ||
|  |  */ | ||
|  | export type TFunctionDetailedResult<T = string> = { | ||
|  |   /** | ||
|  |    * The plain used key | ||
|  |    */ | ||
|  |   usedKey: string; | ||
|  |   /** | ||
|  |    * The translation result. | ||
|  |    */ | ||
|  |   res: T; | ||
|  |   /** | ||
|  |    * The key with context / plural | ||
|  |    */ | ||
|  |   exactUsedKey: string; | ||
|  |   /** | ||
|  |    * The used language for this translation. | ||
|  |    */ | ||
|  |   usedLng: string; | ||
|  |   /** | ||
|  |    * The used namespace for this translation. | ||
|  |    */ | ||
|  |   usedNS: string; | ||
|  | }; | ||
|  | export type TFunctionResult = | ||
|  |   | string | ||
|  |   | object | ||
|  |   | TFunctionDetailedResult | ||
|  |   | Array<string | object> | ||
|  |   | undefined | ||
|  |   | null; | ||
|  | export type TFunctionKeys = string | TemplateStringsArray; | ||
|  | export interface TFunction { | ||
|  |   // basic usage
 | ||
|  |   < | ||
|  |     TResult extends TFunctionResult = string, | ||
|  |     TKeys extends TFunctionKeys = string, | ||
|  |     TInterpolationMap extends object = StringMap, | ||
|  |   >( | ||
|  |     key: TKeys | TKeys[], | ||
|  |   ): TResult; | ||
|  |   < | ||
|  |     TResult extends TFunctionResult = TFunctionDetailedResult<object>, | ||
|  |     TKeys extends TFunctionKeys = string, | ||
|  |     TInterpolationMap extends object = StringMap, | ||
|  |   >( | ||
|  |     key: TKeys | TKeys[], | ||
|  |     options?: TOptions<TInterpolationMap> & { returnDetails: true; returnObjects: true }, | ||
|  |   ): TResult; | ||
|  |   < | ||
|  |     TResult extends TFunctionResult = TFunctionDetailedResult, | ||
|  |     TKeys extends TFunctionKeys = string, | ||
|  |     TInterpolationMap extends object = StringMap, | ||
|  |   >( | ||
|  |     key: TKeys | TKeys[], | ||
|  |     options?: TOptions<TInterpolationMap> & { returnDetails: true }, | ||
|  |   ): TResult; | ||
|  |   < | ||
|  |     TResult extends TFunctionResult = object, | ||
|  |     TKeys extends TFunctionKeys = string, | ||
|  |     TInterpolationMap extends object = StringMap, | ||
|  |   >( | ||
|  |     key: TKeys | TKeys[], | ||
|  |     options?: TOptions<TInterpolationMap> & { returnObjects: true }, | ||
|  |   ): TResult; | ||
|  |   < | ||
|  |     TResult extends TFunctionResult = string, | ||
|  |     TKeys extends TFunctionKeys = string, | ||
|  |     TInterpolationMap extends object = StringMap, | ||
|  |   >( | ||
|  |     key: TKeys | TKeys[], | ||
|  |     options?: TOptions<TInterpolationMap> | string, | ||
|  |   ): TResult; | ||
|  |   // overloaded usage
 | ||
|  |   < | ||
|  |     TResult extends TFunctionResult = string, | ||
|  |     TKeys extends TFunctionKeys = string, | ||
|  |     TInterpolationMap extends object = StringMap, | ||
|  |   >( | ||
|  |     key: TKeys | TKeys[], | ||
|  |     defaultValue?: string, | ||
|  |     options?: TOptions<TInterpolationMap> | string, | ||
|  |   ): TResult; | ||
|  | } | ||
|  | 
 | ||
|  | export interface Resource { | ||
|  |   [language: string]: ResourceLanguage; | ||
|  | } | ||
|  | 
 | ||
|  | export interface ResourceLanguage { | ||
|  |   [namespace: string]: ResourceKey; | ||
|  | } | ||
|  | 
 | ||
|  | export type ResourceKey = | ||
|  |   | string | ||
|  |   | { | ||
|  |       [key: string]: any; | ||
|  |     }; | ||
|  | 
 | ||
|  | export interface Interpolator { | ||
|  |   init(options: InterpolationOptions, reset: boolean): undefined; | ||
|  |   reset(): undefined; | ||
|  |   resetRegExp(): undefined; | ||
|  |   interpolate(str: string, data: object, lng: string, options: InterpolationOptions): string; | ||
|  |   nest(str: string, fc: (...args: any[]) => any, options: InterpolationOptions): string; | ||
|  | } | ||
|  | 
 | ||
|  | export class ResourceStore { | ||
|  |   constructor(data: Resource, options: InitOptions); | ||
|  | 
 | ||
|  |   public data: Resource; | ||
|  |   public options: InitOptions; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Gets fired when resources got added or removed | ||
|  |    */ | ||
|  |   on(event: 'added' | 'removed', callback: (lng: string, ns: string) => void): void; | ||
|  |   /** | ||
|  |    * Remove event listener | ||
|  |    * removes all callback when callback not specified | ||
|  |    */ | ||
|  |   off(event: 'added' | 'removed', callback?: (lng: string, ns: string) => void): void; | ||
|  | } | ||
|  | 
 | ||
|  | export interface Formatter { | ||
|  |   init(services: Services, i18nextOptions: InitOptions): void; | ||
|  |   add(name: string, fc: (value: any, lng: string | undefined, options: any) => string): void; | ||
|  |   format: FormatFunction; | ||
|  | } | ||
|  | 
 | ||
|  | export interface Services { | ||
|  |   backendConnector: any; | ||
|  |   i18nFormat: any; | ||
|  |   interpolator: Interpolator; | ||
|  |   languageDetector: any; | ||
|  |   languageUtils: any; | ||
|  |   logger: any; | ||
|  |   pluralResolver: any; | ||
|  |   resourceStore: ResourceStore; | ||
|  |   formatter?: Formatter; | ||
|  | } | ||
|  | 
 | ||
|  | export type ModuleType = | ||
|  |   | 'backend' | ||
|  |   | 'logger' | ||
|  |   | 'languageDetector' | ||
|  |   | 'postProcessor' | ||
|  |   | 'i18nFormat' | ||
|  |   | 'formatter' | ||
|  |   | '3rdParty'; | ||
|  | 
 | ||
|  | export interface Module { | ||
|  |   type: ModuleType; | ||
|  | } | ||
|  | 
 | ||
|  | export type CallbackError = Error | null | undefined; | ||
|  | export type ReadCallback = ( | ||
|  |   err: CallbackError, | ||
|  |   data: ResourceKey | boolean | null | undefined, | ||
|  | ) => void; | ||
|  | export type MultiReadCallback = (err: CallbackError, data: Resource | null | undefined) => void; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Used to load data for i18next. | ||
|  |  * Can be provided as a singleton or as a prototype constructor (preferred for supporting multiple instances of i18next). | ||
|  |  * For singleton set property `type` to `'backend'` For a prototype constructor set static property. | ||
|  |  */ | ||
|  | export interface BackendModule<TOptions = object> extends Module { | ||
|  |   type: 'backend'; | ||
|  |   init(services: Services, backendOptions: TOptions, i18nextOptions: InitOptions): void; | ||
|  |   read(language: string, namespace: string, callback: ReadCallback): void; | ||
|  |   /** Save the missing translation */ | ||
|  |   create?( | ||
|  |     languages: readonly string[], | ||
|  |     namespace: string, | ||
|  |     key: string, | ||
|  |     fallbackValue: string, | ||
|  |   ): void; | ||
|  |   /** Load multiple languages and namespaces. For backends supporting multiple resources loading */ | ||
|  |   readMulti?( | ||
|  |     languages: readonly string[], | ||
|  |     namespaces: readonly string[], | ||
|  |     callback: MultiReadCallback, | ||
|  |   ): void; | ||
|  |   /** Store the translation. For backends acting as cache layer */ | ||
|  |   save?(language: string, namespace: string, data: ResourceLanguage): void; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Used to detect language in user land. | ||
|  |  * Can be provided as a singleton or as a prototype constructor (preferred for supporting multiple instances of i18next). | ||
|  |  * For singleton set property `type` to `'languageDetector'` For a prototype constructor set static property. | ||
|  |  */ | ||
|  | export interface LanguageDetectorModule extends Module { | ||
|  |   type: 'languageDetector'; | ||
|  |   init(services: Services, detectorOptions: object, i18nextOptions: InitOptions): void; | ||
|  |   /** Must return detected language */ | ||
|  |   detect(): string | readonly string[] | undefined; | ||
|  |   cacheUserLanguage(lng: string): void; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Used to detect language in user land. | ||
|  |  * Can be provided as a singleton or as a prototype constructor (preferred for supporting multiple instances of i18next). | ||
|  |  * For singleton set property `type` to `'languageDetector'` For a prototype constructor set static property. | ||
|  |  */ | ||
|  | export interface LanguageDetectorAsyncModule extends Module { | ||
|  |   type: 'languageDetector'; | ||
|  |   /** Set to true to enable async detection */ | ||
|  |   async: true; | ||
|  |   init(services: Services, detectorOptions: object, i18nextOptions: InitOptions): void; | ||
|  |   /** Must call callback passing detected language */ | ||
|  |   detect(callback: (lng: string | readonly string[] | undefined) => void): void; | ||
|  |   cacheUserLanguage(lng: string): void; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Used to extend or manipulate the translated values before returning them in `t` function. | ||
|  |  * Need to be a singleton object. | ||
|  |  */ | ||
|  | export interface PostProcessorModule extends Module { | ||
|  |   /** Unique name */ | ||
|  |   name: string; | ||
|  |   type: 'postProcessor'; | ||
|  |   process(value: string, key: string, options: TOptions, translator: any): string; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Override the built-in console logger. | ||
|  |  * Do not need to be a prototype function. | ||
|  |  */ | ||
|  | export interface LoggerModule extends Module { | ||
|  |   type: 'logger'; | ||
|  |   log(...args: any[]): void; | ||
|  |   warn(...args: any[]): void; | ||
|  |   error(...args: any[]): void; | ||
|  | } | ||
|  | 
 | ||
|  | export interface I18nFormatModule extends Module { | ||
|  |   type: 'i18nFormat'; | ||
|  | } | ||
|  | 
 | ||
|  | export interface FormatterModule extends Module, Formatter { | ||
|  |   type: 'formatter'; | ||
|  | } | ||
|  | 
 | ||
|  | export interface ThirdPartyModule extends Module { | ||
|  |   type: '3rdParty'; | ||
|  |   init(i18next: i18n): void; | ||
|  | } | ||
|  | 
 | ||
|  | export interface Modules { | ||
|  |   backend?: BackendModule; | ||
|  |   logger?: LoggerModule; | ||
|  |   languageDetector?: LanguageDetectorModule | LanguageDetectorAsyncModule; | ||
|  |   i18nFormat?: I18nFormatModule; | ||
|  |   formatter?: FormatterModule; | ||
|  |   external: ThirdPartyModule[]; | ||
|  | } | ||
|  | 
 | ||
|  | // helper to identify class https://stackoverflow.com/a/45983481/2363935
 | ||
|  | export interface Newable<T> { | ||
|  |   new (...args: any[]): T; | ||
|  | } | ||
|  | 
 | ||
|  | export interface NewableModule<T extends Module> extends Newable<T> { | ||
|  |   type: T['type']; | ||
|  | } | ||
|  | 
 | ||
|  | export interface i18n { | ||
|  |   // Expose parameterized t in the i18next interface hierarchy
 | ||
|  |   t: TFunction; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * The default of the i18next module is an i18next instance ready to be initialized by calling init. | ||
|  |    * You can create additional instances using the createInstance function. | ||
|  |    * | ||
|  |    * @param options - Initial options. | ||
|  |    * @param callback - will be called after all translations were loaded or with an error when failed (in case of using a backend). | ||
|  |    */ | ||
|  |   init(callback?: Callback): Promise<TFunction>; | ||
|  |   init(options: InitOptions, callback?: Callback): Promise<TFunction>; | ||
|  | 
 | ||
|  |   loadResources(callback?: (err: any) => void): void; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * The use function is there to load additional plugins to i18next. | ||
|  |    * For available module see the plugins page and don't forget to read the documentation of the plugin. | ||
|  |    * | ||
|  |    * @param module Accepts a class or object | ||
|  |    */ | ||
|  |   use<T extends Module>(module: T | NewableModule<T> | Newable<T>): this; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * List of modules used | ||
|  |    */ | ||
|  |   modules: Modules; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Internal container for all used plugins and implementation details like languageUtils, pluralResolvers, etc. | ||
|  |    */ | ||
|  |   services: Services; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Internal container for translation resources | ||
|  |    */ | ||
|  |   store: ResourceStore; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Uses similar args as the t function and returns true if a key exists. | ||
|  |    */ | ||
|  |   exists: ExistsFunction; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Returns a resource data by language. | ||
|  |    */ | ||
|  |   getDataByLanguage(lng: string): { [key: string]: { [key: string]: string } } | undefined; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Returns a t function that defaults to given language or namespace. | ||
|  |    * Both params could be arrays of languages or namespaces and will be treated as fallbacks in that case. | ||
|  |    * On the returned function you can like in the t function override the languages or namespaces by passing them in options or by prepending namespace. | ||
|  |    * | ||
|  |    * Accepts optional keyPrefix that will be automatically applied to returned t function. | ||
|  |    */ | ||
|  |   getFixedT( | ||
|  |     lng: string | readonly string[], | ||
|  |     ns?: string | readonly string[], | ||
|  |     keyPrefix?: string, | ||
|  |   ): TFunction; | ||
|  |   getFixedT(lng: null, ns: string | readonly string[] | null, keyPrefix?: string): TFunction; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Changes the language. The callback will be called as soon translations were loaded or an error occurs while loading. | ||
|  |    * HINT: For easy testing - setting lng to 'cimode' will set t function to always return the key. | ||
|  |    */ | ||
|  |   changeLanguage(lng?: string, callback?: Callback): Promise<TFunction>; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Is set to the current detected or set language. | ||
|  |    * If you need the primary used language depending on your configuration (supportedLngs, load) you will prefer using i18next.languages[0]. | ||
|  |    */ | ||
|  |   language: string; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Is set to an array of language-codes that will be used it order to lookup the translation value. | ||
|  |    */ | ||
|  |   languages: readonly string[]; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Is set to the current resolved language. | ||
|  |    * It can be used as primary used language, for example in a language switcher. | ||
|  |    */ | ||
|  |   resolvedLanguage: string; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Loads additional namespaces not defined in init options. | ||
|  |    */ | ||
|  |   loadNamespaces(ns: string | readonly string[], callback?: Callback): Promise<void>; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Loads additional languages not defined in init options (preload). | ||
|  |    */ | ||
|  |   loadLanguages(lngs: string | readonly string[], callback?: Callback): Promise<void>; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Reloads resources on given state. Optionally you can pass an array of languages and namespaces as params if you don't want to reload all. | ||
|  |    */ | ||
|  |   reloadResources( | ||
|  |     lngs?: string | readonly string[], | ||
|  |     ns?: string | readonly string[], | ||
|  |     callback?: () => void, | ||
|  |   ): Promise<void>; | ||
|  |   reloadResources(lngs: null, ns: string | readonly string[], callback?: () => void): Promise<void>; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Changes the default namespace. | ||
|  |    */ | ||
|  |   setDefaultNamespace(ns: string): void; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Checks if a namespace has been loaded. | ||
|  |    */ | ||
|  |   hasLoadedNamespace(ns: string, options?: Pick<InitOptions, 'fallbackLng'>): boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Returns rtl or ltr depending on languages read direction. | ||
|  |    */ | ||
|  |   dir(lng?: string): 'ltr' | 'rtl'; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Exposes interpolation.format function added on init. | ||
|  |    */ | ||
|  |   format: FormatFunction; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Will return a new i18next instance. | ||
|  |    * Please read the options page for details on configuration options. | ||
|  |    * Providing a callback will automatically call init. | ||
|  |    * The callback will be called after all translations were loaded or with an error when failed (in case of using a backend). | ||
|  |    */ | ||
|  |   createInstance(options?: InitOptions, callback?: Callback): i18n; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Creates a clone of the current instance. Shares store, plugins and initial configuration. | ||
|  |    * Can be used to create an instance sharing storage but being independent on set language or namespaces. | ||
|  |    */ | ||
|  |   cloneInstance(options?: InitOptions, callback?: Callback): i18n; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Gets fired after initialization. | ||
|  |    */ | ||
|  |   on(event: 'initialized', callback: (options: InitOptions) => void): void; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Gets fired on loaded resources. | ||
|  |    */ | ||
|  |   on( | ||
|  |     event: 'loaded', | ||
|  |     callback: (loaded: { [language: string]: { [namespace: string]: boolean } }) => void, | ||
|  |   ): void; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Gets fired if loading resources failed. | ||
|  |    */ | ||
|  |   on(event: 'failedLoading', callback: (lng: string, ns: string, msg: string) => void): void; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Gets fired on accessing a key not existing. | ||
|  |    */ | ||
|  |   on( | ||
|  |     event: 'missingKey', | ||
|  |     callback: (lngs: readonly string[], namespace: string, key: string, res: string) => void, | ||
|  |   ): void; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Gets fired when resources got added or removed. | ||
|  |    */ | ||
|  |   on(event: 'added' | 'removed', callback: (lng: string, ns: string) => void): void; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Gets fired when changeLanguage got called. | ||
|  |    */ | ||
|  |   on(event: 'languageChanged', callback: (lng: string) => void): void; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Event listener | ||
|  |    */ | ||
|  |   on(event: string, listener: (...args: any[]) => void): void; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Remove event listener | ||
|  |    * removes all callback when callback not specified | ||
|  |    */ | ||
|  |   off(event: string, listener?: (...args: any[]) => void): void; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Gets one value by given key. | ||
|  |    */ | ||
|  |   getResource( | ||
|  |     lng: string, | ||
|  |     ns: string, | ||
|  |     key: string, | ||
|  |     options?: Pick<InitOptions, 'keySeparator' | 'ignoreJSONStructure'>, | ||
|  |   ): any; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Adds one key/value. | ||
|  |    */ | ||
|  |   addResource( | ||
|  |     lng: string, | ||
|  |     ns: string, | ||
|  |     key: string, | ||
|  |     value: string, | ||
|  |     options?: { keySeparator?: string; silent?: boolean }, | ||
|  |   ): i18n; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Adds multiple key/values. | ||
|  |    */ | ||
|  |   addResources(lng: string, ns: string, resources: any): i18n; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Adds a complete bundle. | ||
|  |    * Setting deep param to true will extend existing translations in that file. | ||
|  |    * Setting overwrite to true it will overwrite existing translations in that file. | ||
|  |    */ | ||
|  |   addResourceBundle( | ||
|  |     lng: string, | ||
|  |     ns: string, | ||
|  |     resources: any, | ||
|  |     deep?: boolean, | ||
|  |     overwrite?: boolean, | ||
|  |   ): i18n; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Checks if a resource bundle exists. | ||
|  |    */ | ||
|  |   hasResourceBundle(lng: string, ns: string): boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Returns a resource bundle. | ||
|  |    */ | ||
|  |   getResourceBundle(lng: string, ns: string): any; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Removes an existing bundle. | ||
|  |    */ | ||
|  |   removeResourceBundle(lng: string, ns: string): i18n; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Current options | ||
|  |    */ | ||
|  |   options: InitOptions; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Is initialized | ||
|  |    */ | ||
|  |   isInitialized: boolean; | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Emit event | ||
|  |    */ | ||
|  |   emit(eventName: string): void; | ||
|  | } | ||
|  | 
 | ||
|  | declare const i18next: i18n; | ||
|  | export default i18next; | ||
|  | 
 | ||
|  | export const createInstance: i18n['createInstance']; | ||
|  | 
 | ||
|  | export const init: i18n['init']; | ||
|  | export const loadResources: i18n['loadResources']; | ||
|  | export const reloadResources: i18n['reloadResources']; | ||
|  | export const use: i18n['use']; | ||
|  | export const changeLanguage: i18n['changeLanguage']; | ||
|  | export const getFixedT: i18n['getFixedT']; | ||
|  | export const t: i18n['t']; | ||
|  | export const exists: i18n['exists']; | ||
|  | export const setDefaultNamespace: i18n['setDefaultNamespace']; | ||
|  | export const hasLoadedNamespace: i18n['hasLoadedNamespace']; | ||
|  | export const loadNamespaces: i18n['loadNamespaces']; | ||
|  | export const loadLanguages: i18n['loadLanguages']; |