UNPKG

@intlayer/core

Version:

Includes core Intlayer functions like translation, dictionary, and utility functions shared across multiple packages.

74 lines (72 loc) 4.17 kB
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs'); const require_utils_checkIsURLAbsolute = require('../utils/checkIsURLAbsolute.cjs'); const require_localization_getPathWithoutLocale = require('./getPathWithoutLocale.cjs'); const require_localization_getPrefix = require('./getPrefix.cjs'); let __intlayer_config_client = require("@intlayer/config/client"); let __intlayer_config_built = require("@intlayer/config/built"); __intlayer_config_built = require_rolldown_runtime.__toESM(__intlayer_config_built); //#region src/localization/getLocalizedUrl.ts /** * Generate URL by prefixing the given URL with the referenced locale or adding search parameters * based on the routing mode. Handles both absolute and relative URLs appropriately. * * This function gets the locales, default locale, and routing mode from the configuration if not provided. * * Example: * * ```ts * // prefix-no-default mode * getLocalizedUrl('/about', 'fr', { locales: ['en', 'fr'], defaultLocale: 'en', mode: 'prefix-no-default' }); * // Returns '/fr/about' for the French locale * // Returns '/about' for the English locale (default) * * // prefix-all mode * getLocalizedUrl('/about', 'en', { locales: ['en', 'fr'], defaultLocale: 'en', mode: 'prefix-all' }); * // Returns '/en/about' for the English locale * // Returns '/fr/about' for the French locale * * // search-params mode * getLocalizedUrl('/about', 'fr', { locales: ['en', 'fr'], defaultLocale: 'en', mode: 'search-params' }); * // Returns '/about?locale=fr' for the French locale * * // no-prefix mode * getLocalizedUrl('/about', 'fr', { locales: ['en', 'fr'], defaultLocale: 'en', mode: 'no-prefix' }); * // Returns '/about' for any locale * ``` * * @param url - The original URL string to be processed. * @param currentLocale - The current locale. * @param options - Configuration options * @param options.locales - Optional array of supported locales. Defaults to configured locales. * @param options.defaultLocale - The default locale. Defaults to configured default locale. * @param options.mode - URL routing mode for locale handling. Defaults to configured mode. * @returns The localized URL for the current locale. */ const getLocalizedUrl = (url, currentLocale, options = {}) => { const { locales = __intlayer_config_built.default?.internationalization?.locales ?? __intlayer_config_client.DefaultValues.Internationalization.LOCALES, defaultLocale = __intlayer_config_built.default?.internationalization?.defaultLocale ?? __intlayer_config_client.DefaultValues.Internationalization.DEFAULT_LOCALE, mode = __intlayer_config_built.default?.routing?.mode ?? __intlayer_config_client.DefaultValues.Routing.ROUTING_MODE } = options; const urlWithoutLocale = require_localization_getPathWithoutLocale.getPathWithoutLocale(url, locales); if (mode === "no-prefix") return urlWithoutLocale; const isAbsoluteUrl = require_utils_checkIsURLAbsolute.checkIsURLAbsolute(urlWithoutLocale); const parsedUrl = isAbsoluteUrl ? new URL(urlWithoutLocale) : new URL(urlWithoutLocale, "http://example.com"); const baseUrl = isAbsoluteUrl ? `${parsedUrl.protocol}//${parsedUrl.host}` : ""; if (mode === "search-params") { const searchParams = new URLSearchParams(parsedUrl.search); searchParams.set("locale", currentLocale.toString()); const queryString = searchParams.toString(); const pathWithQuery = queryString ? `${parsedUrl.pathname}?${queryString}` : parsedUrl.pathname; if (isAbsoluteUrl) return `${baseUrl}${pathWithQuery}${parsedUrl.hash}`; return `${pathWithQuery}${parsedUrl.hash}`; } const { prefix } = require_localization_getPrefix.getPrefix(currentLocale, { defaultLocale, mode }); let localizedPath = `/${prefix}${parsedUrl.pathname}`; localizedPath = localizedPath.replaceAll(/\/+/g, "/"); if (localizedPath.length > 1 && localizedPath.endsWith("/")) localizedPath = localizedPath.slice(0, -1); if (isAbsoluteUrl) return `${baseUrl}${localizedPath}${parsedUrl.search}${parsedUrl.hash}`; return `${localizedPath}${parsedUrl.search}${parsedUrl.hash}`; }; //#endregion exports.getLocalizedUrl = getLocalizedUrl; //# sourceMappingURL=getLocalizedUrl.cjs.map