Отримуйте сповіщення про майбутні випуски Intlayer
    Дата створення:2025-04-18Останнє оновлення:2025-12-30

    Перекладіть свій вебсайт на Vite і Preact за допомогою Intlayer | Інтернаціоналізація (i18n)

    Цей пакет знаходиться в розробці. Див. issue для детальнішої інформації. Підтримайте Intlayer для Preact, поставивши лайк цьому issue

    Зміст

    Що таке Intlayer?

    Intlayer — це інноваційна open-source бібліотека для інтернаціоналізації (i18n), створена для спрощення багатомовної підтримки в сучасних вебзастосунках.

    За допомогою Intlayer ви можете:

    • Легко керувати перекладами за допомогою декларативних словників на рівні компонентів.
    • Динамічно локалізувати метадані, маршрути та вміст.
    • Забезпечити підтримку TypeScript через автогенеровані типи, що покращують автодоповнення та виявлення помилок.
    • Отримайте переваги розширених можливостей, таких як динамічне визначення локалі та її перемикання.

    Покроковий посібник із налаштування Intlayer у застосунку на Vite і Preact

    Перегляньте шаблон застосунку на GitHub.

    Крок 1: Встановіть залежності

    Встановіть необхідні пакети за допомогою npm:

    bash
    npm install intlayer preact-intlayernpm install vite-intlayer --save-devnpx intlayer init
    • intlayer

      Основний пакет, що надає інструменти інтернаціоналізації для керування конфігурацією, перекладу, декларації контенту, транспіляції та CLI-команд.

    • preact-intlayer Пакет, який інтегрує Intlayer у Preact-застосунок. Надає провайдери контексту та хуки для інтернаціоналізації в Preact.

    • vite-intlayer Містить плагін для Vite для інтеграції Intlayer з Vite bundler, а також middleware для визначення пріоритетної локалі користувача, керування cookie та обробки перенаправлень URL.

    Крок 2: Налаштування вашого проєкту

    Створіть файл конфігурації для налаштування мов вашого застосунку:

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";const config: IntlayerConfig = {  internationalization: {    locales: [      Locales.ENGLISH,      Locales.FRENCH,      Locales.SPANISH,      // Ваші інші локалі    ],    defaultLocale: Locales.ENGLISH,  },  routing: {    mode: "prefix-no-default", // За замовчуванням: префіксувати всі локалі, крім локалі за замовчуванням    storage: ["cookie", "header"], // За замовчуванням: зберігати локаль у cookie та визначати з заголовка  },};export default config;
    Через цей файл конфігурації ви можете налаштувати локалізовані URL-адреси, режими маршрутизації, опції збереження, імена cookie, місце розташування та розширення файлів з описом контенту, відключити логи Intlayer у консолі та інше. Для повного переліку доступних параметрів див. документацію з конфігурації.

    Крок 3: Інтегруйте Intlayer у вашу конфігурацію Vite

    Додайте плагін intlayer у конфігурацію.

    vite.config.ts
    import { defineConfig } from "vite";import preact from "@preact/preset-vite";import { intlayer } from "vite-intlayer";// https://vitejs.dev/config/ — документація Viteexport default defineConfig({  plugins: [preact(), intlayer()],});
    Плагін Vite intlayer() використовується для інтеграції Intlayer з Vite. Він забезпечує побудову файлів декларацій контенту та відстежує їх у режимі розробки. Він визначає змінні середовища Intlayer у застосунку Vite. Додатково, він надає aliases для оптимізації продуктивності.

    Крок 4: Оголосіть свій контент

    Створіть і керуйте деклараціями контенту для зберігання перекладів:

    src/app.content.tsx
    import { t, type Dictionary } from "intlayer";import type { ComponentChildren } from "preact";const appContent = {  key: "app",  content: {    viteLogo: t({      uk: "Логотип Vite",      en: "Vite logo",      fr: "Logo Vite",      es: "Logo Vite",    }),    preactLogo: t({      uk: "Логотип Preact",      en: "Preact logo",      fr: "Logo Preact",      es: "Logo Preact",    }),    title: "Vite + Preact",    count: t({      uk: "лічильник: ",      en: "count is ",      fr: "le compte est ",      es: "el recuento es ",    }),    edit: t<ComponentChildren>({      uk: (        <>          Редагуйте <code>src/app.tsx</code> і збережіть, щоб перевірити HMR        </>      ),      en: (        <>          Edit <code>src/app.tsx</code> and save to test HMR        </>      ),      fr: (        <>          Éditez <code>src/app.tsx</code> et enregistrez pour tester HMR        </>      ),      es: (        <>          Edita <code>src/app.tsx</code> y guarda para probar HMR        </>      ),    }),    readTheDocs: t({      uk: "Натисніть на логотипи Vite і Preact, щоб дізнатися більше",      en: "Click on the Vite and Preact logos to learn more",      fr: "Cliquez sur les logos Vite et Preact pour en savoir plus",      uk: "Клацніть на логотипи Vite та Preact, щоб дізнатися більше",      es: "Haga clic en los logotipos de Vite y Preact para obtener más información",    }),  },} satisfies Dictionary;export default appContent;
    Ваші декларації контенту можна розміщувати в будь-якій частині вашого застосунку, за умови, що вони включені в директорію contentDir (за замовчуванням ./src). І вони повинні відповідати розширенню файлу декларації контенту (за замовчуванням .content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}).
    Для детальнішої інформації див. документацію з оголошень контенту.
    Якщо ваш файл контенту містить TSX-код, можливо, потрібно імпортувати import { h } from "preact"; або переконатися, що JSX pragma правильно налаштований для Preact.

    Крок 5: Використання Intlayer у вашому коді

    Отримуйте доступ до ваших словників контенту у всьому застосунку:

    src/app.tsx
    import { useState } from "preact/hooks";import type { FunctionalComponent } from "preact";import preactLogo from "./assets/preact.svg"; // Припускаємо, що у вас є preact.svgimport viteLogo from "/vite.svg";import "./app.css"; // Припускаємо, що ваш файл CSS називається app.cssimport { IntlayerProvider, useIntlayer } from "preact-intlayer";const AppContent: FunctionalComponent = () => {  const [count, setCount] = useState(0);  const content = useIntlayer("app");  return (    <>      <div>        <a href="https://vitejs.dev" target="_blank">          <img src={viteLogo} class="logo" alt={content.viteLogo.value} />        </a>        <a href="https://preactjs.com" target="_blank">          <img            src={preactLogo}            class="logo preact"            alt={content.preactLogo.value}          />        </a>      </div>      <h1>{content.title}</h1>      <div class="card">        <button onClick={() => setCount((count) => count + 1)}>          {content.count}          {count}        </button>        <p>{content.edit}</p>      </div>      <p class="read-the-docs">{content.readTheDocs}</p>    </>  );};const App: FunctionalComponent = () => (  <IntlayerProvider>    <AppContent />  </IntlayerProvider>);export default App;
    Якщо ви хочете використати ваш вміст у атрибуті типу string, наприклад alt, title, href, aria-label тощо, ви повинні викликати значення функції, наприклад:
    <img src={content.image.src.value} alt={content.image.value} />
    Примітка: у Preact className зазвичай пишеться як class.
    Щоб дізнатися більше про хук useIntlayer, зверніться до документації (API схожий для preact-intlayer).

    (Необов'язково) Крок 6: Змініть мову вашого контенту

    Щоб змінити мову вашого контенту, ви можете використовувати функцію setLocale, надану хуком useLocale. Ця функція дозволяє встановити локаль застосунку та відповідно оновити контент.

    src/components/LocaleSwitcher.tsx
    import type { FunctionalComponent } from "preact";import { Locales } from "intlayer";import { useLocale } from "preact-intlayer";const LocaleSwitcher: FunctionalComponent = () => {  const { setLocale } = useLocale();  return (    <button onClick={() => setLocale(Locales.ENGLISH)}>      Змінити мову на англійську    </button>  );};export default LocaleSwitcher;
    Щоб дізнатися більше про хук useLocale, зверніться до документації (API схоже для preact-intlayer).

    (Необов'язково) Крок 7: Додайте локалізовану маршрутизацію до вашого застосунку

    Мета цього кроку — створити унікальні маршрути для кожної мови. Це корисно для SEO та SEO-дружніх URL-адрес. Приклад:

    - https://example.com/about- https://example.com/es/about- https://example.com/fr/about
    За замовчуванням маршрути не мають префікса для мови за замовчуванням (routing.mode: "prefix-no-default"). Якщо ви хочете додати префікс і для мови за замовчуванням, ви можете встановити опцію routing.mode в "prefix-all" у вашій конфігурації. Див. документацію з конфігурації для додаткової інформації.

    Щоб додати локалізовану маршрутизацію до вашого застосунку, ви можете створити компонент LocaleRouter, який обгортає маршрути вашого застосунку та обробляє маршрутизацію на основі локалі. Ось приклад із використанням preact-iso:

    Спочатку встановіть preact-iso:

    bash
    npm install preact-isonpx intlayer init
    src/components/LocaleRouter.tsx
    import { configuration, getPathWithoutLocale, type Locale } from "intlayer";import type { ComponentChildren, FunctionalComponent } from "preact";import { useEffect } from "preact/hooks";import { IntlayerProvider } from "preact-intlayer";import { LocationProvider, useLocation } from "preact-iso";const { internationalization, routing } = configuration;const { locales, defaultLocale } = internationalization;const Navigate: FunctionalComponent<{ to: string; replace?: boolean }> = ({  to,  replace,}) => {  const { route } = useLocation();  useEffect(() => {    route(to, replace);  }, [to, replace, route]);  return null;};/** * Компонент, який обробляє локалізацію і обгортає дочірні елементи у відповідний контекст локалі. * Він керує визначенням локалі на основі URL та її валідацією. */const AppLocalized: FunctionalComponent<{  children: ComponentChildren;  locale?: Locale;}> = ({ children, locale }) => {  const { path: pathname, url } = useLocation();  if (!url) {    return null;  }  const search = url.substring(pathname.length);  // Визначає поточну локаль — використовується передана locale або локаль за замовчуванням  const currentLocale = locale ?? defaultLocale;  // Видаляє префікс локалі з шляху для побудови базового шляху  const pathWithoutLocale = getPathWithoutLocale(    pathname // Поточний шлях URL  );  /**   * Якщо routing.mode === 'prefix-all', локаль за замовчуванням повинна завжди мати префікс.   */  if (routing.mode === "prefix-all") {    // Перевірити локаль    if (!locale || !locales.includes(locale)) {      // Перенаправити на локаль за замовчуванням з оновленим шляхом      return (        <Navigate          to={`/${defaultLocale}/${pathWithoutLocale}${search}`}          replace // Замінити поточний запис історії новим        />      );    }    // Огорнути children через IntlayerProvider і встановити поточну локаль    return (      <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>    );  } else {    /**     * Коли routing.mode не дорівнює 'prefix-all', локаль за замовчуванням не має префікса.     * Переконатися, що поточна локаль дійсна і не є локаллю за замовчуванням.     */    if (      currentLocale.toString() !== defaultLocale.toString() &&      !locales        .filter(          (loc) => loc.toString() !== defaultLocale.toString() // Виключити локаль за замовчуванням        )        .includes(currentLocale) // Перевірити, чи поточна локаль є в списку дійсних локалей    ) {      // Перенаправити на шлях без префікса локалі      return <Navigate to={`${pathWithoutLocale}${search}`} replace />;    }    // Обгорнути children у IntlayerProvider і встановити поточну локаль    return (      <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>    );  }};const RouterContent: FunctionalComponent<{  children: ComponentChildren;}> = ({ children }) => {  const { path } = useLocation();  if (!path) {    return null;  }  const pathLocale = path.split("/")[1] as Locale;  const isLocaleRoute = locales    .filter(      (locale) => routing.mode === "prefix-all" || locale !== defaultLocale    )    .some((locale) => locale.toString() === pathLocale);  if (isLocaleRoute) {    return <AppLocalized locale={pathLocale}>{children}</AppLocalized>;  }  return (    <AppLocalized      locale={routing.mode !== "prefix-all" ? defaultLocale : undefined}    >      {children}    </AppLocalized>  );};/** * Компонент роутера, який налаштовує маршрути, специфічні для локалі. * Використовує preact-iso для керування навігацією та рендерингу локалізованих компонентів. */export const LocaleRouter: FunctionalComponent<{  children: ComponentChildren;}> = ({ children }) => (  <LocationProvider>    <RouterContent>{children}</RouterContent>  </LocationProvider>);

    Потім ви можете використовувати компонент LocaleRouter у вашому застосунку:

    src/app.tsx
    import { LocaleRouter } from "./components/LocaleRouter";import type { FunctionalComponent } from "preact";// ... Ваш компонент AppContent (визначено в кроці 5)const App: FunctionalComponent = () => (  <LocaleRouter>    <AppContent />  </LocaleRouter>);export default App;

    Паралельно ви також можете використовувати intlayerProxy для додавання серверної маршрутизації до вашого додатка. Цей плагін автоматично визначатиме поточну локаль на основі URL і встановлюватиме відповідний cookie локалі. Якщо локаль не вказана, плагін визначить найвідповіднішу локаль на основі мовних налаштувань браузера користувача. Якщо ж локаль не буде виявлена, він перенаправить на локаль за замовчуванням.

    Зауважте, що для використання intlayerProxy у production потрібно перемістити пакет vite-intlayer з devDependencies до dependencies.
    vite.config.ts
    import { defineConfig } from "vite";import preact from "@preact/preset-vite";import { intlayer, intlayerProxy } from "vite-intlayer";// https://vitejs.dev/config/ (див. документацію Vite)export default defineConfig({  plugins: [preact(), intlayer(), intlayerProxy()],});

    (Необов'язково) Крок 8: Змінити URL при зміні локалі

    Щоб змінювати URL при зміні локалі, ви можете використовувати пропс onLocaleChange, який надає хук useLocale. Паралельно можна використовувати useLocation та route з preact-iso для оновлення шляху URL.

    src/components/LocaleSwitcher.tsx
    import { useLocation, route } from "preact-iso";import {  Locales,  getHTMLTextDir,  getLocaleName,  getLocalizedUrl,} from "intlayer";import { useLocale } from "preact-intlayer";import type { FunctionalComponent } from "preact";const LocaleSwitcher: FunctionalComponent = () => {  const location = useLocation();  const { locale, availableLocales, setLocale } = useLocale({    onLocaleChange: (newLocale) => {      const currentFullPath = location.url; // preact-iso надає повний URL      // Сформувати URL з оновленою локаллю      // Приклад: /es/about?foo=bar      const pathWithLocale = getLocalizedUrl(currentFullPath, newLocale);      // Оновити шлях URL      route(pathWithLocale, true); // true для заміни    },  });  return (    <div>      <button popovertarget="localePopover">{getLocaleName(locale)}</button>      <div id="localePopover" popover="auto">        {availableLocales.map((localeItem) => (          <a            href={getLocalizedUrl(location.url, localeItem)}            hreflang={localeItem}            aria-current={locale === localeItem ? "page" : undefined}            onClick={(e) => {              e.preventDefault();              setLocale(localeItem);              // Програмна навігація після зміни локалі обробляється onLocaleChange            }}            key={localeItem}          >            <span>              {/* Локаль — наприклад FR */}              {localeItem}            </span>            <span>              {/* Мова у своїй локалі — наприклад Français */}              {getLocaleName(localeItem, localeItem)}            </span>            <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>              {/* Мова у поточній локалі — наприклад Francés коли поточна локаль встановлена на Locales.SPANISH */}              {getLocaleName(localeItem, locale)}            </span>            <span dir="ltr" lang={Locales.ENGLISH}>              {/* Мова англійською — наприклад French */}              {getLocaleName(localeItem, Locales.ENGLISH)}            </span>          </a>        ))}      </div>    </div>  );};export default LocaleSwitcher;

    Посилання на документацію:

    - useLocale hook (API схоже для preact-intlayer)> - getLocaleName hook> - getLocalizedUrl hook> - getHTMLTextDir hook> - атрибут hreflang> - атрибут lang> - атрибут dir> - атрибут aria-current> - Popover API

    Нижче оновлений Крок 9 з додатковими поясненнями та вдосконаленими прикладами коду:


    (Необов'язково) Крок 9: Переключення атрибутів мови та напрямку в HTML

    Коли ваш додаток підтримує кілька мов, важливо оновлювати атрибути lang та dir тегу <html>, щоб вони відповідали поточній локалі. Це гарантує:

    • Доступність: Скрінрідери та допоміжні технології покладаються на правильний атрибут lang для коректного промовляння та інтерпретації вмісту.
    • Відображення тексту: Атрибут dir (direction) забезпечує правильний порядок відображення тексту (наприклад, зліва направо для англійської, справа наліво для арабської чи івриту), що є необхідним для читабельності.
    • SEO: Пошукові системи використовують атрибут lang, щоб визначити мову вашої сторінки, що допомагає показувати відповідний локалізований контент у результатах пошуку.

    Оновлюючи ці атрибути динамічно при зміні локалі, ви забезпечуєте послідовний та доступний досвід для користувачів усіх підтримуваних мов.

    Реалізація хука

    Створіть власний хук для керування HTML-атрибутами. Хук відслідковує зміни локалі й відповідно оновлює атрибути:

    src/hooks/useI18nHTMLAttributes.tsx
    import { useEffect } from "preact/hooks";import { useLocale } from "preact-intlayer";import { getHTMLTextDir } from "intlayer";/** * Оновлює атрибути `lang` та `dir` елемента <html> на основі поточної локалі. * - `lang`: Повідомляє браузерам та пошуковим системам мову сторінки. * - `dir`: Забезпечує правильний порядок читання (наприклад, 'ltr' для англійської, 'rtl' для арабської). * * Це динамічне оновлення має вирішальне значення для правильного відтворення тексту, доступності та SEO. */export const useI18nHTMLAttributes = () => {  const { locale } = useLocale();  useEffect(() => {    // Оновлює атрибут lang елемента відповідно до поточної локалі.    document.documentElement.lang = locale;    // Встановлює напрямок тексту залежно від поточної локалі.    document.documentElement.dir = getHTMLTextDir(locale);  }, [locale]);};

    Використання хука у вашому застосунку

    Інтегруйте хук у ваш головний компонент, щоб атрибути HTML оновлювалися щоразу при зміні локалі:

    src/app.tsx
    import type { FunctionalComponent } from "preact";import { IntlayerProvider } from "preact-intlayer"; // useIntlayer вже імпортовано, якщо AppContent його потребуєimport { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes";import "./app.css";// Визначення AppContent з Кроку 5const AppWithHooks: FunctionalComponent = () => {  // Застосовуємо хук, щоб оновити атрибути lang і dir елемента <html> відповідно до локалі.  useI18nHTMLAttributes();  // Припускаючи, що AppContent — ваш основний компонент для відображення вмісту з Кроку 5  return <AppContent />;};const App: FunctionalComponent = () => (  <IntlayerProvider>    <AppWithHooks />  </IntlayerProvider>);export default App;

    Застосувавши ці зміни, ваш додаток буде:

    • Забезпечувати, що атрибут language (lang) правильно відображає поточну локаль, що важливо для SEO та поведінки браузера.
    • Підлаштовувати напрямок тексту (dir) відповідно до локалі, покращуючи читабельність та зручність використання для мов із різними напрямками читання.
    • Забезпечити більш доступний досвід, оскільки засоби допомоги (assistive technologies) залежать від цих атрибутів для оптимальної роботи.

    Щоб переконатися, що навігація вашого додатка дотримується поточної локалі, ви можете створити власний компонент Link. Цей компонент автоматично додає префікс мови до внутрішніх URL.

    Ця поведінка корисна з кількох причин:

    • SEO та User Experience: локалізовані URL допомагають пошуковим системам правильно індексувати сторінки за мовами та надають користувачам контент їхньою бажаною мовою.
    • Consistency: використовуючи локалізоване посилання по всьому додатку, ви гарантуєте, що навігація залишатиметься в поточній локалі, запобігаючи несподіваним перемиканням мови.
    • Підтримуваність: Централізація логіки локалізації в одному компоненті спрощує керування URL-адресами.

    Для Preact з preact-iso зазвичай використовуються стандартні теги <a> для навігації, а preact-iso відповідає за маршрутизацію. Якщо вам потрібна програмна навігація по кліку (наприклад, щоб виконати дії перед переходом), ви можете використовувати функцію route з useLocation. Ось як можна створити власний компонент anchor, що локалізує URL-адреси:

    src/components/LocalizedLink.tsx
    import { getLocalizedUrl } from "intlayer";import { useLocale, useLocation, route } from "preact-intlayer"; // Припускається, що useLocation та route можуть бути експортовані з preact-iso через preact-intlayer, або імпортуватися безпосередньо// Якщо не реекспортується, імпортуйте безпосередньо: import { useLocation, route } from "preact-iso";import type { JSX } from "preact"; // Для HTMLAttributesimport { forwardRef } from "preact/compat"; // Для передачі refexport interface LocalizedLinkProps extends JSX.HTMLAttributes<HTMLAnchorElement> {  href: string;  replace?: boolean; // Необов'язково: замінює стан історії}/** * Утиліта для перевірки, чи є вказаний URL зовнішнім. * Якщо URL починається з http:// або https://, він вважається зовнішнім. */export const checkIsExternalLink = (href?: string): boolean =>  /^https?:\/\//.test(href ?? "");/** * Кастомний компонент Link, який адаптує атрибут href відповідно до поточної локалі. */ * Для внутрішніх посилань використовується `getLocalizedUrl` для додавання префіксу локалі до URL (наприклад, /fr/about). * Це гарантує, що навігація залишатиметься в межах контексту тієї самої локалі. * Використовується стандартний тег <a>, але може ініціювати навігацію на клієнті за допомогою `route` з preact-iso. */export const LocalizedLink = forwardRef<HTMLAnchorElement, LocalizedLinkProps>(  ({ href, children, onClick, replace = false, ...props }, ref) => {    const { locale } = useLocale();    const location = useLocation(); // з preact-iso    const isExternalLink = checkIsExternalLink(href);    const hrefI18n =      href && !isExternalLink ? getLocalizedUrl(href, locale) : href;    const handleClick = (event: JSX.TargetedMouseEvent<HTMLAnchorElement>) => {      if (onClick) {        onClick(event);      }      if (        !isExternalLink &&        href && // Переконайтесь, що href визначено        event.button === 0 && // Лівий клік        !event.metaKey &&        !event.ctrlKey &&        !event.shiftKey &&        !event.altKey && // Перевірка стандартних модифікаторів        !props.target // Не відкривати в новій вкладці/вікні      ) {        event.preventDefault();        if (location.url !== hrefI18n) {          // Перехід лише якщо URL відрізняється          route(hrefI18n, replace); // Використовуємо route з preact-iso        }      }    };    return (      <a href={hrefI18n} ref={ref} onClick={handleClick} {...props}>        {children}      </a>    );  });

    Як це працює

    • Виявлення зовнішніх посилань:
      Допоміжна функція checkIsExternalLink визначає, чи є URL зовнішнім. Зовнішні посилання залишаються без змін.
    • Отримання поточної локалі:
      Хук useLocale повертає поточну локаль.
    • Локалізація URL:
      Для внутрішніх посилань getLocalizedUrl додає префікс поточної локалі до URL.
    • Клієнтська навігація: Функція handleClick перевіряє, чи посилання є внутрішнім і чи слід запобігти стандартній навігації. У такому випадку вона використовує функцію route з preact-iso (отриману через useLocation або імпортовану напряму) для виконання навігації на клієнтській стороні. Це забезпечує поведінку, подібну до SPA, без повного перезавантаження сторінки.
    • Повернення посилання:
      Компонент повертає елемент <a> з локалізованою URL-адресою та власним обробником кліку.

    Налаштування TypeScript

    Intlayer використовує module augmentation, щоб скористатися перевагами TypeScript і посилити вашу codebase.

    Автодоповнення

    Помилка перекладу

    Переконайтеся, що ваша конфігурація TypeScript включає автогенеровані типи.

    tsconfig.json
    {  // ... Ваші існуючі налаштування TypeScript  "compilerOptions": {    // ...    "jsx": "react-jsx",    "jsxImportSource": "preact", // Рекомендовано для Preact 10+    // ...  },  "include": [    // ... Ваші існуючі налаштування TypeScript    ".intlayer/**/*.ts", // Включіть автогенеровані типи  ],}
    Переконайтеся, що ваш tsconfig.json налаштований для Preact, особливо параметри jsx та jsxImportSource, або jsxFactory/jsxFragmentFactory для старіших версій Preact, якщо ви не використовуєте значення за замовчуванням від preset-vite.

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

    Рекомендується ігнорувати файли, згенеровані Intlayer. Це дозволяє уникнути їх коміту в ваш репозиторій Git.

    Для цього ви можете додати такі інструкції до файлу .gitignore:

    # Ігнорувати файли, згенеровані Intlayer.intlayer

    Розширення для VS Code

    Щоб покращити досвід розробки з Intlayer, ви можете встановити офіційне розширення Intlayer VS Code Extension.

    Встановити з Marketplace для VS Code

    Розширення надає:

    • Автодоповнення для ключів перекладу.
    • Виявлення помилок у режимі реального часу для відсутніх перекладів.
    • Вбудований перегляд перекладеного вмісту.
    • Швидкі дії для легкого створення та оновлення перекладів.

    Для детальнішої інформації щодо використання розширення зверніться до документації Intlayer VS Code Extension.


    Далі

    Щоб просунутися далі, ви можете реалізувати візуальний редактор або винести ваш контент, використовуючи CMS.


    Отримуйте сповіщення про майбутні випуски Intlayer