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