Спросите свой вопрос и получите сводку документа, используя эту страницу и выбранного вами поставщика AI
История версий
- "Инициализация истории"v5.5.1029.06.2025
Содержимое этой страницы было переведено с помощью ИИ.
Смотреть последнюю версию оригинального контента на английскомIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
Документация: функция t в express-intlayer
Функция t в пакете express-intlayer является основным инструментом для предоставления локализованных ответов в вашем приложении Express. Она упрощает интернационализацию (i18n), динамически выбирая контент на основе предпочтительного языка пользователя.
Обзор
Функция t используется для определения и получения переводов для заданного набора языков. Она автоматически определяет подходящий язык для возврата на основе настроек запроса клиента, таких как заголовок Accept-Language. Если предпочтительный язык недоступен, функция плавно переключается на язык по умолчанию, указанный в вашей конфигурации.
Основные возможности
- Динамическая локализация: Автоматически выбирает наиболее подходящий перевод для клиента.
- Переход к языку по умолчанию: Переходит к языку по умолчанию, если предпочтительный язык клиента недоступен, обеспечивая непрерывность пользовательского опыта.
- Легковесность и высокая скорость: Разработано для высокопроизводительных приложений с минимальными накладными расходами.
- Поддержка строгого режима: Обеспечивает строгое соблюдение объявленных локалей для надежного поведения.
Сигнатура функции
Копировать код в буфер обмена
t(translations: Record<string, string>): string;Параметры
translations: Объект, где ключами являются коды локалей (например,en,fr,es-MX), а значениями - соответствующие переведённые строки.
Возвращает
- Строку, представляющую содержимое на предпочтительном языке клиента.
Загрузка обработчика запросов интернационализации
Чтобы обеспечить корректную работу функционала интернационализации, предоставляемого express-intlayer, вы должны загрузить промежуточное ПО интернационализации в начале вашего Express-приложения. Это активирует функцию t и гарантирует правильную обработку определения локали и перевода.
Разместите промежуточное ПО app.use(intlayer()) до определения любых маршрутов в вашем приложении, чтобы все маршруты могли использовать интернационализацию:
Копировать код в буфер обмена
import express, { type Express } from "express";
import { intlayer } from "express-intlayer";
const app: Express = express();
// Загрузка обработчика запросов интернационализации
app.use(intlayer());
// Определяйте маршруты после загрузки промежуточного ПО
app.get("/", (_req, res) => {
res.send(
t({
en: "Hello, World!",
fr: "Bonjour le monde!",
es: "¡Hola, Mundo!",
})
);
});Почему это необходимо
- Определение локали: Промежуточное ПО
intlayerобрабатывает входящие запросы для определения предпочтительной локали пользователя на основе заголовков, куки или других настроенных методов. - Контекст перевода: Устанавливает необходимый контекст для корректной работы функции
t, обеспечивая возврат переводов на нужном языке. - Предотвращение ошибок: Без этого промежуточного ПО использование функции
tприведет к ошибкам во время выполнения, так как необходимая информация о локали будет недоступна.
Примеры использования
Простой пример
Обслуживание локализованного контента на разных языках:
Копировать код в буфер обмена
app.get("/", (_req, res) => {
res.send(
t({
en: "Welcome!",
fr: "Bienvenue!",
es: "¡Bienvenido!",
})
);
});Запросы клиентов:
- Клиент с заголовком
Accept-Language: frполучитBienvenue!. - Клиент с
Accept-Language: esполучит¡Bienvenido!. - Клиент с
Accept-Language: deполучитWelcome!(язык по умолчанию).
Обработка ошибок
Предоставляйте сообщения об ошибках на нескольких языках:
Копировать код в буфер обмена
app.get("/error", (_req, res) => {
res.status(500).send(
t({
en: "An unexpected error occurred.",
fr: "Une erreur inattendue s'est produite.",
es: "Ocurrió un error inesperado.",
})
);
});Использование вариантов локалей
Укажите переводы для локальных вариантов:
Копировать код в буфер обмена
app.get("/greet", (_req, res) => { res.send( t({ en: "Hello!", "en-GB": "Hello, mate!", fr: "Bonjour!", "es-MX": "¡Hola, amigo!", "es-ES": "¡Hola!", }) );});Продвинутые темы
Механизм резервного варианта
Если предпочитаемая локаль недоступна, функция t переключится на локаль по умолчанию, определённую в конфигурации:
Копировать код в буфер обмена
import { Locales, type IntlayerConfig } from "intlayer";
const config = {
internationalization: {
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
defaultLocale: Locales.ENGLISH,
},
} satisfies IntlayerConfig;
export default config;Например:
- Если
defaultLocaleустановлен вLocales.CHINESE, а клиент запрашиваетLocales.DUTCH, возвращаемый перевод будет по умолчанию изLocales.CHINESE. - Если
defaultLocaleне определён, функцияtбудет использовать значение по умолчанию изLocales.ENGLISH.
Принудительное соблюдение строгого режима
Настройте функцию t для строгого соблюдения объявленных локалей:
Открыть таблицу в модальном окне для четкого просмотра всех данных
| Режим | Поведение |
|---|---|
strict | Для всех объявленных локалей должны быть предоставлены переводы. Отсутствие перевода вызовет ошибку. |
inclusive | Объявленные локали должны иметь переводы. Отсутствующие локали вызывают предупреждения, но принимаются. |
loose | Принимается любая существующая локаль, даже если она не объявлена. |
Пример конфигурации:
Копировать код в буфер обмена
import { type IntlayerConfig } from "intlayer";
const config = {
// ... Ваша существующая конфигурация
internationalization: {
// ... Ваша существующая конфигурация интернационализации
strictMode: "strict", // Включить строгий режим
},
} satisfies IntlayerConfig;
export default config;Интеграция с TypeScript
Функция t является типобезопасной при использовании с TypeScript. Определите типобезопасный объект переводов:
Копировать код в буфер обмена
import { type LanguageContent } from "express-intlayer";
const translations: LanguageContent<string> = {
en: "Good morning!",
fr: "Bonjour!",
es: "¡Buenos días!",
};
app.get("/morning", (_req, res) => {
res.send(t(translations));
});Распространённые ошибки и их устранение
Открыть таблицу в модальном окне для четкого просмотра всех данных
| Проблема | Причина | Решение |
|---|---|---|
Функция t не работает | Middleware не подключен | Убедитесь, что app.use(intlayer()) добавлен до маршрутов. |
| Ошибка отсутствующих переводов | Включён строгий режим без всех локалей | Предоставьте все необходимые переводы. |
Советы по эффективному использованию
- Централизуйте переводы: Используйте централизованный модуль или JSON-файлы для управления переводами, чтобы повысить удобство сопровождения.
- Проверяйте переводы: Убедитесь, что для каждого языкового варианта существует соответствующий перевод, чтобы избежать ненужного возврата к запасному языку.
- Интегрируйте с фронтенд i18n: Синхронизируйте с системой интернационализации на фронтенде для обеспечения бесшовного пользовательского опыта во всём приложении.
- Оценивайте производительность: Тестируйте время отклика вашего приложения при добавлении переводов, чтобы гарантировать минимальное влияние на производительность.
Заключение
Функция t является мощным инструментом для интернационализации на стороне сервера. Эффективно используя её, вы можете создать более инклюзивное и удобное для пользователя приложение для глобальной аудитории. Для продвинутого использования и подробных вариантов настройки обратитесь к документации.