ГлавнаяПесочницаВитринаПриложениеДокументБлог
    • 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. Окружающая среда
    3. Lynx and react
    Создание:2025-03-09Последнее обновление:2026-05-06
    Посмотреть шаблон приложения на GitHub

    Для этой страницы доступен шаблон приложения.

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

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

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

    1. "Обновление использования API useIntlayer в Solid для прямого доступа к свойствам"
      v8.9.004.05.2026
    2. "Добавить команду init"
      v7.5.930.12.2025
    3. "Инициализация истории"
      v5.5.1029.06.2025

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

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

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

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

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

    Переведите ваш Lynx and React mobile app с Intlayer | Интернационализация (i18n)

    Смотрите шаблон приложения на GitHub.

    Что такое Intlayer?

    Intlayer - это инновационная, открытая библиотека интернационализации (i18n), которая упрощает поддержку нескольких языков в современных приложениях. Она работает во многих средах JavaScript/TypeScript, включая Lynx (через пакет react-intlayer).

    С помощью Intlayer вы можете:

    • Легко управлять переводами, используя декларативные словари на уровне компонентов.
    • Обеспечить поддержку TypeScript с помощью автоматически генерируемых типов.
    • Динамически локализовать контент, включая строки пользовательского интерфейса (а в React для веба также можно локализовать HTML-метаданные и т.д.).
    • Использовать расширенные функции, такие как динамическое определение и переключение локали.

    Шаг 1: Установите зависимости

    Из вашего проекта Lynx установите следующие пакеты:

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

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

    npm install intlayer react-intlayer lynx-intlayernpx intlayer init

    Пакеты

    • intlayer
      Основной набор инструментов i18n для конфигурации, содержания словарей, генерации типов и CLI-команд.

    • react-intlayer
      Интеграция с React, предоставляющая провайдеры контекста и React-хуки, которые вы будете использовать в Lynx для получения и переключения локалей.

    • lynx-intlayer
      Интеграция с Lynx, предоставляющая плагин для интеграции Intlayer с бандлером Lynx.


    Шаг 2: Создайте конфигурацию Intlayer

    В корне вашего проекта (или в любом удобном месте) создайте файл конфигурации Intlayer. Он может выглядеть так:

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

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

    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [
          Locales.ENGLISH,
          Locales.FRENCH,
          Locales.SPANISH,
          // ... Добавьте любые другие локали, которые вам нужны
        ],
        defaultLocale: Locales.ENGLISH,
      },
    };
    
    export default config;

    В этой конфигурации вы можете:

    • Настроить список поддерживаемых локалей.
    • Установить локаль по умолчанию.
    • Позже вы можете добавить более сложные опции (например, логи, пользовательские директории контента и т.д.).
    • См. документацию по конфигурации Intlayer для получения дополнительной информации.

    Шаг 3: Добавьте плагин Intlayer в бандлер Lynx

    Чтобы использовать Intlayer с Lynx, вам нужно добавить плагин в файл lynx.config.ts:

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

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

    import { defineConfig } from "@lynx-js/rspeedy";import { pluginIntlayerLynx } from "lynx-intlayer/plugin";export default defineConfig({  plugins: [    // ... другие плагины    pluginIntlayerLynx(),  ],});

    Шаг 4: Добавьте провайдер Intlayer

    Чтобы синхронизировать язык пользователя по всему приложению, вам нужно обернуть ваш корневой компонент в компонент IntlayerProvider из react-intlayer.

    Также вам нужно добавить файл функции intlayerPolyfill, чтобы Intlayer работал корректно.

    src/index.tsx
    Копировать код

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

    import { root } from "@lynx-js/react";import { App } from "./App.js";import { IntlayerProvider } from "react-intlayer";import { intlayerPolyfill } from "lynx-intlayer";intlayerPolyfill();root.render(  <IntlayerProvider>    <App />  </IntlayerProvider>);if (import.meta.webpackHot) {  import.meta.webpackHot.accept();}

    Шаг 5: Объявите ваш контент

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

    • .content.json
    • .content.ts
    • .content.tsx
    • .content.js
    • .content.jsx
    • .content.mjs
    • .content.mjx
    • .content.cjs
    • .content.cjx
    • и т.д.

    Пример:

    src/app.content.ts
    Копировать код

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

    import { t, type Dictionary } from "intlayer";
    
    const appContent = {
      key: "app",
      content: {
        title: "React",
        subtitle: t({
          ru: "на Lynx",
          en: "on Lynx",
          ru: "на Lynx",
          en: "on Lynx",
          fr: "sur Lynx",
          es: "en Lynx",
        }),
        description: t({
          ru: "Нажмите на логотип и повеселитесь!",
          en: "Tap the logo and have fun!",
          fr: "Appuyez sur le logo et amusez-vous!",
          es: "¡Toca el logo y diviértete!",
        }),
        hint: [
          t({
            ru: "Редактировать",
            en: "Edit",
            fr: "Modifier",
            es: "Editar",
          }),
          " src/App.tsx ",
          t({
            ru: "чтобы увидеть обновления!",
            en: "to see updates!",
            fr: "pour voir les mises à jour!",
            es: "para ver actualizaciones!",
          }),
        ],
      },
    } satisfies Dictionary;
    
    export default appContent;
    Для получения подробной информации о декларациях контента, см. документацию по контенту Intlayer.

    Шаг 4: Используйте Intlayer в ваших компонентах

    Используйте хук useIntlayer в дочерних компонентах для получения локализованного контента.

    src/App.tsx
    Копировать код

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

    import { useCallback, useState } from "@lynx-js/react";import { useIntlayer } from "react-intlayer";import "./App.css";import arrow from "./assets/arrow.png";import lynxLogo from "./assets/lynx-logo.png";import reactLynxLogo from "./assets/react-logo.png";import { LocaleSwitcher } from "./components/LocaleSwitcher.jsx";export const App = () => {  const [alterLogo, setAlterLogo] = useState(false);  const { title, subtitle, description, hint } = useIntlayer("app");  const onTap = useCallback(() => {    // только фон    setAlterLogo(!alterLogo);  }, [alterLogo]);  return (    <view>      <view className="Background" />      <view className="App">        <view className="Banner">          <view className="Logo" bindtap={onTap}>            {alterLogo ? (              <image src={reactLynxLogo} className="Logo--react" />            ) : (              <image src={lynxLogo} className="Logo--lynx" />            )}          </view>          <text className="Title">{title}</text>          <text className="Subtitle">{subtitle}</text>        </view>        <view className="Content">          <image src={arrow} className="Arrow" />          <text className="Description">{description}</text>          <text className="Hint">            {hint[0]}            <text style={{ fontStyle: "italic" }}>{hint[1]}</text>            {hint[2]}          </text>        </view>        <LocaleSwitcher />        <view style={{ flex: 1 }}></view>      </view>    </view>  );};
    При использовании content.someKey в строковых свойствах (например, title кнопки или children компонента Text), вызывайте content.someKey.value, чтобы получить строку.

    (Опционально) Шаг 5: Измените локаль приложения

    Для переключения локалей из ваших компонентов вы можете использовать метод setLocale из хука useLocale:

    src/components/LocaleSwitcher.tsx
    Копировать код

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

    import { type FC } from "react";import { getLocaleName } from "intlayer";import { useLocale } from "react-intlayer";export const LocaleSwitcher: FC = () => {  const { setLocale, availableLocales, locale } = useLocale();  return (    <view      style={{        display: "flex",        flexDirection: "row",        justifyContent: "center",        alignItems: "center",        gap: 10,      }}    >      {availableLocales.map((localeEl) => (        <text          key={localeEl}          style={{            color: localeEl === locale ? "#fff" : "#888",            fontSize: "12px",          }}          bindtap={() => setLocale(localeEl)}        >          {getLocaleName(localeEl)}        </text>      ))}    </view>  );};

    Это вызывает повторный рендер всех компонентов, использующих контент Intlayer, теперь с переводами для новой локали.

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

    Настройка TypeScript (если вы используете TypeScript)

    Intlayer генерирует определения типов в скрытой папке (по умолчанию .intlayer) для улучшения автозаполнения и обнаружения ошибок перевода:

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

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

    // tsconfig.json{  // ... ваш существующий TS конфиг  "include": [    "src", // ваш исходный код    ".intlayer/types/**/*.ts", // <-- убедитесь, что автоматически сгенерированные типы включены    // ... все остальное, что вы уже включили  ],}

    Это позволяет использовать такие функции, как:

    • Автозаполнение для ключей вашего словаря.
    • Проверка типов, которая предупреждает, если вы обращаетесь к несуществующему ключу или несовместимому типу.

    Конфигурация Git

    Чтобы избежать коммита автоматически сгенерированных файлов Intlayer, добавьте следующее в ваш .gitignore:

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

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

    #  Игнорировать файлы, сгенерированные Intlayer.intlayer

    Расширение VS Code

    Для улучшения вашего опыта разработки с Intlayer вы можете установить официальное расширение Intlayer для VS Code.

    Установить из Marketplace VS Code

    Это расширение предоставляет:

    • Автозаполнение для ключей перевода.
    • Обнаружение ошибок в реальном времени для отсутствующих переводов.
    • Встроенный просмотр переведённого контента.
    • Быстрые действия для лёгкого создания и обновления переводов. Для получения дополнительной информации о том, как использовать расширение, обратитесь к документации по расширению Intlayer для VS Code.

    Узнайте больше

    • Визуальный редактор: Используйте визуальный редактор Intlayer для визуального управления переводами.
    • Интеграция с CMS: Вы также можете вынести и получить содержимое вашего словаря из CMS.
    • CLI команды: Изучите CLI Intlayer для выполнения задач, таких как извлечение переводов или проверка отсутствующих ключей.

    Adonis
    JSON
    Alt+→

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

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

      npm install intlayer react-intlayer lynx-intlayernpx intlayer init
      import { defineConfig } from "@lynx-js/rspeedy";import { pluginIntlayerLynx } from "lynx-intlayer/plugin";export default defineConfig({  plugins: [    // ... другие плагины    pluginIntlayerLynx(),  ],});
      import { root } from "@lynx-js/react";import { App } from "./App.js";import { IntlayerProvider } from "react-intlayer";import { intlayerPolyfill } from "lynx-intlayer";intlayerPolyfill();root.render(  <IntlayerProvider>    <App />  </IntlayerProvider>);if (import.meta.webpackHot) {  import.meta.webpackHot.accept();}
      import { useCallback, useState } from "@lynx-js/react";import { useIntlayer } from "react-intlayer";import "./App.css";import arrow from "./assets/arrow.png";import lynxLogo from "./assets/lynx-logo.png";import reactLynxLogo from "./assets/react-logo.png";import { LocaleSwitcher } from "./components/LocaleSwitcher.jsx";export const App = () => {  const [alterLogo, setAlterLogo] = useState(false);  const { title, subtitle, description, hint } = useIntlayer("app");  const onTap = useCallback(() => {    // только фон    setAlterLogo(!alterLogo);  }, [alterLogo]);  return (    <view>      <view className="Background" />      <view className="App">        <view className="Banner">          <view className="Logo" bindtap={onTap}>            {alterLogo ? (              <image src={reactLynxLogo} className="Logo--react" />            ) : (              <image src={lynxLogo} className="Logo--lynx" />            )}          </view>          <text className="Title">{title}</text>          <text className="Subtitle">{subtitle}</text>        </view>        <view className="Content">          <image src={arrow} className="Arrow" />          <text className="Description">{description}</text>          <text className="Hint">            {hint[0]}            <text style={{ fontStyle: "italic" }}>{hint[1]}</text>            {hint[2]}          </text>        </view>        <LocaleSwitcher />        <view style={{ flex: 1 }}></view>      </view>    </view>  );};
      import { type FC } from "react";import { getLocaleName } from "intlayer";import { useLocale } from "react-intlayer";export const LocaleSwitcher: FC = () => {  const { setLocale, availableLocales, locale } = useLocale();  return (    <view      style={{        display: "flex",        flexDirection: "row",        justifyContent: "center",        alignItems: "center",        gap: 10,      }}    >      {availableLocales.map((localeEl) => (        <text          key={localeEl}          style={{            color: localeEl === locale ? "#fff" : "#888",            fontSize: "12px",          }}          bindtap={() => setLocale(localeEl)}        >          {getLocaleName(localeEl)}        </text>      ))}    </view>  );};
      // tsconfig.json{  // ... ваш существующий TS конфиг  "include": [    "src", // ваш исходный код    ".intlayer/types/**/*.ts", // <-- убедитесь, что автоматически сгенерированные типы включены    // ... все остальное, что вы уже включили  ],}
      #  Игнорировать файлы, сгенерированные Intlayer.intlayer