Автор:
    Создание:2026-06-22Последнее обновление:2026-06-22

    Документация: Функция comparePaths в intlayer

    Описание

    Функция comparePaths сравнивает два URL или пути на равенство, игнорируя сегмент локали, протокол/хост, строку запроса (query string), хэш и конечные слэши. Это рекомендуемый способ определения, указывает ли навигационная ссылка на текущую страницу (например, для выделения активной ссылки), без необходимости писать собственную (склонную к ошибкам) логику нормализации.

    Внутри она повторно использует getPathWithoutLocale для удаления сегмента локали, поэтому она учитывает ваш настроенный режим маршрутизации и локали.

    Пакет также экспортирует базовый помощник normalizePath, который возвращает канонический путь, независимый от локали, используемый для сравнения.

    Ключевые особенности:

    • Сравнение независимо от локали (/ru/about совпадает с /about)
    • Работает как с абсолютными URL, так и с относительными путями
    • Игнорирует строку запроса, хэш и конечные слэши
    • Допускает отсутствие начальных слэшей и пустые значения (нормализуется к /)
    • Легковесная — построена поверх getPathWithoutLocale

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

    typescript
    comparePaths(  pathname: string,  // Обязательно  href: string,      // Обязательно  locales?: Locales[] // Необязательно): booleannormalizePath(  inputUrl: string,   // Обязательно  locales?: Locales[] // Необязательно): string

    Параметры

    • pathname: string

      • Описание: Первая строка URL или путь для сравнения (обычно текущий путь).
      • Тип: string
      • Обязательно: Да
    • href: string

      • Описание: Вторая строка URL или путь для сравнения (обычно href навигационной ссылки).
      • Тип: string
      • Обязательно: Да
    • locales: Locales[]

      • Описание: Необязательный массив поддерживаемых локалей. По умолчанию используются локали, настроенные в проекте.
      • Тип: Locales[]
      • Обязательно: Нет (Необязательно)

    Возвращает

    • Тип: boolean
    • Описание: true, когда оба входа разрешаются в один и тот же путь, независимый от локали, иначе false.

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

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

    typescript
    import { comparePaths } from "intlayer";
    
    comparePaths("/ru/path", "/path"); // true
    comparePaths("/ru/path/", "/path"); // true
    comparePaths("/ru/path", "/path/"); // true
    comparePaths("/ru/", "/"); // true
    comparePaths("/ru", "/"); // true
    comparePaths("ru/path", "/path"); // true
    comparePaths("", "/"); // true
    comparePaths("/ru", ""); // true
    comparePaths("/ru/path", "/other"); // false

    Абсолютные и относительные URL

    typescript
    import { comparePaths } from "intlayer";comparePaths("https://example.com/ru/path", "/path"); // true

    Выделение активной навигационной ссылки

    tsx
    import { comparePaths } from "intlayer";import { useLocation } from "react-router";const NavLink = ({ href, children }) => {  const { pathname } = useLocation();  const isActive = comparePaths(pathname, href);  return (    <a href={href} aria-current={isActive ? "page" : undefined}>      {children}    </a>  );};

    normalizePath

    normalizePath возвращает канонический путь, независимый от локали, используемый comparePaths. Он удаляет сегмент локали, протокол/хост, строку запроса и хэш, обеспечивает наличие одного начального слэша, удаляет любые конечные слэши (кроме корня) и возвращает / для пустых значений.

    typescript
    import { normalizePath } from "intlayer";
    
    normalizePath("/ru/path"); // "/path"
    normalizePath("/ru/path/"); // "/path"
    normalizePath("ru/path"); // "/path"
    normalizePath("/ru/"); // "/"
    normalizePath("/ru"); // "/"
    normalizePath(""); // "/"
    normalizePath("https://example.com/ru/path"); // "/path"

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

    • getPathWithoutLocale: Удаляет сегмент локали из URL или пути.
    • getPrefix: Определяет префикс URL для заданной локали.
    • getLocalizedUrl: Генерирует локализованный URL для указанной локали.

    TypeScript

    typescript
    function normalizePath(inputUrl: string, locales?: Locales[]): string;function comparePaths(  pathname: string,  href: string,  locales?: Locales[]): boolean;