Создание:2025-11-16Последнее обновление:2025-11-16

    Документация: функция getPrefix в intlayer

    Описание

    Функция getPrefix определяет префикс URL для заданной локали на основе конфигурации режима маршрутизации. Она сравнивает локаль с локалью по умолчанию и возвращает объект, содержащий три различных формата префикса для гибкого построения URL.

    Основные особенности:

    • Принимает локаль в качестве первого параметра (обязательно)
    • Необязательный объект options с параметрами defaultLocale и mode
    • Возвращает объект с свойствами prefix и localePrefix
    • Поддерживает все режимы маршрутизации: prefix-no-default, prefix-all, no-prefix и search-params
    • Легковесная утилита для определения, когда добавлять префиксы локали

    Сигнатура функции

    getPrefix(
      locale: Locales,               // Обязательно
      options?: {                    // Необязательно
        defaultLocale?: Locales;
        mode?: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params';
      }
    ): GetPrefixResult
    
    type GetPrefixResult = {
      prefix: string;   // например, 'fr/' или ''
      localePrefix?: Locale; // например, 'fr' или undefined
    }

    Параметры

    • locale: Locales

      • Описание: Локаль, для которой необходимо сгенерировать префикс. Если значение ложно (undefined, null, пустая строка), функция возвращает пустую строку.
      • Тип: Locales
      • Обязательно: Да
    • options?: object

      • Описание: Объект конфигурации для определения префикса.
      • Тип: object
      • Обязательно: Нет (необязательно)

      • options.defaultLocale?: Locales

        • Описание: Локаль по умолчанию для приложения. Если не указана, используется локаль по умолчанию, настроенная в конфигурации вашего проекта.
        • Тип: Locales
        • По умолчанию: Конфигурация проекта
      • options.mode?: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'

        • Описание: Режим маршрутизации URL для обработки локали. Если не указан, используется настроенный режим из конфигурации вашего проекта.
        • Тип: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'
        • По умолчанию: Конфигурация проекта
        • Режимы:
          • prefix-no-default: Возвращает пустые строки, когда локаль совпадает с локалью по умолчанию
          • prefix-all: Возвращает префикс для всех локалей, включая локаль по умолчанию
          • no-prefix: Возвращает пустые строки (без префикса в URL)
          • search-params: Возвращает пустые строки (локаль в параметрах запроса)

    Возвращает

    • Тип: GetPrefixResult
    • Описание: Объект, содержащий три различных формата префикса:
      • prefix: Префикс пути с завершающим слэшем (например, 'fr/', '')
      • localePrefix: Идентификатор локали без слэшей (например, 'fr', undefined)

    Пример использования

    Базовое использование

    import { getPrefix, Locales } from "intlayer";
    
    // Проверка префикса для английской локали
    getPrefix(Locales.ENGLISH, {
      defaultLocale: Locales.ENGLISH,
      mode: "prefix-all",
    });
    // Возвращает: { prefix: 'en/', localePrefix: 'en' }
    
    // Проверка префикса для французской локали
    getPrefix(Locales.FRENCH, {
      defaultLocale: Locales.ENGLISH,
      mode: "prefix-no-default",
    });
    // Возвращает: { prefix: 'fr/', localePrefix: 'fr' }

    Различные режимы маршрутизации

    import { getPrefix, Locales } from "intlayer";
    
    // prefix-all: Всегда возвращает префикс
    getPrefix(Locales.ENGLISH, {
      mode: "prefix-all",
      defaultLocale: Locales.ENGLISH,
    });
    // Возвращает: { prefix: '/en', localePrefix: 'en' }
    
    // prefix-no-default: Нет префикса, если локаль совпадает с локалью по умолчанию
    getPrefix(Locales.ENGLISH, {
      mode: "prefix-no-default",
      defaultLocale: Locales.ENGLISH,
    });
    // Возвращает: { prefix: '', localePrefix: undefined }
    
    // prefix-no-default: Возвращает префикс, когда локаль отличается от локали по умолчанию
    getPrefix(Locales.FRENCH, {
      mode: "prefix-no-default",
      defaultLocale: Locales.ENGLISH,
    });
    // Возвращает: { prefix: 'fr/', localePrefix: 'fr' }
    
    // no-prefix и search-params: Никогда не возвращают префикс
    getPrefix(Locales.ENGLISH, { mode: "no-prefix" });
    // Возвращает: { prefix: '', localePrefix: undefined }
    
    getPrefix(Locales.ENGLISH, { mode: "search-params" });
    // Возвращает: { prefix: '', localePrefix: undefined }

    Практический пример

    import { getPrefix, Locales } from "intlayer";
    
    // Формируем URL с соответствующим префиксом для конкретной локали
    const locale = Locales.FRENCH;
    const { prefix, localePrefix } = getPrefix(locale, {
      defaultLocale: Locales.ENGLISH,
      mode: "prefix-no-default",
    });
    
    // Использование префикса для построения пути
    const url1 = `/${prefix}about`.replace(/\/+/g, "/");
    // Результат: "/fr/about"
    
    // Использование localePrefix для идентификации локали
    console.log(`Текущая локаль: ${localePrefix}`);
    // Вывод: "Текущая локаль: fr"

    Связанные функции

    • getLocalizedUrl: Генерирует локализованный URL для конкретной локали
    • getMultilingualUrls: Генерирует URL для всех настроенных локалей

    TypeScript

    type GetPrefixResult = {
      prefix: string; // Префикс пути с завершающим слэшем (например, 'fr/' или '')
      localePrefix?: Locale; // Идентификатор локали без слэшей (например, 'fr' или undefined)
    };
    
    function getPrefix(
      locale: Locales,
      options?: {
        defaultLocale?: Locales;
        mode?: "prefix-no-default" | "prefix-all" | "no-prefix" | "search-params";
      }
    ): GetPrefixResult;