--- createdAt: 2024-12-02 updatedAt: 2025-06-29 title: Документація: функція `t` у `express-intlayer` description: Дізнайтеся, як використовувати функцію `t` у пакеті `express-intlayer` keywords: - t - переклад - Intlayer - інтернаціоналізація - документація - Express - JavaScript - React slugs: - doc - packages - express-intlayer - t history: - version: 5.5.10 date: 2025-06-29 changes: Ініціалізація історії --- # Документація: функція `t` у `express-intlayer` Функція `t` у пакеті `express-intlayer` — це основна утиліта для надання локалізованих відповідей у вашому додатку Express. Вона спрощує інтернаціоналізацію (i18n), динамічно підбираючи контент залежно від бажаної мови користувача. --- ## Огляд Функція `t` використовується для визначення та отримання перекладів для заданого набору мов. Вона автоматично визначає відповідну мову для повернення на основі налаштувань запиту клієнта, таких як заголовок `Accept-Language`. Якщо бажана мова недоступна, вона коректно повертає локаль за замовчуванням, вказану у вашій конфігурації. --- ## Ключові можливості - **Динамічна локалізація**: автоматично обирає найвідповідніший переклад для клієнта. - **Повернення до локалі за замовчуванням**: у разі недоступності бажаної мови використовується локаль за замовчуванням, що забезпечує безперервність користувацького досвіду. - **Легкий і швидкий**: спроектовано для високопродуктивних застосунків, забезпечуючи мінімальні накладні витрати. - **Підтримка Strict Mode**: Забезпечує суворе дотримання оголошених локалей для надійної роботи. --- ## Підпис функції ```typescript t(translations: Record): string; ``` ### Параметри - `translations`: Об'єкт, де ключі — це коди локалей (наприклад, `en`, `fr`, `es-MX`), а значення — відповідні перекладені рядки. ### Повертає - Рядок, що представляє вміст мовою, яку віддає перевагу клієнт. --- ## Завантаження обробника запитів інтернаціоналізації Щоб забезпечити правильну роботу функціональності інтернаціоналізації, що надається `express-intlayer`, ви **повинні** завантажити middleware інтернаціоналізації на початку вашого Express-застосунку. Це активує функцію `t` і гарантує коректне визначення локалі та обробку перекладів. Розмістіть middleware `app.use(intlayer())` **перед будь-якими маршрутами** у вашому додатку, щоб усі маршрути використовували інтернаціоналізацію: ```typescript {7} fileName="src/index.ts" codeFormat="typescript" import express, { type Express } from "express"; import { intlayer } from "express-intlayer"; const app: Express = express(); // Завантажте обробник запитів інтернаціоналізації app.use(intlayer()); // Визначте маршрути після завантаження middleware app.get("/", (_req, res) => { res.send( t({ en: "Hello, World!", fr: "Bonjour le monde!", es: "¡Hola, Mundo!", }) ); }); ``` ```javascript {7} fileName="src/index.mjs" codeFormat="esm" import express from "express"; import { intlayer } from "express-intlayer"; const app = express(); // Завантажити обробник запитів інтернаціоналізації app.use(intlayer()); // Визначте маршрути після завантаження middleware app.get("/", (_req, res) => { res.send( t({ en: "Hello, World!", fr: "Bonjour le monde!", es: "¡Hola, Mundo!", }) ); }); ``` ```javascript {7} fileName="src/index.cjs" codeFormat="commonjs" const express = require("express"); const { intlayer } = require("express-intlayer"); const app = express(); // Завантажити обробник запитів інтернаціоналізації app.use(intlayer()); // Визначте маршрути після завантаження middleware app.get("/", (_req, res) => { res.send( t({ en: "Hello, World!", fr: "Bonjour le monde!", es: "¡Hola, Mundo!", }) ); }); ``` ### Чому це потрібно - **Виявлення локалі**: проміжне ПЗ `intlayer` обробляє вхідні запити, щоб визначити переважну локаль користувача на основі заголовків, cookies або інших налаштованих методів. - **Контекст перекладу**: встановлює необхідний контекст для функції `t`, щоб вона працювала правильно, гарантуючи повернення перекладів потрібною мовою. - **Запобігання помилкам**: без цього middleware використання функції `t` призведе до помилок виконання, оскільки необхідна інформація про локаль не буде доступна. --- ## Приклади використання ### Базовий приклад Подача локалізованого контенту різними мовами: ```typescript fileName="src/index.ts" codeFormat="typescript" app.get("/", (_req, res) => { res.send( t({ uk: "Ласкаво просимо!", en: "Welcome!", fr: "Bienvenue!", es: "¡Bienvenido!", }) ); }); ``` ```javascript fileName="src/index.mjs" codeFormat="esm" app.get("/", (_req, res) => { res.send( t({ uk: "Ласкаво просимо!", en: "Welcome!", fr: "Bienvenue!", es: "¡Bienvenido!", }) ); }); ``` ```javascript fileName="src/index.cjs" codeFormat="commonjs" app.get("/", (_req, res) => { res.send( t({ uk: "Ласкаво просимо!", en: "Welcome!", fr: "Bienvenue!", es: "¡Bienvenido!", }) ); }); ``` **Запити клієнтів:** - Клієнт з `Accept-Language: fr` отримає `Bienvenue!`. - Клієнт з `Accept-Language: es` отримає `¡Bienvenido!`. - Клієнт з `Accept-Language: de` отримає `Welcome!` (локаль за замовчуванням). ### Обробка помилок Надайте повідомлення про помилки кількома мовами: ```typescript fileName="src/index.ts" codeFormat="typescript" app.get("/error", (_req, res) => { res.status(500).send( t({ uk: "Сталася непередбачена помилка.", en: "An unexpected error occurred.", fr: "Une erreur inattendue s'est produite.", es: "Ocurrió un error inesperado.", }) ); }); ``` ```javascript fileName="src/index.mjs" codeFormat="esm" app.get("/error", (_req, res) => { res.status(500).send( t({ uk: "Сталася непередбачена помилка.", en: "An unexpected error occurred.", fr: "Une erreur inattendue s'est produite.", es: "Ocurrió un error inesperado.", }) ); }); ``` ```javascript fileName="src/index.cjs" codeFormat="commonjs" app.get("/error", (_req, res) => { res.status(500).send( t({ uk: "Сталася непередбачена помилка.", en: "An unexpected error occurred.", fr: "Une erreur inattendue s'est produite.", es: "Ocurrió un error inesperado.", }) ); }); ``` --- ### Використання варіантів локалі Specify translations for locale-specific variants: ```typescript fileName="src/index.ts" codeFormat="typescript" app.get("/greet", (_req, res) => { res.send( t({ en: "Hello!", "en-GB": "Hello, mate!", fr: "Bonjour!", "es-MX": "¡Hola, amigo!", "es-ES": "¡Hola!", }) ); }); ``` ```javascript fileName="src/index.cjs" codeFormat="commonjs" app.get("/greet", (_req, res) => { res.send( t({ en: "Hello!", "en-GB": "Hello, mate!", fr: "Bonjour!", "es-MX": "¡Hola, amigo!", "es-ES": "¡Hola!", }) ); }); ``` ```javascript fileName="src/index.mjs" codeFormat="esm" app.get("/greet", (_req, res) => { res.send( t({ en: "Hello!", "en-GB": "Hello, mate!", fr: "Bonjour!", "es-MX": "¡Hola, amigo!", "es-ES": "¡Hola!", }) ); }); ``` --- ## Додаткові теми ### Механізм fallback Якщо бажана локаль недоступна, функція `t` підставить значення з локалі за замовчуванням, визначеної в конфігурації (`defaultLocale`): ```typescript {5-6} fileName="intlayer.config.ts" codeFormat="typescript" import { Locales, type IntlayerConfig } from "intlayer"; const config = { internationalization: { locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], defaultLocale: Locales.ENGLISH, }, } satisfies IntlayerConfig; export default config; ``` ```javascript {5-6} fileName="intlayer.config.mjs" codeFormat="esm" import { Locales } from "intlayer"; /** @type {import('intlayer').IntlayerConfig} */ const config = { internationalization: { locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], defaultLocale: Locales.ENGLISH, }, }; export default config; ``` ```javascript {5-6} fileName="intlayer.config.cjs" codeFormat="commonjs" const { Locales } = require("intlayer"); /** @type {import('intlayer').IntlayerConfig} */ const config = { internationalization: { locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], defaultLocale: Locales.ENGLISH, }, }; module.exports = config; ``` Наприклад: - Якщо `defaultLocale` встановлено в `Locales.CHINESE`, а клієнт запитує `Locales.DUTCH`, повернутий переклад за замовчуванням буде значенням `Locales.CHINESE`. - Якщо `defaultLocale` не визначено, функція `t` використає значення `Locales.ENGLISH`. --- ### Примусове застосування режиму `strict` Налаштуйте функцію `t` для забезпечення суворої відповідності задекларованим локалям: | Режим | Поведінка | | ----------- | ------------------------------------------------------------------------------------------------------- | | `strict` | Усі задекларовані локалі повинні мати переклади. Відсутні локалі призведуть до помилок. | | `inclusive` | Задекларовані локалі повинні мати переклади. Відсутні локалі спричиняють попередження, але приймаються. | | `loose` | Будь-яка наявна локаль приймається, навіть якщо не задекларована. | Приклад конфігурації: ```typescript {7} fileName="intlayer.config.ts" codeFormat="typescript" import { type IntlayerConfig } from "intlayer"; const config = { // ... Ваша існуюча конфігурація internationalization: { // ... Ваші існуючі налаштування інтернаціоналізації strictMode: "strict", // Застосовує строгий режим }, } satisfies IntlayerConfig; export default config; ``` ```javascript {7} fileName="intlayer.config.mjs" codeFormat="esm" import { type IntlayerConfig } from "intlayer"; const config = { // ... Ваша існуюча конфігурація internationalization: { // ... Ваші існуючі налаштування інтернаціоналізації strictMode: "strict", // Застосовує строгий режим }, }; export default config; ``` ```javascript {7} fileName="intlayer.config.cjs" codeFormat="commonjs" /** @type {import('intlayer').IntlayerConfig} */ const config = { // ... Ваша існуюча конфігурація internationalization: { // ... Ваша існуюча конфігурація інтернаціоналізації strictMode: "strict", // Увімкнути строгий режим }, }; module.exports = config; ``` --- ### Інтеграція з TypeScript Функція `t` є типобезпечною при використанні з TypeScript. Визначте типобезпечний об'єкт перекладів: ```typescript fileName="src/index.ts" codeFormat="typescript" import { type LanguageContent } from "express-intlayer"; const translations: LanguageContent = { en: "Good morning!", fr: "Bonjour!", es: "¡Buenos días!", }; app.get("/morning", (_req, res) => { res.send(t(translations)); }); ``` ```javascript fileName="src/index.mjs" codeFormat="esm" import { type LanguageContent } from "express-intlayer"; /** @type {import('express-intlayer').LanguageContent} */ const translations = { uk: "Доброго ранку!", en: "Good morning!", fr: "Bonjour!", es: "¡Buenos días!", }; app.get("/morning", (_req, res) => { res.send(t(translations)); }); ``` ```javascript fileName="src/index.cjs" codeFormat="commonjs" const { type LanguageContent } = require("express-intlayer"); /** @type {import('express-intlayer').LanguageContent} */ const translations = { uk: "Доброго ранку!", en: "Good morning!", fr: "Bonjour!", es: "¡Buenos días!", }; app.get("/morning", (_req, res) => { res.send(t(translations)); }); ``` --- ### Загальні помилки та усунення неполадок | Проблема | Причина | Рішення | | ---------------------------- | ---------------------------------------- | ---------------------------------------------------------------- | | `t` функція не працює | Middleware не підключено | Переконайтеся, що `app.use(intlayer())` додано перед маршрутами. | | Помилка відсутніх перекладів | Увімкнено строгий режим без усіх локалей | Надайте всі необхідні переклади. | --- ## Поради для ефективного використання 1. **Централізуйте переклади**: Використовуйте централізований модуль або JSON-файли для керування перекладами, щоб покращити підтримуваність. 2. **Перевіряйте переклади**: Переконайтеся, що кожен мовний варіант має відповідний переклад, щоб уникнути непотрібного fallback. 3. **Поєднуйте з фронтенд i18n**: Синхронізуйте з фронтендовою інтернаціоналізацією для безперервного користувацького досвіду в додатку. 4. **Вимірюйте продуктивність**: Перевірте час відгуку вашого додатку при додаванні перекладів, щоб забезпечити мінімальний вплив. --- ## Висновок Функція `t` — потужний інструмент для інтернаціоналізації бекенду. Правильно використовуючи її, ви можете створити більш інклюзивний та зручний додаток для глобальної аудиторії. Для просунутого використання та детальних опцій конфігурації див. [документацію](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/configuration.md).