declare const allowedLocales: readonly ["en", "ja", "fr", "de", "es", "it", "nl", "pl", "pt", "ru", "th", "tr", "uk", "zh-CN", "zh-TW", "ko", "id", "hi", "cs", "ar", "all"]; type Locale = (typeof allowedLocales)[number]; type SimpleDict = Record; type MultiLangDict = Record>>; type TFunc = (locale: string) => Promise<(key: string) => string>; type SimpleDictWithTFunc = (t: (key: string) => string) => Record; type LocalizationOptionsExt = ({ enabledLocales: Locale[]; i18nRouting?: never; singleLang?: never; } & LocalizationOptionsCommon) | ({ enabledLocales?: never; i18nRouting: Locale[]; singleLang?: never; } & LocalizationOptionsCommon) | ({ enabledLocales?: never; i18nRouting?: never; singleLang: Exclude; } & LocalizationOptionsCommon) | ({ enabledLocales?: never; i18nRouting?: never; singleLang?: never; } & LocalizationOptionsCommon); type LocalizationOptionsCommon = { simpleDict?: SimpleDict; multiLangDict?: MultiLangDict; } & ({ simpleDictWithTFunc: SimpleDictWithTFunc; tFuncServer: (locale: string) => Promise<(key: string) => string>; } | { simpleDictWithTFunc?: undefined; tFuncServer?: undefined; }); /** * getLang(ctx, options) * Determines the language to use based on the request context and localization options. * @param ctx - The request context (should have acceptLanguage and referer properties) * @param options - Localization options (enabledLocales, i18nRouting, or singleLang) * @returns {Locale | undefined} - The detected locale or undefined if not found * * Usage: * const lang = getLang(ctx, options); */ declare function getLang(ctx: any, options?: LocalizationOptionsExt): Locale | undefined; /** * getLocalizedMessage(lang, code) * Returns the localized message string for the given language and code. * @param lang - The language code (e.g., 'en', 'ja') * @param code - The message code/key * @returns {string | undefined} - The localized message or undefined if not found * * Usage: * const message = getLocalizedMessage('en', 'LOGIN_SUCCESS'); */ declare function getLocalizedMessage(lang: string | undefined, code: string | undefined): string | undefined; declare function generateDictWithT(simpleDictWithTFunc: SimpleDictWithTFunc, tFuncServer: (locale: string) => Promise<(key: string) => string>, locale: string): Promise>; /** * localization(options) * Returns a BetterAuthPlugin for localization, handling request and response localization. * * @param {Object} options - Localization options object (optional) * @param {Record} [options.simpleDict] - Key-value pairs to merge into all languages. * @param {Record>>} [options.multiLangDict] - Per-language * message dictionary for each code. * @param {Locale[]} [options.enabledLocales] - Array of allowed locales. "all" allows all supported locales. * @param {Locale[]} [options.i18nRouting] - Locales to detect from the first path segment of the referer URL. * @param {Exclude} [options.singleLang] - Always use this language for localization. * * @returns {BetterAuthPlugin} - The localization plugin object with onRequest and onResponse hooks. * * Usage: * // Example 1: No arguments (default behavior) * plugins: [localization()], * // Uses Accept-Language header to determine the language and translate. * * // Example 2: singleLang * plugins: [localization({ * singleLang: "ja" * })], * // Always uses Japanese for localization, regardless of request headers or URL. * * // Example 3: enabledLocales and multiLangDict (multiple languages) * plugins: [localization({ * enabledLocales: ["en", "ja", "fr"], * simpleDict: { LOGIN_SUCCESS: "Login successful!" }, * multiLangDict: { * LOGIN_SUCCESS: { * en: "Login successful!", * ja: "ログイン成功!", * fr: "Connexion réussie !" * } * } * })], * // The message will be translated based on Accept-Language header but limited to the enabledLocales. * // simpleDict and multiLangDict are used with priority over default translations. * * // Example 4: i18nRouting * plugins: [localization({ * i18nRouting: ["en", "ja"], * simpleDict: { * LOGIN_SUCCESS: "Login successful!" * } * })], * // The language is determined from the first path segment of the referer URL. * * // Example 5: simpleDictWithTFunc and tFuncServer (for dynamic translation) * plugins: [localization({ * i18nRouting: ["en", "ja"], * simpleDictWithTFunc: (t) => ({ EMAIL_NOT_VERIFIED: t("Email not verified!!") }), * tFuncServer: async (locale) => { * const t = await getTranslations({ locale }); * return (key) => t(key); * }, * })], * // Used for i18n routing such as next-intl. * // The message will be dynamically translated using the t function for the current locale. * * // Use plugin.onRequest and plugin.onResponse in your auth flow */ declare const localization: (options?: LocalizationOptionsExt) => { id: "localization"; onRequest(req: Request, ctx: any): Promise; onResponse: (response: Response, ctx: any) => Promise<{ response: Response; }>; }; export { type LocalizationOptionsCommon, type LocalizationOptionsExt, type MultiLangDict, type SimpleDict, type SimpleDictWithTFunc, type TFunc, generateDictWithT, getLang, getLocalizedMessage, localization };