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

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

Проблема

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

Решение

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

Шаги

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

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

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. Используйте динамические значения локали

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

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 всегда отражает текущий язык содержимого.