ГлавнаяПесочницаВитринаПриложениеДокументБлог
    • Englishанглийский
      EN
    • русскийрусский
      RU
    • 日本語японский
      JA
    • françaisфранцузский
      FR
    • 한국어корейский
      KO
    • 中文китайский
      ZH
    • españolиспанский
      ES
    • Deutschнемецкий
      DE
    • العربيةарабский
      AR
    • italianoитальянский
      IT
    • British Englishбританский английский
      EN-GB
    • portuguêsпортугальский
      PT
    • हिन्दीхинди
      HI
    • Türkçeтурецкий
      TR
    • polskiпольский
      PL
    • Indonesiaиндонезийский
      ID
    • Tiếng Việtвьетнамский
      VI
    • українськаукраинский
      UK
    /
    Фильтровать документы по фреймворку
    Alt+←
    Почему Intlayer?
    Начать
    Концепция
    • Как работает Intlayer
    • Конфигурация
    • TestFillBuildWatchExtractLoginPushPullConfigurationListVersionEditorLiveDebugDoc ReviewDoc TranslateSDK
    • Визуальный редактор
    • CMS
    • Интеграция CI/CD
    • ПереводМножественное числоПеречислениеУсловиеПолВставкаФайлВложенностьMarkdownHTMLПолучение функции
    • Файл для каждой локали
    • Компилятор
    • Автозаполнение
    • Тестирование
    • Оптимизация пакета
    Окружающая среда
    • Next.js 14 и App Router
      Next.js 15
      Next.js без locale URL
      Next.js и Page Router
      Compiler
    • Tanstack Start Solid
    • Astro и React
      Astro и Svelte
      Astro и Vue
      Astro и Solid
      Astro и Preact
      Astro и Lit
      Astro и Vanilla JS
    • React Router v7
      React Router v7 (fs-routes)
      Compiler
    • Nuxt и Vue
    • Vite и Solid
    • SvelteKit
    • Vite и Preact
    • Vite и Vanilla JS
    • Vite и Lit
    • Angular 19 (Webpack)
      Analog
    • React CRA
    • React Native и Expo
    • Express.js
      NestJS
      Fastify
      Hono
      Adonis
    • Lynx и React
    Plugins
    • JSON
    • gettext (.po)
    Расширение VS Code
    Агент
    • Сервер MCP
    • Навики агента
    Релизы
    • v8
    • v7
    • v6
    Бенчмарк
    • Next.js
    • TanStack
    • Vue
    • Solid
    • Svelte
    Блог
    Задать вопрос
    1. Documentation
    2. Plugin
    3. Sync json
    Создание:2025-03-13Последнее обновление:2025-12-13
    Посмотреть видео урок

    Для этой страницы доступен видео урок.

    Ссылайтесь на этот документ на ваш любимый ассистент AI
    ChatGPT
    Claude
    DeepSeek
    Google AI mode
    Gemini
    Perplexity
    Mistral
    Grok

    Спросите свой вопрос и получите сводку документа, используя эту страницу и выбранного вами поставщика AI

    История версий

    1. "Добавлена поддержка форматов ICU и i18next"
      v7.5.013.12.2025
    2. "Начальная документация плагина синхронизации JSON"
      v6.1.605.10.2025

    Содержимое этой страницы было переведено с помощью ИИ.

    Смотреть последнюю версию оригинального контента на английском
    Изменить эту документацию

    Если у вас есть идея по улучшению этой документации, не стесняйтесь внести свой вклад, подав запрос на вытягивание на GitHub.

    Ссылка на документацию GitHub
    Копировать

    Копировать Markdown документа в буфер обмена

    Синхронизация JSON (мосты i18n) - Синхронизация JSON с поддержкой ICU / i18next

    www.youtube.com

    Используйте Intlayer в качестве дополнения к вашему существующему стеку i18n. Этот плагин поддерживает синхронизацию ваших JSON-сообщений со словарями Intlayer, чтобы вы могли:

    • Сохранять использование i18next, next-intl, react-intl, vue-i18n, next-translate, nuxt-i18n, Solid-i18next, svelte-i18n и других.
    • Управлять и переводить ваши сообщения с помощью Intlayer (CLI, CI, провайдеры, CMS), без необходимости рефакторинга вашего приложения.
    • Публиковать обучающие материалы и SEO-контент, ориентированный на каждую экосистему, предлагая Intlayer в качестве слоя управления JSON.

    Примечания и текущий охват:

    • Внешняя интеграция с CMS работает для переводов и классического текста.
    • Пока нет поддержки вставок, множественного числа/ICU или продвинутых функций времени выполнения других библиотек.
    • Визуальный редактор пока не поддерживается для вывода сторонних i18n.

    Когда использовать этот плагин

    • Вы уже используете библиотеку i18n и храните сообщения в JSON-файлах.
    • Вы хотите использовать заполнение с помощью ИИ, тестирование в CI и управление контентом без изменения вашего runtime для рендеринга.

    Установка

    bash
    Копировать код

    Копировать код в буфер обмена

    pnpm add -D @intlayer/sync-json-plugin# илиnpm i -D @intlayer/sync-json-plugin

    Быстрый старт

    Добавьте плагин в ваш intlayer.config.ts и укажите путь к вашей существующей структуре JSON.

    intlayer.config.ts
    Копировать код

    Копировать код в буфер обмена

    import { Locales, type IntlayerConfig } from "intlayer";import { syncJSON } from "@intlayer/sync-json-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],    defaultLocale: Locales.ENGLISH,  },  // Синхронизируйте ваши текущие JSON-файлы со словарями Intlayer  plugins: [    syncJSON({      // Макет по локалям и пространствам имён (например, next-intl, i18next с пространствами имён)      source: ({ key, locale }) => `./locales/${locale}/${key}.json`,    }),  ],};export default config;

    Альтернатива: один файл на локаль (распространено в настройках i18next/react-intl):

    intlayer.config.ts
    Копировать код

    Копировать код в буфер обмена

    plugins: [  syncJSON({    source: ({ locale }) => `./locales/${locale}.json`,  }),];

    Как это работает

    • Чтение: плагин обнаруживает JSON-файлы с помощью вашего билдера source и загружает их как словари Intlayer.
    • Запись: после сборок и заполнения он записывает локализованные JSON обратно по тем же путям (с завершающим переводом строки, чтобы избежать проблем с форматированием).
    • Автозаполнение: плагин объявляет путь autoFill для каждого словаря. Запуск intlayer fill по умолчанию обновляет только отсутствующие переводы в ваших JSON-файлах.

    API:

    ts
    Копировать код

    Копировать код в буфер обмена

    syncJSON({  source: ({ key, locale }) => string, // обязательно  location?: string, // необязательная метка, по умолчанию: "plugin"  priority?: number, // необязательный приоритет для разрешения конфликтов, по умолчанию: 0  format?: 'intlayer' | 'icu' | 'i18next', // необязательный форматтер, используется для совместимости с runtime Intlayer});

    format ('intlayer' | 'icu' | 'i18next')

    Указывает форматтер, который будет использоваться для содержимого словаря при синхронизации JSON-файлов. Это позволяет использовать различные синтаксисы форматирования сообщений, совместимые с runtime Intlayer.

    • undefined: Форматтер не будет использоваться, содержимое JSON будет использоваться как есть.
    • 'intlayer': Форматтер Intlayer по умолчанию (по умолчанию).
    • 'icu': Использует форматирование сообщений ICU (совместимо с библиотеками, такими как react-intl, vue-i18n).
    • 'i18next': Использует форматирование сообщений i18next (совместимо с i18next, next-i18next, Solid-i18next).

    Обратите внимание, что использование форматтера преобразует ваше содержимое JSON на входе и выходе. Для сложных правил JSON, таких как множественные числа ICU, парсинг может не гарантировать соответствие 1 к 1 между входом и выходом. Если вы не используете runtime Intlayer, возможно, лучше не устанавливать форматтер.

    Пример:

    ts
    Копировать код

    Копировать код в буфер обмена

    syncJSON({  source: ({ key, locale }) => `./locales/${locale}/${key}.json`,  format: "i18next", // Использовать форматирование i18next для совместимости}),

    Несколько источников JSON и приоритет

    Вы можете добавить несколько плагинов syncJSON для синхронизации разных источников JSON. Это полезно, если в вашем проекте используются несколько библиотек i18n или разные структуры JSON.

    Система приоритетов

    Когда несколько плагинов нацелены на один и тот же ключ словаря, параметр priority определяет, какой плагин имеет преимущество:

    • Побеждает плагин с более высоким числом приоритета
    • Приоритет по умолчанию для файлов .content равен 0
    • Приоритет по умолчанию для файлов плагинов равен -1
    • Плагины с одинаковым приоритетом обрабатываются в порядке их появления в конфигурации
    intlayer.config.ts
    Копировать код

    Копировать код в буфер обмена

    import { Locales, type IntlayerConfig } from "intlayer";import { syncJSON } from "@intlayer/sync-json-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH],    defaultLocale: Locales.ENGLISH,  },  plugins: [    // Основной источник JSON (наивысший приоритет)    syncJSON({      format: "i18next",      source: ({ key, locale }) => `./locales/${locale}/${key}.json`,      location: "main-translations",      priority: 10,    }),    // Резервный источник JSON (низший приоритет)    syncJSON({      format: "i18next",      source: ({ locale }) => `./fallback-locales/${locale}.json`,      location: "fallback-translations",      priority: 5,    }),    // Источник устаревших JSON (самый низкий приоритет)    syncJSON({      format: "i18next",      source: ({ locale }) => `/my/other/app/legacy/${locale}/messages.json`,      location: "legacy-translations",      priority: 1,    }),  ],};export default config;

    Разрешение конфликтов

    Когда один и тот же ключ перевода присутствует в нескольких JSON-источниках:

    1. Плагин с наивысшим приоритетом определяет итоговое значение
    2. Источники с более низким приоритетом используются как резервные для отсутствующих ключей
    3. Это позволяет поддерживать устаревшие переводы, постепенно переходя на новые структуры

    Интеграции

    Ниже приведены распространённые сопоставления. Не изменяйте ваше окружение выполнения; просто добавьте плагин.

    i18next

    Типичная структура файлов: ./public/locales/{locale}/{namespace}.json или ./locales/{locale}/{namespace}.json.

    intlayer.config.ts
    Копировать код

    Копировать код в буфер обмена

    import { syncJSON } from "@intlayer/sync-json-plugin";export default {  plugins: [    syncJSON({      format: "i18next",      source: ({ key, locale }) => `./locales/${locale}/${key}.json`,    }),  ],};

    next-intl

    JSON-сообщения для каждого локаля (часто ./messages/{locale}.json) или по namespace.

    intlayer.config.ts
    Копировать код

    Копировать код в буфер обмена

    plugins: [  syncJSON({    source: ({ locale, key }) => `./messages/${locale}/${key}.json`,  }),];

    См. также: docs/ru/intlayer_with_next-intl.md.

    react-intl

    Обычно используется один JSON на локаль:

    intlayer.config.ts
    Копировать код

    Копировать код в буфер обмена

    plugins: [  syncJSON({    source: ({ locale }) => `./locales/${locale}.json`,  }),];

    vue-i18n

    Либо один файл на локаль, либо по пространствам имён:

    intlayer.config.ts
    Копировать код

    Копировать код в буфер обмена

    plugins: [  syncJSON({    source: ({ key, locale }) => `./src/locales/${locale}/${key}.json`, // источник файлов локализации  }),];

    CLI

    Синхронизированные JSON-файлы будут рассматриваться как другие файлы с расширением .content. Это означает, что все команды intlayer будут доступны для синхронизированных JSON-файлов, включая:

    • intlayer content test для проверки отсутствующих переводов
    • intlayer content list для вывода списка синхронизированных JSON-файлов
    • intlayer content fill для заполнения отсутствующих переводов
    • intlayer content push для отправки синхронизированных JSON-файлов
    • intlayer content pull для загрузки синхронизированных JSON-файлов

    См. Intlayer CLI для получения дополнительной информации.

    Ограничения (текущие)

    • Нет поддержки вставок или множественного числа/ICU при работе с библиотеками третьих сторон.
    • Визуальный редактор пока недоступен для сред выполнения, не являющихся Intlayer.
    • Синхронизация только JSON; форматы каталогов, не являющиеся JSON, не поддерживаются.

    Почему это важно

    • Мы можем рекомендовать проверенные решения i18n и позиционировать Intlayer как дополнение.
    • Мы используем их SEO/ключевые слова с помощью руководств, которые заканчиваются предложением использовать Intlayer для управления JSON.
    • Расширяет целевую аудиторию с «новых проектов» до «любых команд, уже использующих i18n».
    Lynx и React
    gettext (.po)
    Alt+→

    На этой странице

      Обсуждения анонимны и регулярно просматриваются для решения распространённых проблем. Не стесняйтесь делиться идеями функций, отзывами о документации или чем-либо, связанным с Intlayer, мы используем эту информацию для формирования нашей дорожной карты и улучшения продукта.

      pnpm add -D @intlayer/sync-json-plugin# илиnpm i -D @intlayer/sync-json-plugin
      import { Locales, type IntlayerConfig } from "intlayer";import { syncJSON } from "@intlayer/sync-json-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],    defaultLocale: Locales.ENGLISH,  },  // Синхронизируйте ваши текущие JSON-файлы со словарями Intlayer  plugins: [    syncJSON({      // Макет по локалям и пространствам имён (например, next-intl, i18next с пространствами имён)      source: ({ key, locale }) => `./locales/${locale}/${key}.json`,    }),  ],};export default config;
      plugins: [  syncJSON({    source: ({ locale }) => `./locales/${locale}.json`,  }),];
      syncJSON({  source: ({ key, locale }) => string, // обязательно  location?: string, // необязательная метка, по умолчанию: "plugin"  priority?: number, // необязательный приоритет для разрешения конфликтов, по умолчанию: 0  format?: 'intlayer' | 'icu' | 'i18next', // необязательный форматтер, используется для совместимости с runtime Intlayer});
      syncJSON({  source: ({ key, locale }) => `./locales/${locale}/${key}.json`,  format: "i18next", // Использовать форматирование i18next для совместимости}),
      import { Locales, type IntlayerConfig } from "intlayer";import { syncJSON } from "@intlayer/sync-json-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH],    defaultLocale: Locales.ENGLISH,  },  plugins: [    // Основной источник JSON (наивысший приоритет)    syncJSON({      format: "i18next",      source: ({ key, locale }) => `./locales/${locale}/${key}.json`,      location: "main-translations",      priority: 10,    }),    // Резервный источник JSON (низший приоритет)    syncJSON({      format: "i18next",      source: ({ locale }) => `./fallback-locales/${locale}.json`,      location: "fallback-translations",      priority: 5,    }),    // Источник устаревших JSON (самый низкий приоритет)    syncJSON({      format: "i18next",      source: ({ locale }) => `/my/other/app/legacy/${locale}/messages.json`,      location: "legacy-translations",      priority: 1,    }),  ],};export default config;
      import { syncJSON } from "@intlayer/sync-json-plugin";export default {  plugins: [    syncJSON({      format: "i18next",      source: ({ key, locale }) => `./locales/${locale}/${key}.json`,    }),  ],};
      plugins: [  syncJSON({    source: ({ locale, key }) => `./messages/${locale}/${key}.json`,  }),];
      plugins: [  syncJSON({    source: ({ locale }) => `./locales/${locale}.json`,  }),];
      plugins: [  syncJSON({    source: ({ key, locale }) => `./src/locales/${locale}/${key}.json`, // источник файлов локализации  }),];