Как задать язык документа в TanStack Start v1

Укажите язык страницы для браузеров и экранных читалок

Проблема

Веб-страницы должны явно указывать основной язык, чтобы корректно работать в разных пользовательских агентах. Если на корневом HTML-элементе не задан язык, браузеры не могут определить язык содержимого и вынуждены угадывать. В этом случае экранные читалки используют язык системы пользователя, что приводит к неправильному произношению, если язык контента отличается. Браузеры не могут корректно предлагать функции перевода, так как не знают исходный язык. Поисковые системы испытывают трудности с индексацией контента для нужной языковой аудитории, что снижает видимость для пользователей, ищущих на этом языке.

Решение

Добавьте атрибут lang в тег html, чтобы задать язык страницы по умолчанию. В TanStack Start HTML-оболочка определяется в корневом маршруте через shellComponent, который формирует структуру документа, включая элемент <html>. Добавив атрибут lang с нужным языковым кодом к этому элементу, вы сообщаете браузерам, вспомогательным технологиям и поисковым системам о языке содержимого, чтобы они могли правильно его обрабатывать и отображать.

Шаги

1. Определите текущую локаль

Свойство shellComponent корневого маршрута определяет HTML-оболочку, которая оборачивает всё содержимое маршрутов и всегда рендерится на сервере. Определите текущую локаль с помощью механизма определения локали вашего приложения — например, через параметры маршрута, куки или заголовки.

import type { ReactNode } from "react";
import {
  Outlet,
  createRootRoute,
  HeadContent,
  Scripts,
} from "@tanstack/react-router";

export const Route = createRootRoute({
  shellComponent: RootDocument,
  component: RootComponent,
});

function RootComponent() {
  return <Outlet />;
}

function RootDocument({ children }: { children: ReactNode }) {
  const locale = "en";

  return (
    <html>
      <head>
        <HeadContent />
      </head>
      <body>
        {children}
        <Scripts />
      </body>
    </html>
  );
}

Это задаёт структуру оболочки, в которую вы добавите языковой атрибут.

2. Добавьте атрибут lang к элементу html

Установите атрибут lang на элемент <html> с помощью значения локали. Используйте корректный языковой тег BCP 47, который соответствует языку вашего контента.

function RootDocument({ children }: { children: ReactNode }) {
  const locale = "en";

  return (
    <html lang={locale}>
      <head>
        <HeadContent />
      </head>
      <body>
        {children}
        <Scripts />
      </body>
    </html>
  );
}

Теперь атрибут lang объявляет язык документа, что позволяет браузерам и вспомогательным технологиям корректно обрабатывать контент.

3. Используйте динамические значения локали

Если ваше приложение поддерживает несколько локалей, получите текущую локаль из вашей системы маршрутизации или управления состоянием и передайте её в shell-компонент.

function RootDocument({ children }: { children: ReactNode }) {
  const locale = getCurrentLocale();

  return (
    <html lang={locale}>
      <head>
        <HeadContent />
      </head>
      <body>
        {children}
        <Scripts />
      </body>
    </html>
  );
}

function getCurrentLocale(): string {
  return "en";
}

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