Задайте питання та отримайте підсумок документа, вказавши цю сторінку та обраного вами постачальника штучного інтелекту
Історія версій
- "Зробити тест асинхронним і додати опцію build"v6.0.105.10.2025
- "Впровадження тестування"v6.0.020.09.2025
Вміст цієї сторінки перекладено за допомогою штучного інтелекту.
Переглянути останню версію оригінального вмісту англійськоюЯкщо у вас є ідея щодо покращення цієї документації, будь ласка, долучіться, надіславши pull request на GitHub.
Посилання на документацію на GitHubСкопіювати документацію у форматі Markdown в буфер обміну
Тестування вашого контенту
Цей посібник показує, як автоматично перевіряти повноту ваших словників, виявляти відсутні переклади до релізу та тестувати локалізований UI у вашому додатку.
Що ви можете перевірити
- Відсутні переклади: провалювати CI, якщо для будь-якого словника відсутні обов'язкові локалі.
- Локалізований рендер UI: відрендерити компоненти з провайдером конкретної локалі та перевірити видимий текст/атрибути.
- Перевірки під час збірки: швидко виконати аудит локально через CLI.
Швидкий старт: аудит через CLI
Запустіть аудит з кореня вашого проєкту:
Скопіюйте код у буфер обміну
npx intlayer content testКорисні прапорці:
--env-file [path]: завантажити змінні середовища з файлу.-e, --env [name]: вибрати профіль середовища.--base-dir [path]: встановити базову директорію додатку для вирішення шляхів.--verbose: показувати детальні логи.--prefix [label]: додавати префікс до рядків логу.--build [build]: збирати словники перед тестуванням, щоб переконатися, що вміст актуальний. True примусово виконає збірку, false пропустить збірку, undefined дозволить використовувати кеш збірки.
Примітка: CLI виводить детальний звіт, але не завершує виконання з ненульовим кодом при помилках. Для контролю в CI додайте модульний тест (нижче), який перевіряє, що кількість відсутніх обов'язкових локалей дорівнює нулю.
Програмний тест (Vitest/Jest)
Використайте API Intlayer CLI, щоб переконатися, що для обов'язкових локалей немає відсутніх перекладів.
Скопіюйте код у буфер обміну
/* @vitest-environment node */import { listMissingTranslations } from "intlayer/cli";import { describe, expect, it } from "vitest";describe("translations", () => { it("has no missing required locales", async () => { const result = await listMissingTranslations(); if (result.missingRequiredLocales.length > 0) { // Корисно, коли тест не проходить локально або в CI console.log(result.missingTranslations); } expect(result.missingRequiredLocales).toHaveLength(0); });});Jest еквівалент:
Скопіюйте код у буфер обміну
import { listMissingTranslations } from "intlayer/cli";test("has no missing required locales", async () => { const result = await listMissingTranslations(); if (result.missingRequiredLocales.length > 0) { // Корисно, коли тест не проходить локально або в CI console.log(result.missingTranslations); } expect(result.missingRequiredLocales).toHaveLength(0);});Як це працює:
- Intlayer читає вашу конфігурацію (locales, requiredLocales) та оголошені словники, а потім звітує:
missingTranslations: по‑ключу, які локалі відсутні та з якого файлу.missingLocales: об'єднання всіх відсутніх локалей.missingRequiredLocales: підмножина, обмеженаrequiredLocales(або всі локалі, якщоrequiredLocalesне встановлено).
Тестування локалізованого інтерфейсу (React / Next.js)
Рендерте компоненти під провайдером Intlayer та перевіряйте видимий вміст.
Приклад для React (Testing Library):
Скопіюйте код у буфер обміну
import { IntlayerProvider } from "react-intlayer/client";import { render, screen } from "@testing-library/react";import { MyComponent } from "./MyComponent";test("рендерить локалізований заголовок англійською", () => { render( <IntlayerProvider locale="en-US"> <MyComponent /> </IntlayerProvider> ); expect( screen.getByText("Очікуваний заголовок англійською") ).toBeInTheDocument();});Next.js (App Router) example: use the framework wrapper:
Скопіюйте код у буфер обміну
import { IntlayerClientProvider } from "next-intlayer/client";import { render, screen } from "@testing-library/react";import { MyPage } from "./MyPage";test("відображає локалізований заголовок французькою", () => { render( <IntlayerClientProvider locale="fr-FR"> <MyPage /> </IntlayerClientProvider> ); expect( screen.getByRole("heading", { name: "Titre attendu" }) ).toBeInTheDocument();});Поради:
- Коли потрібні сирі рядкові значення для атрибутів (наприклад,
aria-label), отримуйте поле.value, яке повертаєuseIntlayerв React. - Тримайте словники поруч з компонентами для спрощення юніт-тестування та очищення.
Неперервна інтеграція
Додайте тест, який завершуватиме збірку з помилкою, коли відсутні обов'язкові переклади.
package.json:
Скопіюйте код у буфер обміну
{ "scripts": { "test:i18n": "vitest run -c" }}Приклад GitHub Actions:
Скопіюйте код у буфер обміну
name: CIon: [push, pull_request]jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 - run: npm ci - run: npm run test:i18nНеобов'язково: запустіть аудит CLI, щоб отримати зрозумілий для людини підсумок разом із тестами:
Скопіюйте код у буфер обміну
npx intlayer content test --verboseУсунення неполадок
- Переконайтеся, що ваша конфігурація Intlayer визначає
localesі (за потреби)requiredLocales. - Якщо ваш застосунок використовує динамічні або віддалені словники, запускайте тести в середовищі, де ці словники доступні.
- Для змішаних монорепозиторіїв використовуйте
--base-dir, щоб вказати CLI правильний корінь застосунку.