Как я выучил 12 языков за одну ночь

Использование последних достижений машинного обучения и умного кэширования

Долгий путь к языкам

Я уже довольно давно обдумываю идею, которая казалась одновременно интересной и сложной: что было бы необходимо для достижения многоязыковой поддержки моего веб-приложения с минимальными затратами на обслуживание? Также с учетом затрат в качестве основного ограничения (на этом сайте нет рекламы и вообще не используется отслеживание, поэтому здесь нет поступающей выручки), как могло бы выглядеть действительное решение?

План

Все начинается и заканчивается используемой системой перевода. Благодаря использованию Ubuntu в качестве одного из моих ежедневных драйверов, я однажды обнаружил в магазине приложений симпатичное маленькое приложение под названием «Argos translate», которое представляет собой движок перевода с открытым исходным кодом, построенный на последних моделях машинного обучения, подобных тем, что используются в DeepL . Если вы не знакомы с DeepL, это отличный переводчик, который можно бесплатно использовать на своем веб-сайте.

Но вернемся к Argos: взглянув на соответствующий репозиторий, я увидел, что есть также доступная OSS-библиотека python-lib, которая хорошо вписывается в автономную среду. Поработав некоторое время, я решил взглянуть на некоторых переводчиков через предложения SaaS, поскольку весь процесс установки argos translate не прошел так хорошо, как я надеялся.

Поэтому я установил другой сервис, Cloud Translations от GCP, который предлагает 500 000 символов бесплатно в месяц, а затем взимает определенную плату за каждые 1000000.

Все дело в кешировании

Благодаря настройке Next.js с ISG (инкрементное создание сайта) я могу вызывать переводы для каждой страницы по запросу, что значительно упрощает планирование, поскольку не требуется выполнять одно развертывание со всеми переводами сразу.

Тем не менее я не знал, как обрабатывать кеширование переведенных строк. Конечно, пограничная сеть Vercel (где размещается этот PWA) может полностью решить эту задачу. Но я хотел, чтобы развертывания не зависели от переводов. вот почему я создал один дополнительный уровень кеширования с помощью простого экземпляра Firestore, также размещенного на GCP.

Самой большой проблемой был синтаксический анализ + замена содержимого блока для каждой статьи. Если не знаешь. Контент блока описывает фактическое тело статьи, которое я создаю в CMS. После перевода эти блоки не являются обычным текстом, а каждый из них встроен в специальную структуру данных, позволяющую хранить семантическую информацию или метаданные. Надежное обнаружение и перевод только релевантных строк было одной из важнейших частей этой реализации.

Один мужчина, 12+ языков

Поддерживаемые языки (в настоящее время):

  • "en": английский
  • "de": немецкий
  • "fr": французский
  • "es": испанский
  • "eo": эсперанто
  • "эль": греческий
  • "ja": японский
  • «ru»: русский
  • «привет»: хинди
  • "он": иврит
  • "tr": турецкий
  • "af": африкаанс
  • "ar": арабский
  • «ко»: корейский

Чтобы протестировать различные варианты, просто поместите код языка после базового URL. Например: «https://flaming.codes/fr». Вот и все!

Подводя итог моей реализации, установка выглядит так:

  • каждая страница статически строится не реже, чем каждые 4 часа, но только по запросу; это означает, что новый перевод выполняется не чаще чем каждые 4 часа для данного сайта.
  • сами переводы сначала загружаются из Firestore; только если ничего не доступно, строки переводятся и кешируются в Firestore

Эта настройка работает настолько хорошо, что я не буду использовать какие-либо переводы классическим способом, например создание вручную json-файлов, в которых хранятся пары "ключ-значение". Я буду использовать Cloud Translation API для всего, что нужно интернационализировать, чтобы сделать его полностью динамичным. Благодаря этим изменениям на момент написания PWA насчитывает около 430 страниц.

Каждая страница переводится с английского на 13 других языков, которые представляют собой наиболее распространенные, а также те, которые расположены по всему миру между ними. Посмотрим, как он будет развиваться!

  • Tom

Предложения

Связанные

Приложение

Языки