Автор:
    Создание:2025-05-20Последнее обновление:2025-08-13

    Автоматическая генерация переводов в CI/CD конвейере

    Intlayer позволяет автоматически генерировать переводы для ваших файлов декларации контента. Существует несколько способов достичь этого в зависимости от вашего рабочего процесса.

    Содержание

    Использование CMS

    С Intlayer вы можете использовать рабочий процесс, при котором локально объявляется только одна локаль, а все переводы управляются удаленно через CMS. Это позволяет полностью отделить контент и переводы от кодовой базы, обеспечивая большую гибкость для редакторов контента и позволяя горячую перезагрузку контента (нет необходимости пересобирать приложение для применения изменений).

    Пример конфигурации

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [Locales.ENGLISH, Locales.SPANISH, Locales.FRENCH],
        requiredLocales: [Locales.ENGLISH], // Необязательные локали будут управляться удаленно
        defaultLocale: Locales.ENGLISH,
      },
      editor: {
        dictionaryPriorityStrategy: "distant_first", // Удалённый контент имеет приоритет
    
        applicationURL: process.env.APPLICATION_URL, // URL приложения, используемый CMS
    
        clientId: process.env.INTLAYER_CLIENT_ID, // Учетные данные CMS
        clientSecret: process.env.INTLAYER_CLIENT_SECRET,
      },
      ai: {
        applicationContext: "This is a test application", // Помогает обеспечить согласованное создание переводов
      },
    };
    
    export default config;
    

    Чтобы узнать больше о CMS, обратитесь к официальной документации.

    Использование Husky

    Вы можете интегрировать генерацию переводов в ваш локальный Git-рабочий процесс с помощью Husky.

    Пример конфигурации

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [Locales.ENGLISH, Locales.SPANISH, Locales.FRENCH],
        requiredLocales: [Locales.ENGLISH], // Необязательные локали обрабатываются удалённо
        defaultLocale: Locales.ENGLISH,
      },
      editor: {
        clientId: process.env.INTLAYER_CLIENT_ID,
        clientSecret: process.env.INTLAYER_CLIENT_SECRET,
      },
      ai: {
        provider: "openai",
        apiKey: process.env.OPENAI_API_KEY, // Используйте свой собственный API-ключ
    
        applicationContext: "This is a test application", // Помогает обеспечить согласованное создание переводов
      },
    };
    
    export default config;
    
    .husky/pre-push
    npx intlayer build                          # Чтобы словари были актуальными
    npx intlayer fill --unpushed --mode fill    # Заполняет только отсутствующий контент, не обновляет существующий
    
    Для получения дополнительной информации о командах Intlayer CLI и их использовании обратитесь к документации CLI.
    Если у вас несколько приложений в репозитории, использующих отдельные экземпляры intlayer, вы можете использовать аргумент --base-dir следующим образом:
    .husky/pre-push
    # Приложение 1
    npx intlayer build --base-dir ./app1
    npx intlayer fill --base-dir ./app1 --unpushed --mode fill
    
    # Приложение 2
    npx intlayer build --base-dir ./app2
    npx intlayer fill --base-dir ./app2 --unpushed --mode fill
    

    Использование GitHub Actions

    Intlayer предоставляет команду CLI для автоматического заполнения и проверки содержимого словаря. Это можно интегрировать в ваш CI/CD процесс с использованием GitHub Actions.

    .github/workflows/intlayer-translate.yml
    name: Intlayer Автозаполнение
    # Условия запуска этого workflow
    on:
      pull_request:
        branches:
          - "main"
    
    permissions:
      contents: write
      pull-requests: write
    
    concurrency:
      group: "autofill-${{ github.ref }}"
      cancel-in-progress: true
    
    jobs:
      autofill:
        runs-on: ubuntu-latest
        env:
          # OpenAI
          AI_MODEL: openai
          AI_PROVIDER: gpt-5-mini
          AI_API_KEY: ${{ secrets.AI_API_KEY }}
    
        steps:
          # Шаг 1: Получить последний код из репозитория
          - name: ⬇️ Проверка репозитория
            uses: actions/checkout@v4
            with:
              persist-credentials: true # Сохранять учетные данные для создания PR
              fetch-depth: 0 # Получить полную историю git для анализа изменений
    
          # Шаг 2: Настроить окружение Node.js
          - name: 🟢 Настроить Node.js
            uses: actions/setup-node@v4
            with:
              node-version: 20 # Использовать Node.js 20 LTS для стабильности
    
          # Шаг 3: Установить зависимости проекта
          - name: 📦 Установить зависимости
            run: npm install
    
          # Шаг 4: Глобально установить Intlayer CLI для управления переводами
          - name: 📦 Установить Intlayer
            run: npm install -g intlayer-cli
    
          # Шаг 5: Собрать проект Intlayer для генерации файлов перевода
          - name: ⚙️ Собрать проект Intlayer
            run: npx intlayer build
    
          # Шаг 6: Использовать ИИ для автоматического заполнения отсутствующих переводов
          - name: 🤖 Автоматическое заполнение отсутствующих переводов
            run: npx intlayer fill --git-diff --mode fill --provider $AI_PROVIDER --model $AI_MODEL --api-key $AI_API_KEY
    
          # Шаг 7: Проверить наличие изменений и зафиксировать их
          - name: � Проверить изменения
            id: check-changes
            run: |
              if [ -n "$(git status --porcelain)" ]; then
                echo "has-changes=true" >> $GITHUB_OUTPUT
              else
                echo "has-changes=false" >> $GITHUB_OUTPUT
              fi
    
          # Шаг 8: Зафиксировать и отправить изменения, если они есть
          - name: 📤 Зафиксировать и отправить изменения
            if: steps.check-changes.outputs.has-changes == 'true'
            run: |
              git config --local user.email "action@github.com"
              git config --local user.name "GitHub Action"
              git add .
              git commit -m "chore: автоматическое заполнение отсутствующих переводов [skip ci]"
              git push origin HEAD:${{ github.head_ref }}
    

    Чтобы настроить переменные окружения, перейдите в GitHub → Settings → Secrets and variables → Actions и добавьте секрет .

    Аналогично Husky, в случае монорепозитория вы можете использовать аргумент --base-dir для последовательной обработки каждого приложения.
    По умолчанию аргумент --git-diff фильтрует словари, которые содержат изменения от базы (по умолчанию origin/main) до текущей ветки (по умолчанию: HEAD).
    Для получения дополнительной информации о командах Intlayer CLI и их использовании обратитесь к документации CLI.