Задайте питання та отримайте підсумок документа, вказавши цю сторінку та обраного вами постачальника штучного інтелекту
Історія версій
- "Зробити тест асинхронним і додати опцію build"v6.0.105.10.2025
- "Впровадження тестування"v6.0.020.09.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
Тестування вашого контенту
Цей посібник показує, як автоматично перевіряти повноту ваших словників, виявляти відсутні переклади до релізу та тестувати локалізований 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 правильний корінь застосунку.