next-intl – как подключиться к Crowdin JS SDK?

Существует страница документации, на которой Crowdin рекомендуется в качестве инструмента управления локализацией. https://next-intl-docs.vercel.app/docs/localization-management

На странице приведен пример с интеграцией с github (автоматизировать создание запросов на включение, но с использованием локальных файлов en.json и т. д.).

Но мы пытаемся выяснить, как использовать next-intl с Crowdin JS SDK https://store.crowdin.com/crowdin-api-client-js, чтобы мы могли загружать и интегрировать все переводы с панели инструментов Crowdin и обновлять их в реальном времени. .

Есть ли у кого-нибудь пример кода, как добиться этого с помощью next-intl?

Мы пытались найти пример, но не нашли его на сайте документации.

1 ответ

В таких случаях не рекомендуется использовать REST API (из-за ограничений скорости и соображений безопасности). Вместо этого используйте клиент Crowdin OTA JS .

Клиент Crowdin OTA JS предоставляет методы для получения строк перевода из JSON в виде объектов или обычного текста для других файлов. Основным преимуществом здесь является AWS CDN (сеть доставки контента) для переводов, которая обеспечивает низкую задержку и высокую надежность загрузки переводов.

Для демонстрации я буду использовать официальный пример проекта next-intl , а для получения переводов — метод getStringsByLocale .

src/pages/index.tsx:

      import otaClient from '@crowdin/ota-client';
import {GetStaticPropsContext} from 'next';
import {useTranslations} from 'next-intl';
import LocaleSwitcher from 'components/LocaleSwitcher';
import PageLayout from 'components/PageLayout';

export default function Index() {
  const t = useTranslations('Index');

  return (
    <PageLayout title={t('title')}>
      <p>{t('description')}</p>
      <LocaleSwitcher />
    </PageLayout>
  );
}

export async function getStaticProps({locale}: GetStaticPropsContext) {
  const client = new otaClient('<distribution-hash>');

  const messages =
    locale === 'en'
      ? (await import(`../../messages/en.json`)).default
      : await client.getStringsByLocale(locale);

  return {
    props: {
      messages
    }
  };
}

Обратите внимание, что вам нужно будет создать дистрибутив в вашем проекте Crowdin. Распространение — это хранилище CDN, которое отражает переведенный контент вашего проекта. Затем используйте хэш распределения дляotaClientинициализация.

Вот демоверсии:

Другие вопросы по тегам