Свершилось!
Наша компания официально завершила перевод документации PostgreSQL текущей версии на русский язык и в этой публикации мы хотим поведать, как это было. Мы также хотели бы рассказать о пути, который мы прошли для достижения этой цели (и какие направления мы перепробовали), но это, пожалуй, тема для отдельной статьи.
Перевод самого PostgreSQL на русский язык начался в далёком 2001 году, тогда вышла только версия postgresql 7.1, и в самом postgresql усилиями в том числе и наших разработчиков только появлялась возможность локализации сообщений (см. тут). Впервые перевод сообщений на русский был включён в версию 7.2, вместе с переводами на французский, немецкий, шведский, китайский и чешский.
На дворе стояла кодировка KOI8-R. Windows 2000, Linux 2.4.1, RHEL 2.1, Debian Woody. pgadmin II. Ubuntu? Нет, не слышали.
В сообщениях сервера 7.2 на русский было переведено около 30% (881 сообщение из 3205). Документация к серверу 7.2 занимала около 1000 страниц. Январь 2005 — для версии 8.0 было переведено около 80% (2888 сообщений). Windows 2003, Linux 2.6.10, RHEL 4, Debian Sarge, Ubuntu — о, уже слышали, что-то с бородавками.
К версии 9.0 доля перевода снизилась до 64% (2765 сообщений).
Наконец, в 2012 на версии 9.2 мы догнали — 100% (6388 сообщений). (Сейчас в версии 9.5 переведены 7675 сообщений. Размер сообщений с переводом около 1.8 Мбайта.)
После этого захотелось большего. Большего, чем перевод pgadmin'а и его сайта. Гораздо большего. И большее нашлось — документация. На официальном сайте имелись ссылки только на французский и японский переводы. Это вызов! На момент выхода 9.3 документация занимала уже около 2000 страниц (не считая Release Notes), так что это снова вызов! Нельзя не заметить, что попытки перевода документации уже предпринимались. Похоже, самая первая, о которой сохранились сведения — это перевод документации для версии 6.5.2, выполненный тогда наверняка молодыми и горячими ребятами из Сергиева Посада ещё в XX веке н.э.
Потом был ещё один перевод, уже в наше время, однако он не был полным, да и качество его оставляло желать. Можно найти следы и ещё одной попытки, тоже не увенчавшейся. Поэтому было решено, что проще нового завести, чем этого отмыть. И в другой семье.
В начале 2013 года был закончен и опубликован перевод двух первых разделов документации (около 400 стр.). В 2015 образовалась наша компания, которая выбрала одной из своих первоочередных задач полный перевод документации. И работа закипела. На входе мы имели документацию по версии 9.4 на 2000 стр. и переведённое начало на 400. В июне было переведено 25%, в декабре 57%, в апреле перевод документации для 9.4 был закончен. В мае 2016 перевод синхронизирован с версией 9.5 и мы получили полностью русскую документацию (объёмом 2xxx страниц, объём сырого текста вместе с переводом ~18 Мбайт).
Получился вот такой рельеф:
И наконец, в настоящее время мы идём вровень с версией 9.6 (beta2, beta3, ...) и выпустим полную документацию на русском языке в момент выхода продукта.
К нашему счастью, нам удалось воспользоваться специализированной версией РУS-Studio, проходящей закрытое тестирование. Благодаря этому мы смогли проверять текст на стадии перевода и выявлять ошибки, некоторые из которых мы забавы ради и рассмотрим ниже. Ошибки наши, так что имеем право, хотя такие типы ошибок встречаются повсеместно.
Когда клиентское приложение соединяется с сервером, оно указывает, имя пользователя PostgreSQL, так же как и при обычном логине пользователя в Unix-like ОС.Предупреждение РУS-Studio: W203 English-like-предложение detected.
Это обеспечивает более высокий уровень надёжности, но только в случае внимательной работы системного администратора при установке и настройке этих двух серверов.Вопрос РУS-Studio: Q088 А насколько внимательна твоя работа?
Например, в процессе жизненного цикла приложения 10% изменений являются важными данными клиентов, другие 90% изменений менее важны для бизнеса и могут быть легко восстановлены при их потере (например, чат между пользователями).Ошибка РУS-Studio: A000 Нарушение ложности: «Рабочая нагрузка» != «Жизненный цикл»
Оригинал:
For example, an application workload might consist of: 10% of changes are important customer details, while 90% of changes are less important data that the business can more easily survive if it is lost, such as chat messages between users.
Ошибка РУS-Studio: A000 Нарушение ложности: «Бизнес выжил» != «Восстановлен чат между пользователями»
Пользователи должны понимать, что таблицы, подвергающиеся высокой нагрузке на обновление на ведущем сервере с большей вероятностью могут вызвать отмену длительных запросов на резервном.Ошибка РУS-Studio: R005 Ахисложносочинённое предложение.
Вопросы РУS-Studio: Q075 Нагрузка на ЛОЛ-что? Таблицы подвергаются ЛОЛ-чему? Таблицы могут ЛОЛ-вызвать?
В обычном (не восстановительном) режиме, выполнение команды DROP USER или DROP ROLE для роли, которая обладает возможностью подключения и пользователь сейчас подключён, для этого пользователя ничего не происходит — он продолжает оставаться подключённым.Ошибка РУS-Studio: B901 Разрыв шаблона.
Исчерпание квоты вызовет такие же плохие последствия как и отсутствие самого места на диске.Предупреждение РУS-Studio: W051 Степень кривизны предложения превышает приемлемый уровень во второй производной.
Триггерные функции должны использовать version 1 интерфейса диспетчера функций.Ошибка РУS-Studio: R00E Выявлен текст на англусском языке.
Позволяет создаваемому пользователю открывать сессии. Это поведение по умолчанию.Ошибка РУS-Studio: L102 Обнаружено сжатие с потерями.
Оригинал:
The new user will be allowed to log in (that is, the user name can be used as the initial session user identifier). This is the default.
Так как данные базы могут изменяться во время создания копии, то оценка может быть лишь приблизительной и не давать точности в 100%.Ошибка РУS-Studio: MU003 Выявлены признаки непонимания смысла.
Оригинал:
Since the database may change during the backup, this is only an approximation and may not end at exactly 100%.
Вывести путь размещения кода объектов библиотек.Ошибка РУS-Studio: N3!: Неверное решение задачи комбинаторики.
Оригинал:
Print the location of object code libraries.
На платформах, где это поддерживается, сервер будет пытаться фиксировать снимки памяти при авариях. Это позволяет диагностировать и предотвращать потенциальные проблемы в будущем.Предупреждение РУS-Studio: Выявлено упрощение предложения как решение проблемы недопонимания.
Оригинал:
Attempt to allow server crashes to produce core files, on platforms where this is possible, by lifting any soft resource limit placed on core files. This is useful in debugging or diagnosing problems by allowing a stack trace to be obtained from a failed server process.
Игнорировать ожидание завершения запуска или остановки сервера.Предложение РУS-Studio: S021 Людям со сложным внутренним миром к применению: «Не игнорируй ожидание меня».
Оригинал:
Do not wait for startup or shutdown to complete.
Все эти ошибки были безжалостно исправлены, но если вы, изучая документацию в нашем пиреводе, встретите другие, пишите нам. Мы очень надеемся, что наша документация будет такой же качественной, как и оригинальная.
Вы спросите: А зачем вообще нужно было переводить действительно очень толковую документацию? Конечно, тот, кто задаёт этот вопрос, уже читал оригинальную и, значит, способен понимать по-английски, и наверное, будет и дальше читать её, и возможно, не менее увлекательные списки рассылки.
Однако для тех, кто ещё не знаком с этой замечательной СУБД, отсутствие достаточного знания английского языка, по нашему глубокому убеждению, не должно быть препятствием для её изучения. Это и начинающие администраторы/разработчики, и студенты, и даже школьники (да, в документации есть материал, посвящённый основам SQL, который мог бы быть понятен и ежу).
Кроме того, именно то, что она очень толковая, уже само по себе оправдывает усилия по её переводу. К тому же, взяв наш перевод за основу, мы разрабатываем учебные пособия и курсы с тем же уровнем качества и полноты материала, который мы можем найти в оригинале.
И наконец, наш продукт Postgres Pro, построенный на базе PostgreSQL, включён в реестр отечественного ПО, а значит, ориентирован прежде всего на русскоязычных пользователей и должен иметь русскую документацию. Перевод же ванильной версии — это наш вклад в развитие всего русскоязычного сообщества postgres.
Как итог месяцам и мегабайтам проделанной работы, состоявшееся событие выразилось в появлении в списке переводов на странице https://www.postgresql.org/docs/ скромной ссылки Russian.
Welcome!
Комментарии (36)
abstractbug
12.08.2016 12:50+1Перевод это хорошо, осталось чтобы он оставался всегда актуальным, иначе получиться что провели просто большую и бесполезную работу. Собственно это основная причина отсутствия переводов — они слишком быстро теряют актуальность.
xclusn
12.08.2016 13:25+2Из опыта: различия между версиями (9.5 и 9.6) составляют в пределах 5% от объёма перевода, версии выходят раз в полгода, так что если не случится форс-мажор и потребность в переводе сохранится, поддерживать его актуальность будет уже не так сложно. Более того, мы рассматриваем возможность предоставить средства для коллективного участия в переводе, в том или ином виде, что также этому посбособствует.
symbix
12.08.2016 18:08О, а я почему-то изначально подумал, что исходники перевода общедоступны для postgresql-сообщества. Какой смысл их скрывать? Почему бы просто не выложить переведенный doc/src на github?
xclusn
12.08.2016 18:11+4Правильно подумали! Вот они: https://github.com/pluzanov/pg-doc-ru/
Речь не об исходниках, а о том, как организовать удобную работу с переводом — что-то типа transifex…symbix
12.08.2016 18:15А, ну это, мне кажется, уже необязательные свистелки. С задачей поиска устаревших частей перевода вполне можно справиться шелл-скриптингом вокруг git, а для ревью переводов вполне подойдут и пулл-реквесты на гитхабе.
xclusn
12.08.2016 18:23+1Да, с этой задачей мы уже справляемся. Выше было высказано небеспочвенное опасение, что актуальность может быть потеряна. Я попытался описать наш подход к решению этой проблемы — упрощение участия в переводе.
Одно дело зайти на сайт и перевести/скорректировать десяток строк в удобном интерфейсе, другое дело — делать это как-то автономно, потом пулл-реквесты и т. д. Собственно этот путь людьми уже пройден (опять же transifex), надо просто взять на вооружение.symbix
12.08.2016 19:58+2Понятно.
Мне кажется, для начала неплохо бы упомянуть об этом гитхаб-репозитории в переведенной документации. Например, в docguide. А то ведь никто и не узнает :)
pasha_golub
14.08.2016 21:16Так, а почему бы действительно не пользоваться транзифексом? Для опен сорса он бесплатен
xclusn
15.08.2016 10:41Глубоко этот вопрос ещё не изучали, но пока видятся сложности, связанные с некоторой спецификой текста:
а) Фрагменты бывают довольно длинными, 1000 символов и больше — в интерфейсе Transifex'а, который я вижу, переводить их будет неудобно.
б) Желательно работать с моноширинным шрифтом, так как в документации встречаются, например, таблицы, оформленные пробелами.
в) Довольно много отдельных файлов ~ 360.
Akvel
12.08.2016 13:00А можно нескромный вопрос, а зачем вы занимаетесь переводом официальной документации?
xclusn
12.08.2016 13:06+6А мы, предвидя этот вопрос, прямо в статье на него и ответили. Ну или вот мнение очень авторитетного человека в мире postgres:
Yes, this takes Russian adoption of Postgres to a new level!
Рассчитываем на то, что так оно и будет.
ivanych
12.08.2016 13:06+1> Вы спросите: А зачем вообще нужно было переводить действительно очень толковую документацию?
Этого абзаца не было в статье в тот момент, когда Вы её читали?
ky0
12.08.2016 13:09+5Ну как же? Потенциальное импортозамещение обязывает, тендер с «лет ми спик фром май хартом» не выиграешь.
symbix
12.08.2016 13:19+5Это как раз очевидно: https://reestr.minsvyaz.ru/reestr/65273/
А вот за то, что не придержали перевод для своего форка, а передают труды сообществу — им честь и хвала.
Toshiro
12.08.2016 13:03-10Переводы всегда кривые и насыщены ошибками. Однако, это побуждает школьника/студента начать учить английский серьезнее, когда он понимает что на чтении кривой переведенной документации далеко не уедет. Так что это хорошо, в отличие от ситуации когда школьник/студент вообще не изучает технологию потому, что не может в английский.
ivlevdenis_ru
12.08.2016 13:26На сайте http://postgresql.ru.net/manual/index.html тоже были зачатки перевода.
hudson
12.08.2016 13:35+1Ребята, а не поделитесь опытом, как вы поддерживаете перевод? Я в своё время срубился именно на поддержке — часто апдейт статьи приводил к ее полному переводу, когда, например куча изменений как по стилю изложения и по функциональности на протяжении всей статьи.
Может есть какие устоявшиеся практики или у вас наработались какие-то трюки?xclusn
12.08.2016 14:09+4Да, есть в планах рассказать о технологиях (в отдельной статье). Если в общих чертах, то минимум изобретений, в основном используем средства gettext, плюс очень помогает то, что работа над документацией параллельно с исходным кодом ведётся в git. Ещё больше помогает, что исходный материал очень качественный и таких случаев, как пришла Агата Кристи и переписала всё, что до этого писал Конан Дойл, я не припомню. Наверное с хуже проработанной изначально документацией проблем было бы больше.
Nastradamus
12.08.2016 14:03+3РУS-Studio — не выдуманный софт, случайно? Нигде не смог найти это чудо в поисковиках.
VioletGiraffe
12.08.2016 14:17+2Вот мне тоже интересно) Например, я не знал, что natural language processing уже дорос до такого уровня.
kyern
12.08.2016 15:39+5Это отсылочка к ребятам из PVS-Studio и их статическому анализатору кода. (Либо я просто не могу в сарказм)
chernigoff
12.08.2016 18:06Года 3 использую постгрес, в доку заглядывал лишь раз, и уже не помню зачем. Чаще нахожу решения своих проблем на stackoverflow. Спасибо, может быть пригодиться.
echo_mont
13.08.2016 06:32это хорошо. И прекрасно.
Но как он коннектит с последним glassfish и все это вместе на IJ собирается?xclusn
14.08.2016 16:53Думаю, что в поисках конструктивного обсуждения и решения этого вопроса стоит воспользоваться формой обратной связи на нашем сайте. То, что ваш вопрос всплыл в этих комментариях, говорит о большой заинтересованности в его решении, так что остаётся только направить необходимые ресурсы в нужное русло
Dimd13
Спасибо за отличную новость