Этот сайт больше не обновляется.Перейдите на react.dev

А React уже переведён? ¡Sí! Sim! はい!

23 февраля, 2019 от Nat Alison

This blog site has been archived. Go to react.dev/blog to see the recent posts.

Мы рады объявить о работе над поддержкой официальных переводов документации React на другие языки. Благодаря усердным усилиям сообщества React по всему миру, React переводится на более, чем 30 языков! Их можно найти на новой странице — переводы.

Также, переводы для следующих трех языков уже полностью завершены! 🎉

Отдельно хотелось бы поздравить Alejandro Ñáñez Ortiz, Rainer Martínez Fraga, David Morales, Miguel Alejandro Bolivar Portilla и всех участвовавших в переводе испанского перевода с тем, что они стали первыми, кто полностью перевёл основные страницы документации!

Почему важна локализация

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

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

Помощь проекту

Если вам хочется помочь с переводом, посетите страницу переводов и нажмите на ссылку «‎Contribute»‎ у вашего языка.

Не можете найти свой язык? Если хотите поддерживать форк перевода на ваш язык, тогда следуйте инструкциям в репозитории переводов!

Предыстория

Здравствуйте! Я Nat! Я могу быть вам известна как та леди с полиэдрами. Последние несколько недель я помогала команде React координировать процесс переводов. Вот, как я это сделала.

Поначалу мы использовали SaaS-платформу для обработки переводов от пользователей. Для этого был даже оформлен пулреквест, и изначально я должна была закончить эту интеграцию. Но мы боялись, что из этого ничего путного не получится, а качество переводов оставит желать лучшего. В первую очередь мы хотели, чтобы переводы не отставали от основного репозитория и не оказывались на «‎свалке».

Дэн смотивировал меня найти альтернативное решение, и мы натолкнулись на подход Vue к поддержке своих переводов — при помощи множества форков основного репозитория на Github. В частности, японский перевод использовал бота для проверки изменений в английском репозитории и создавал пулреквесты, когда изменения появлялись.

Нам понравился такой подход по нескольким причинам:

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

Мы начали с пробного периода для трех языков: испанского, японского и с упрощенного китайского. Таким образом мы выработали методику и приняли меры, чтобы с будущими переводами не возникало проблем. Я хотела, чтобы команды по переводам имели свободу выбора удобных им инструментов. Единственным требованием был чек-лист, описывающий порядок перевода страниц.

After the trial period, we were ready to accept more languages. I created a script to automate the creation of the new language repo, and a site, Is React Translated Yet?, to track progress on the different translations. We started 10 new translations on our first day alone!

Благодаря этой автоматизации, последующая поддержка проекта по большей части шла гладко. Позже мы создали Slack-канал, чтобы переводчики могли удобно общаться между собой; также я выпустила руководство, которое закрепило обязанности мейнтейнеров сообщества. Платформа для общения между переводчиками себя показала отлично — к примеру, переводчики арабского, персидского и иврита смогли вместе добиться отображения текста справа налево!

Бот

Сложнее всего было синхронизировать изменения с английской версией сайта. Сперва мы использовали бота che-tsumi, которого разработала команда японского перевода Vue, но позже решили разработать собственного бота, который бы работал бы так, как удобно нам. Если быть точной, то нас не устраивали связанные между собой ишью, которые создавались после выборочного применения новых коммитов ботом che-tsumi. А после релиза хуков так и вовсе начался полный бардак.

В итоге мы решили, что вместо выборочного применения каждого коммита целесообразнее будет сливать все новые коммиты в один пулреквест где-то по разу в день. Конфликты сливаются как есть и перечисляются в пулреквесте в виде чек-листа.

Создать скрипт синхронизации было довольно просто: скачать переведённый репозиторий, добавить в его удалённые репозитории оригинальный, стянуть его изменения и создать пулреквест.

Проблемой стал поиск места для запуска бота. Я фронтенд-разработчица и, возможно, поэтому такие сервисы как Heroku мне чужды. К слову, ещё до прошлого вторника я запускала скрипт на своём ПК вручную!

Самая большая загвоздка заключалась в дисковом пространстве. Каждый форк репозитория занимает около 100MB и моему компьютеру нужно несколько минут для скачивания. Форков у нас 32, а бесплатные планы большинства платформ для развёртывания, которые я рассматривала, предоставляли лишь 512MB пространства.

Множество раз пересчитав всё в блокноте, я пришла к решению: удалять каждый репозиторий после выполнения скрипта и ограничивать количество одновременно запущенных скриптов до того, которое могло поддержать хранилище. К счастью, dynos от Heroku имеют интернет-соединение получше моего, и они быстро скачивают даже репозиторий React.

Были и другие мелкие проблемы. Я попробовала аддон Heroku Scheduler, благодаря которому мне не пришлось писать watch-код, однако он работал нестабильно. Меня охватил экзистенциальный кризис в твиттере, когда я не смогла разобраться, как отправлять коммиты из Heroku dyno. Но, в конце концов, моя внутренняя фронтенд-разработчица смогла заставить бот работать!

Само собой, боту есть куда улучшаться. В данный момент он не проверяет, есть ли открытые пулреквесты перед тем, как отправить очередной. Также ему всё ещё трудно определить точные изменения оригинала, и есть шанс пропустить места, нуждающиеся в переводе. Однако я доверяю мейнтейнерам, которых мы выбрали для решения этих проблем, да и код бота находится в открытом доступе, если кто-то вдруг решится помочь мне с данными улучшениями!

Благодарность

Наконец, мне хотелось бы выразить свою признательность следующим людям и командам:

  • Всем мейнтейнерам переводов и участникам сообщества, помогающим с переводом React более чем на 30 языков.
  • Vue.js Japan User Group — за идею контролировать перевод при помощи бота, и особая благодарность — Hanatani Takuma за помощь в понимании их подхода, а также поддержку японского перевода.
  • Soichiro Miki — за многочисленный вклад и содержательные комментарии касательно всего процесса перевода, а также за помощь с поддержкой японского перевода.
  • Eric Nakagawa — за организацию нашего предыдущего процесса перевода.
  • Brian Vaughn — за настройку страницы переводов и за администрирование всех поддоменов.

И напоследок, огромное спасибо Дэну Абрамову за то, что дал мне эту возможность, и, конечно же, за его замечательные наставления.