Creation:2025-11-16Last update:2025-11-16

    Documentation: getPrefix Function in intlayer

    Description

    The getPrefix function determines the URL prefix for a given locale based on the routing mode configuration. It compares the locale with the default locale and returns an object containing three different prefix formats for flexible URL construction.

    Key Features:

    • Takes a locale as the first parameter (required)
    • Optional options object with defaultLocale and mode
    • Returns an object with prefix, and localePrefix properties
    • Supports all routing modes: prefix-no-default, prefix-all, no-prefix, and search-params
    • Lightweight utility for determining when to add locale prefixes

    Function Signature

    getPrefix(
      locale: Locales,               // Required
      options?: {                    // Optional
        defaultLocale?: Locales;
        mode?: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params';
      }
    ): GetPrefixResult
    
    type GetPrefixResult = {
      prefix: string;   // e.g., 'fr/' or ''
      localePrefix?: Locale; // e.g., 'fr' or undefined
    }

    Parameters

    • locale: Locales

      • Description: The locale to generate the prefix for. If the value is falsy (undefined, null, empty string), the function returns an empty string.
      • Type: Locales
      • Required: Yes
    • options?: object

      • Description: Configuration object for prefix determination.
      • Type: object
      • Required: No (Optional)

      • options.defaultLocale?: Locales

        • Description: The default locale for the application. If not provided, uses the configured default locale from your project configuration.
        • Type: Locales
        • Default: Project Configuration
      • options.mode?: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'

        • Description: The URL routing mode for locale handling. If not provided, uses the configured mode from your project configuration.
        • Type: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'
        • Default: Project Configuration
        • Modes:
          • prefix-no-default: Returns empty strings when locale matches default locale
          • prefix-all: Returns prefix for all locales including default
          • no-prefix: Returns empty strings (no prefix in URLs)
          • search-params: Returns empty strings (locale in query parameters)

    Returns

    • Type: GetPrefixResult
    • Description: An object containing three different prefix formats:
      • prefix: The path prefix with trailing slash (e.g., 'fr/', '')
      • localePrefix: The locale identifier without slashes (e.g., 'fr', undefined)

    Example Usage

    Basic Usage

    import { getPrefix, Locales } from "intlayer";
    
    // Check prefix for English locale
    getPrefix(Locales.ENGLISH, {
      defaultLocale: Locales.ENGLISH,
      mode: "prefix-all",
    });
    // Returns: { prefix: 'en/', localePrefix: 'en' }
    
    // Check prefix for French locale
    getPrefix(Locales.FRENCH, {
      defaultLocale: Locales.ENGLISH,
      mode: "prefix-no-default",
    });
    // Returns: { prefix: 'fr/', localePrefix: 'fr' }

    Different Routing Modes

    import { getPrefix, Locales } from "intlayer";
    
    // prefix-all: Always returns prefix
    getPrefix(Locales.ENGLISH, {
      mode: "prefix-all",
      defaultLocale: Locales.ENGLISH,
    });
    // Returns: { prefix: '/en', localePrefix: 'en' }
    
    // prefix-no-default: No prefix when locale matches default
    getPrefix(Locales.ENGLISH, {
      mode: "prefix-no-default",
      defaultLocale: Locales.ENGLISH,
    });
    // Returns: { prefix: '', localePrefix: undefined }
    
    // prefix-no-default: Returns prefix when locale differs from default
    getPrefix(Locales.FRENCH, {
      mode: "prefix-no-default",
      defaultLocale: Locales.ENGLISH,
    });
    // Returns: { prefix: 'fr/', localePrefix: 'fr' }
    
    // no-prefix & search-params: Never returns prefix
    getPrefix(Locales.ENGLISH, { mode: "no-prefix" });
    // Returns: { prefix: '', localePrefix: undefined }
    
    getPrefix(Locales.ENGLISH, { mode: "search-params" });
    // Returns: { prefix: '', localePrefix: undefined }

    Practical Example

    import { getPrefix, Locales } from "intlayer";
    
    // Build URLs with the appropriate prefix for a specific locale
    const locale = Locales.FRENCH;
    const { prefix, localePrefix } = getPrefix(locale, {
      defaultLocale: Locales.ENGLISH,
      mode: "prefix-no-default",
    });
    
    // Using prefix for path construction
    const url1 = `/${prefix}about`.replace(/\/+/g, "/");
    // Result: "/fr/about"
    
    // Using localePrefix for locale identification
    console.log(`Current locale: ${localePrefix}`);
    // Output: "Current locale: fr"


    TypeScript

    type GetPrefixResult = {
      prefix: string; // The path prefix with trailing slash (e.g., 'fr/' or '')
      localePrefix?: Locale; // The locale identifier without slashes (e.g., 'fr' or undefined)
    };
    
    function getPrefix(
      locale: Locales,
      options?: {
        defaultLocale?: Locales;
        mode?: "prefix-no-default" | "prefix-all" | "no-prefix" | "search-params";
      }
    ): GetPrefixResult;