import type { Cookie, SessionStorage } from "react-router";
import type { MiddlewareFunction } from "react-router";
type MiddlewareArgs = Parameters<MiddlewareFunction<Response>>[0];
export interface LanguageDetectorArgs extends MiddlewareArgs {
}
export interface LanguageDetectorOption {
    /**
     * Define the list of supported languages, this is used to determine if one of
     * the languages requested by the user is supported by the application.
     * This should be be same as the supportedLngs in the i18next options.
     */
    supportedLanguages: string[];
    /**
     * Define the fallback language that it's going to be used in the case user
     * expected language is not supported.
     * This should be be same as the fallbackLng in the i18next options.
     */
    fallbackLanguage: string;
    /**
     * If you want to use a cookie to store the user preferred language, you can
     * pass the Cookie object here.
     */
    cookie?: Cookie;
    /**
     * If you want to use a session to store the user preferred language, you can
     * pass the SessionStorage object here.
     * When this is not defined, getting the locale will ignore the session.
     */
    sessionStorage?: SessionStorage;
    /**
     * If defined a sessionStorage and want to change the default key used to
     * store the user preferred language, you can pass the key here.
     * @default "lng"
     */
    sessionKey?: string;
    /**
     * If you want to use search parameters for language detection and want to
     * change the default key used to for the parameter name,
     * you can pass the key here.
     * @default "lng"
     */
    searchParamKey?: string;
    /**
     * The order the library will use to detect the user preferred language.
     * By default the order is
     * - searchParams
     * - cookie
     * - session
     * - header
     * If customized, a an extra `custom` option can be added to the order.
     * And finally the fallback language.
     */
    order?: Array<"searchParams" | "cookie" | "session" | "header" | "custom">;
    /**
     * A function that can be used to find the locale using the full route args.
     * This can be useful to get the locale from the URL pathname, or to query it
     * from the database or fetch it from an API.
     */
    findLocale?(args: LanguageDetectorArgs): Promise<string | Array<string> | null>;
}
/**
 * The LanguageDetector contains the logic to detect the user preferred language
 * fully server-side by using a SessionStorage, Cookie, URLSearchParams, or
 * Headers.
 */
export declare class LanguageDetector {
    private options;
    /**
     * Create a language detector with the provided detection options.
     */
    constructor(options: LanguageDetectorOption);
    /**
     * Ensure session-only mode has a session storage configured.
     */
    private isSessionOnly;
    /**
     * Ensure cookie-only mode has a cookie configured.
     */
    private isCookieOnly;
    /**
     * Detect the best language for the current request.
     */
    detect(args: LanguageDetectorArgs): Promise<string>;
    /**
     * Build the default detection order.
     */
    private get defaultOrder();
    /**
     * Read the locale from the URL search params.
     */
    private fromSearchParams;
    /**
     * Read the locale from a cookie.
     */
    private fromCookie;
    /**
     * Read the locale from session storage.
     */
    private fromSessionStorage;
    /**
     * Read the locale from the `Accept-Language` header.
     */
    private fromHeader;
    /**
     * Read the locale from the custom locale finder.
     */
    private fromCustom;
    /**
     * Match a locale against the configured supported languages.
     */
    private fromSupported;
}
export {};
