Weblate

Weblate — это основанная на веб-технологиях свободная система непрерывной локализации, выпускаемая на условиях авторского лева, используемая более чем 2500 свободными проектами и компаниями в более чем 165 странах.

Установите его или воспользуйтесь сервисом Hosted Weblate, расположенном по адресу weblate.org.

Веб-сайт Статус перевода Передовая практика CII https://img.shields.io/pypi/v/weblate.svg https://readthedocs.org/projects/weblate/badge/ Лицензия

Поддержать

Weblate — это свободное программное обеспечение с необязательной дополнительной профессиональной поддержкой и предложением облачного хостинга. Дополнительную информацию можно получить на сайте https://weblate.org/hosting/.

Документация

Её можно найти в подкаталоге docs каталога с исходным кодом, или посмотреть на сайте https://docs.weblate.org/ru

Установка

Инструкции по установке:

https://docs.weblate.org/ru/latest/admin/install.html

Ошибки

Пожалуйста, отправляйте запросы о добавлении новых возможностей и сообщения о проблемах сюда:

https://github.com/WeblateOrg/weblate/issues

Live chat

Live chat about Weblate is available at Libera.Chat IRC network. The channel name is #weblate. This can be accessed by, for example, https://web.libera.chat/#weblate or an IRC client installed on your computer.

Лицензия

Авторское право © 2012–2022 Михал Чигарж (Michal Čihař) michal@cihar.com

Это свободная программа: вы можете перераспространять ее и/или изменять ее на условиях Стандартной общественной лицензии GNU в том виде, в каком она была опубликована Фондом свободного программного обеспечения; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.

Эта программа распространяется в надежде, что она будет полезной, но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННЫХ ЦЕЛЕЙ. Подробнее можно просмотреть в Стандартной общественной лицензии GNU.

Вы должны были получить копию Стандартной общественной лицензии GNU вместе с этой программой. Если это не так, смотрите https://www.gnu.org/licenses/.

Основы Weblate

Структура проектов и компонентов

Переводы в Weblate организованы по проектам и компонентам. Каждый проект может содержать несколько компонентов, а те — переводы на отдельные языки. Компоненту соответствует один переводимый файл (например, GNU gettext или Строковые ресурсы Android). Проекты служат для организации компонентов в логические наборы (например, для группировки всех переводов, используемых в одном приложении).

Внутри каждого проекта переводы общих строк по умолчанию распространяются на другие его компоненты. Это облегчает бремя повторного и много-версионного перевода. Если в вашем проекте перевод в разных компонентов должен отличаться, то такое «распространение» можно отключить в настройках компонента с помощью параметра «Разрешить распространение перевода».

Регистрация и профиль пользователя

Регистрация

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

Вы можете зарегистрироваться, выполнив несколько простых шагов:

  1. Заполните свои учётные данные в форму регистрации.

  2. Активируйте регистрацию, пройдя по ссылке из письма, которое придёт вам на электронную почту.

  3. По желанию настройте свой профиль, выбрав, какие языки вы знаете.

Панель управления

При входе в систему вы увидите сводку с проектами и их компонентами, а также информацию о прогрессе перевода по каждому из них.

Добавлено в версии 2.5.

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

Подсказка

На другие представления вы можете переключиться с помощью вкладок навигации.

_images/dashboard-dropdown.png

Меню содержит следующие параметры:

  • Пункт Проекты > Просмотр всех проектов в главном меню позволит перейти на страницу, где можно посмотреть статус перевода всех проектов, которые есть на данном экземпляре Weblate.

  • Выбор какого-либо из ваших основных языков в главном меню Языки выдаст страницу, где отображается статус перевода всех проектов, на этот конкретный язык.

  • На вкладке Отслеживаемые переводы панели управления показывается статус перевода тех проектов, которые вы отслеживаете, и только на те языки, которые вы выбрали своими основными.

Кроме того, в выпадающем списке может отображаться любое количество списков компонентов — наборов компонентов различных проектов, которые заранее настроил администратор Weblate; смотрите подробности в разделе Списки компонентов.

Вы можете изменить внешний вид панели управления под себя на вкладке Настройки в параметрах своего профиля.

Примечание

Если Weblate настроен для перевода одного проекта (установлен параметр SINGLE_PROJECT в файле settings.py, смотрите раздел Конфигурация), то вместо того, чтобы отображать панель управления, Weblate будет сразу перенаправлять пользователь на страницу этого проекта (или его компонента).

Профиль пользователя

Чтобы перейти к настройкам своего профиля, щелкните по иконке пользователя в верхней правой части экрана (в верхнем меню) и выберите пункт Параметры.

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

Примечание

Во всех пунктах настроек, связанных с языками, можно выбрать только те языки, которые в данный момент уже используются в переводах.

Подсказка

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

Языки

Язык интерфейса

Выберите язык, на который вы желаете переводить.

Языки перевода

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

_images/your-translations.png

Вспомогательные языки

Вы можете задать вспомогательные языки. Они будут показываться при переводе вместе с оригиналом в качестве подсказки. Например, если в качестве вспомогательного выбрать иврит то интерфейс будет выглядеть как на следующем рисунке:

_images/secondary-language.png

Настройки

Вид панели управления по умолчанию

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

Специальные символы

Additional special characters to include in the Визуальная клавиатура.

Уведомления

На вкладке Уведомления можно подписаться на различные уведомления. Уведомления по выбранным событиям для отслеживаемых или управляемых проектов будут высылаться вам по электронной почте.

Некоторые уведомления отправляются только для событий, связанных с вашим языком (например, уведомление о новых строках для перевода), в то время как другие срабатывают на уровне компонента (например, уведомление об ошибках слияния). Эти две группы уведомлений в настройках визуально разделены.

Вы можете включать или отключать уведомления для отслеживаемых и управляемых проектов, а в дальнейшем их можно настроить (или полностью отключить) для каждого отдельного проекта или компонента. Посетите страницу компонента и выберите соответствующий пункт в меню Отслеживание.

Если параметр Автоматически добавлять проект в отслеживаемые при правке включён, то при редактировании какого-либо проекта он будет автоматически добавлен в ваш список отслеживаемых. Значение по умолчанию зависит от параметра DEFAULT_AUTO_WATCH.

Примечание

Вы не будете получать уведомления о собственных действиях.

_images/profile-subscriptions.png

Учётная запись

Вкладка Учётная запись позволяет вам настроить основные данные учётной записи, подключить различные сервисы, которые вы можете использовать для входа в Weblate, полностью удалить свою учётную запись или скачать свои данные пользователя (смотрите раздел Файл экспорта данных пользователя Weblate’а).

Примечание

Список сервисов зависит от ваших настроек Weblate и может включать такие популярные сайты, как GitLab, GitHub, Google, Facebook или Bitbucket, а также других провайдеров OAuth 2.0.

_images/authentication.png

Профиль

Все поля на этой странице являются необязательными и в любое время могут быть удалены, и заполнив их, вы даёте нам согласие на показ этих данных везде, где появляется ваш профиль пользователя.

Аватар может показываться для каждого пользователя (это зависит от параметра ENABLE_AVATARS). Эти изображения получаются от сервиса https://gravatar.com/.

Лицензии

Доступ к API

Вы можете получить или пересоздать свой токен доступа здесь.

Журнал аудита

Журнал аудита отслеживает действия, произведённые с вашей учётной записи. Для каждого важного действия с вашей учётной записью в нём регистрируются IP-адрес и браузер. Критические действия вдобавок инициируют уведомление на основной адрес электронной почты.

Перевод с помощью Weblate

Благодарим вас за проявленный интерес к переводу с помощью Weblate. Проекты могут быть настроены либо на прямой перевод, либо на принятие предложений, внесённых пользователями без учётных записей.

В целом, существует два режима перевода:

  • Проект принимает прямые переводы

  • Проект принимает только предложения, которые автоматически подтверждаются по достижении определённого числа голосов

Для получения более подробной информации о процессе перевода, пожалуйста, ознакомьтесь с разделом Рабочие процессы перевода.

Варианты видимости проекта перевода:

  • Publicly visible

  • Видимый только для определённой группы переводчиков

Проекты перевода

В проекте перевода содержатся относящиеся к нему компоненты — ресурсы связанные с одним и тем же программным обеспечением, книгой или проектом.

_images/project-overview.png

Предложения

Примечание

Фактические разрешения могут отличаться в зависимости от ваших настроек Weblate.

Анонимные пользователи могут только вносить предложения (по умолчанию). Тоже самое могут делать и зарегистрированные пользователи, если они неуверенны в собственном переводе. Эти предложения в дальнейшем сможет просмотреть и отрецензировать другой переводчик.

Предложения ежедневно сканируются с целью удаления дубликатов и предложений, совпадающих с текущим переводом.

Комментарии

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

Во всех типах комментариев вы можете использовать синтаксис Markdown и упоминать других пользователей, используя синтаксис @упоминаний.

Варианты

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

Метки

Метки используются для категоризации строк в проекте для дальнейшего изменения рабочего процесса локализации (например, для определения категорий строк).

Following labels are used by Weblate:

Автоматически переведено

String was translated using Автоматический перевод.

Исходная строка требует рецензирования

String was marked for review using Рецензирование исходных строк.

См.также

Метки строк

Перевод

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

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

На этой странице также могут быть показаны различные кусочки дополнительной информации, большая часть которой берётся из исходного кода проекта (например, контекст, комментарии разработчика или место, где используется сообщение). Если переводчик в параметрах своего профиля выбрал дополнительные языки, то над исходной строкой будет также показан перевод на каждый из этих языков (смотрите раздел Вспомогательные языки).

Под переводом будут показаны предложения, внесённые другими пользователями, которые вы, в свою очередь, можете принять(✓), принять с изменениями(✏️) или удалить(🗑).

Формы множественного числа

Слова, изменяющие свою форму в зависимости от того, какое число находится рядом с ними, называются в Weblate «формами множественного числа». Каждый язык имеет своё определение множественного числа. В английском языке, например, существует всего одна такая форма. Если слово стоит в единичном числе, к примеру, «автомобиль» — «car» — неявно подразумевается именно одна машина, а во множественном — «автомобили» — «cars» — подразумеваются уже две или более машины, либо же просто понятие «автомобили» как существительное. Такие языки, как, например, чешский, арабский или русский, имеют больше форм множественного числа, а правила употребления этих форм отличаются от правил английского.

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

_images/plurals.png

Горячие клавиши

Изменено в версии 2.18: Горячие клавиши в версии 2.18 были исправлены, чтобы они с меньшей вероятностью конфликтовали с клавишами по умолчанию браузера или системы.

При переводе можно использовать следующие горячие клавиши:

Горячие клавиши

Описание

Alt+Home

Переход к первому переводу в текущем поиске.

Alt+End

Переход к последнему переводу в текущем поиске.

Alt+PageUp или

Ctrl+ or

Alt+ or

Cmd+

Переход к предыдущему переводу в текущем поиске.

Alt+PageDown или

Ctrl+ или

Alt+ или

Cmd+

Переход к последующему переводу в текущем поиске.

Alt+Enter или

Ctrl+Enter или

Cmd+Enter

Submit current form; this is same as pressing Save and continue while editing translation.

Ctrl+Shift+Enter или

Cmd+Shift+Enter

Снятие с перевода пометки «на правку» и его сохранение.

Ctrl+E или

Cmd+E

Фокусировка на редакторе перевода.

Ctrl+U или

Cmd+U

Фокусировка на редакторе комментариев.

Ctrl+M или

Cmd+M

Показ вкладки Автоматические предложения, смотреть раздел Автоматические предложения.

Ctrl+1Ctrl+9 или

Cmd+1Cmd+9

Копирование из исходной строки кусочка под соответствующим номером.

Ctrl+M+1 to 9 or

Cmd+M+1 to 9

Копирование в текущий перевод машинного перевода с заданным номером.

Ctrl+I+1 to 9 or

Cmd+I+1 to 9

Игнорирование одного элемента в списке неудачных проверок.

Ctrl+J или

Cmd+J

Показ вкладки Соседние строки.

Ctrl+S или

Cmd+S

Фокус на поле поиска.

Ctrl+O или

Cmd+O

Копировать исходную строку.

Ctrl+Y или

Cmd+Y

Toggle the Needs editing checkbox.

Визуальная клавиатура

Чуть выше поля перевода показывается небольшой ряд визуальной клавиатуры. Она может быть полезна для того, чтобы помнить о местной пунктуации (поскольку строка является локальной для каждого языка) или иметь под рукой символы, которые иначе трудно набрать.

Показываемые символы разделены на три категории:

_images/visual-keyboard.png

Контекст перевода

Это контекстное описание содержит инфо, относящуюся к текущей строке.

Атрибуты строки

Такие вещи, как идентификатор сообщения, его контекст (msgctxt) или местоположение в исходном коде.

Снимки экрана

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

Соседние строки

Отображает соседние сообщения из файла перевода. Обычно они также используются в аналогичном контексте и оказываются полезными для поддержания согласованности перевода.

Другие вхождения

В случае, если сообщение появляется в нескольких местах (например, в нескольких компонентах), эта вкладка показывает их все, если в них найдены противоречия (смотрите раздел Противоречия). Вы можете выбрать, какую из строк использовать.

Память переводов

Показывает похожие строки, переведённые в прошлом, смотрите раздел Память переводов.

Глоссарий

Отображает термины из глоссария проекта, используемые в текущем сообщении.

Недавние изменения

Список людей, которые недавно изменили это сообщение, используя Weblate.

Проект

Информация о проекте, например, инструкции для переводчиков, или каталог, или ссылка на строку в репозитории системе контроля версий, используемой проектом.

Если вам нужны прямые ссылки, формат перевода должен это поддерживать.

История переводов

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

Длина переведённой строки

Weblate может ограничивать длину перевода несколькими способами, чтобы гарантировать, что переведённая строка не будет слишком длинной:

  • По умолчанию установлена ограничение в соответствии с которым перевод может быть не более чем в десять раз длиннее исходной строки. Его можно отключить с помощью параметра LIMIT_TRANSLATION_LENGTH_BY_SOURCE_LENGTH. Если вы упёрлись в это ограничение, то это может быть вызвано тем, что одноязычный перевод ошибочно сконфигурирован как двуязычный, в результате чего Weblate считает, что исходной строкой является ключ перевода, а не собственно исходная строка. Дополнительную информацию смотрите в разделе Двуязычные и одноязычные форматы.

  • Максимальная длина в символах, определяемая в файле перевода или флагом, смотрите раздел Максимальная длина перевода.

  • Максимальный отрисовываемый размер текста в пикселях, определяемый флагами, смотрите раздел Максимальный размер перевода.

Автоматические предложения

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

См.также

Список поддерживаемых инструментов можно найти в разделе Машинный перевод.

Автоматический перевод

Для автоматического начального перевода вашего проекта на основе внешних источников вы можете использовать Автоматический перевод, который доступен в меню Инструменты для определённой пары компонента и языка:

_images/automatic-translation.png

Возможны два режима работы этого инструмента:

  • Использование в качестве источника для переводов других компонентов Weblate.

  • Использование выбранных сервисов машинного перевода с переводами выше определённого порога качества.

Вы также можете выбрать, какие строки должны быть переведены автоматически.

Предупреждение

Имейте в виду, что если использовать широкие фильтры, вроде фильтра Все строки, это приведёт к перезаписи существующих переводов.

Инструмент полезен в ряде ситуаций, например, при объединении переводов различных компонентов (к примеру, приложения его веб-сайта) или при начальном переводе нового компонента с использованием существующих переводов (памяти переводов).

The automatically translated strings are labelled by Automatically translated.

Ограничение частоты запросов

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

Ограничения по умолчанию и точная настройка описаны в руководстве по администрированию, смотреть раздел Ограничение частоты запросов.

Поиск и замена

Для эффективного изменения какого-то термина или для производства какого-либо массового исправления в строках, ваш нужен Поиск и замена — Он расположен в меню Инструменты.

Подсказка

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

Массовая правка

Массовая правка позволяет выполнять операцию одновременно с несколькими строками. Вы определяете строки путём их поиска и задаёте, что нужно сделать для совпадающих строк. Поддерживаются следующие операции:

Подсказка

Этот инструмент называется Массовая правка и доступен он из меню Инструменты проекта, компонента или перевода.

См.также

Bulk edit add-on

Просмотр в виде матрицы

Для эффективного сравнения разных языков можно использовать матричное представление. Он доступен на каждой странице компонента в меню Инструменты. Сначала выберите все языки, которые вы хотите сравнить, и подтвердите свой выбор, после чего вы можете нажать на любой перевод, чтобы быстро открыть и отредактировать его.

Матричный вид также является очень хорошей отправной точкой для поиска недостающих переводов на разных языках и их быстрого добавления из одного вида.

Дзен-режим

Дзен-редактор можно включить, нажав на кнопку Дзен справа вверху во время перевода компонента. Он упрощает компоновку и удаляет дополнительные элементы пользовательского интерфейса, такие как Соседние строки или Глоссарий.

Вы можете выбрать Дзен-редактор в качестве редактора по умолчанию, используя вкладку Настройки в вашем Профиль пользователя. Здесь вы также можете выбрать, как перечислять переводы: сверху вниз или сбоку, в зависимости от ваших личных предпочтений.

Скачивание и загрузка переводов

Вы можете экспортировать файлы из перевода, внести в них изменения и снова их импортировать. Это позволяет поработать над переводом в автономном режиме, а затем влить изменения обратно в существующий перевод. Это работает, даже если существующий перевод за это время был изменён.

Примечание

Доступные параметры могут быть ограничены настройками управления доступа.

Скачивание переводов

Из панели проекта или компонента переводимые файлы можно загрузить в меню файлов.

Первый вариант - загрузить файл в исходном формате в том виде, в котором он хранится в репозиторие. В этом случае все изменения в переводе коммитятся, и получается актуальный файл без каких-либо преобразований.

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

  • gettext (PO)

  • XLIFF с расширениями gettext

  • XLIFF 1.1

  • TermBase eXchange

  • eXchange памяти переводов

  • gettext MO (доступно только при переводе с использованием gettext PO)

  • CSV

  • Excel Open XML

  • JSON (доступно только для одноязычных переводов)

  • Ресурс строк Android (доступен только для одноязычных переводов)

  • Строки iOS (доступно только для одноязычных переводов)

Подсказка

Содержимое, доступное в преобразованных файлах, отличается в зависимости от особенностей формата файла, вы можете найти обзор в Возможности типов переводов.

_images/file-download.png

Загрузка переводов

После того, как вы внесли в перевод свои изменения, воспользуйтесь пунктом Загрузить перевод меню Файлы.

_images/file-upload.png

Поддерживаемые форматы файлов

Можно загрузить любой файл в поддерживаемом формате, но всё же рекомендуется использовать тот же самый формат файла, который используется для перевода, в противном случае некоторые возможности могут быть перенесены неправильно.

Способы импорта

При загрузке файлов перевода вы можете выбирать из следующих вариантов:

Добавить как перевод (translate)

Imported strings are added as translations to existing strings. This is the most common usecase, and the default behavior.

Используются только переводы из загруженного файла и никакого дополнительного содержания.

Добавить как предложение (suggest)

Imported strings are added as suggestions, do this when you want to have your uploaded strings reviewed.

Используются только переводы из загруженного файла и никакого дополнительного содержания.

Добавить перевод как «На правку» (fuzzy)

Imported strings are added as translations needing edit. This can be useful when you want translations to be used, but also reviewed.

Используются только переводы из загруженного файла и никакого дополнительного содержания.

Заменить существующий файл перевода (replace)

Существующий файл заменяется новым содержимым. Это может привести к потере существующих переводов, используйте этот вариант с осторожностью.

Обновить исходные строки (source)

Обновляет исходные строки в двуязычном файле перевода. Это поведение похоже на то, что делает надстройка Обновлять PO-файлы до соответствия POT (msgmerge).

Этот вариант поддерживается только для некоторых форматов файлов.

Добавить новые строки (add)

Добавляет новые строки для перевода, пропуская те, что уже существуют.

Если вы хотите и добавить новые строки, и обновить существующие переводы, то загрузите файл второй раз в режиме Добавить как перевод.

Этот вариант доступен только если включено управление строками.

Из загруженного файла используются только источник, перевод и ключ (контекст).

Разрешение конфликтов

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

Строки, отмеченные как «На правку»

Также существует параметр, контролирующий то, что делать со строками в импортируемом файле, нуждающимися в редактировании . Такие строки можно обработать одним из трёх следующих способов: «Не импортировать», «Импортировать строки, как отмеченные „На правку“» или «Импортировать как переведённое».

Переопределение авторства

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

Глоссарий

Каждый проект может включать один или несколько глоссариев в качестве краткого обозначения для хранения терминологии. Глоссарий облегчает поддержание последовательности перевода.

Глоссарием для каждого языка можно управлять отдельно, но они хранятся вместе как единый компонент, что помогает администраторам проектов и многоязычным переводчикам поддерживать определённую межъязыковую согласованность. Термины из глоссария, содержащие слова из текущей переведённой строки, отображаются в боковой панели редактора перевода.

Управление глоссариями

Изменено в версии 4.5: Глоссарии теперь являются обычными компонентами перевода, так что вы можете использовать все возможности Weblate при работе с ними: комментировать, сохранять в удалённом репозитории или добавлять пояснения.

Можно использовать любой компонент в качестве глоссария, включив соответствующий параметр. Вы можете создать несколько глоссариев для одного проекта.

Пустой глоссарий для проекта создаётся автоматически вместе с самим проектом. Глоссарии используются совместно всеми компонентами одного проекта, а также, по желанию, вы можете использовать его совместно с другими проектами, сделав его разделяемым компонентом из соответствующего компонента глоссария.

Компонент-глоссарий выглядит также как и любой другой компонент в Weblate с добавлением цветного ярлыка:

_images/glossary-component.png

Также вы можете воспользоваться навигацией по всем терминам глоссария:

_images/glossary-browse.png

или редактировать их как любые переводы.

Термины глоссария

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

_images/glossary-tools.png

Непереводимые термины

Добавлено в версии 4.5.

Пометка определённых переводов терминов глоссария только для чтения путём массовой правки, ввода флага через ИнструментыПометить «только для чтения» означает, что они не могут быть переведены. Используйте это для названий брендов или других терминов, которые не должны быть изменены в других языках. Такие термины визуально выделяются в боковой панели глоссария.

Нежелательные переводы

Добавлено в версии 4.5.

Пометка определённых переводов терминов глоссария как нежелательный, путём массовой правки, ввода флага через ИнструментыПометить как «Нежелательный перевод» означает, что они не должны использоваться. Используйте это для уточнения перевода, когда некоторые слова неоднозначны или могут иметь неожиданное значение.

Терминология

Добавлено в версии 4.5.

Пометка определённых переводов терминов глоссария как терминология путём массового редактирования, ввода флага или через ИнструментыПометить как «терминологию» добавляет записи для них во все языки глоссария. Используйте это для важных терминов, которые должны быть хорошо продуманы и сохранять последовательное значение на всех языках.

Варианты

Варианты - это общий способ группировки строк. При переводе все варианты терминов перечисляются в боковой панели глоссария.

Подсказка

Вы можете использовать это для добавления сокращений или более коротких выражений для термина.

См.также

Варианты строк

Проверки и исправления

Проверки качества помогают выявить распространённые ошибки переводчиков, что гарантирует хорошее состояние перевода. В случае ложно-положительных срабатываний проверки могут быть проигнорированы.

После отправки перевода с неудачной проверкой, она сразу же показывается пользователю:

_images/checks.png

Автоматические исправления

В дополнение к проверкам качества, Weblate может автоматически исправлять некоторые распространённые ошибки в переведённых строках. Используйте эту возможность с осторожностью, чтобы не допустить добавления новых ошибок.

См.также

AUTOFIX_LIST

Проверки качества

Weblate использует широкий спектр проверок качества строк. В следующем разделе они все описываются более подробно. Также существуют проверки, специфичные для конкретных языков. Если какая-то проверка срабатывает ошибочно, пожалуйста, отправьте сообщение об ошибке.

Проверки перевода

Выполняется при каждом изменении перевода, помогая переводчикам поддерживать высокое качество перевода.

BBCode-разметка

Сводка

BBCode в переводе не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.markup.BBCodeCheck

Флаг для игнорирования

ignore-bbcode

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

Эта проверка гарантирует, что они также будут присутствовать в переводе.

Примечание

На данный момент метод обнаружения тегов BBCode достаточно прост, поэтому данная проверка может привести к ложным срабатываниям.

Повторяющиеся слова

Добавлено в версии 4.1.

Сводка

Одно и то же слово повторяется в тексте дважды подряд:

Область

переведённые строки

Класс проверки

weblate.checks.duplicate.DuplicateCheck

Флаг для игнорирования

ignore-duplicate

Проверяет, что в переводе не встречаются последовательные дубликаты слова. Обычно это указывает на ошибку в переводе.

Подсказка

Эта проверка включает в себя правила, специфичные для конкретных языков, чтобы избежать ложных срабатываний. В случае ложного срабатывания этой проверки в вашем случае, сообщите нам об этом. Смотрите раздел Сообщение о проблемах в Weblate’е.

Не соответствует глоссарию

Добавлено в версии 4.5.

Сводка

Этот перевод не содержит термин, указанный в глоссарии.

Область

переведённые строки

Класс проверки

weblate.checks.glossary.GlossaryCheck

Флаг для включения

check-glossary

Флаг для игнорирования

ignore-check-glossary

Эту проверку можно включить с помощью флага check-glossary (смотреть раздел Настройка поведения с помощью флагов). Но прежде чем делать это учтите следующее:

  • Эта проверка использует строгое сравнение строк, ожидается, что глоссарий будет содержать термины со всеми их вариантами.

  • Проверка каждой строки на соответствие словарю — дорогое удовольствие: это значительно замедлит все операции Weblate, которые подразумевают запуск проверок, включая импорт строк или переводов.

Двойной пробел

Сводка

Перевод содержит двойной пробел

Область

переведённые строки

Класс проверки

weblate.checks.chars.DoubleSpaceCheck

Флаг для игнорирования

ignore-double-space

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

Проверка возвращает ложь, если в исходной строке найден двойной пробел, что означает, что двойной пробел был внесён в неё преднамеренно.

Форматированные строки

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

Weblate поддерживает проверку строк формата на нескольких языках. Проверка не включается автоматически, только если строка соответствующим образом помечена (например, флагом c-format для C-формата). Gettext добавляет эту разметку автоматически, но для других форматов файлов или если ваши PO-файлы не сгенерированы программой xgettext вам, вероятно, придётся добавить её вручную.

Её можно добавлять как индивидуально в каждую единицу перевода (смотрите раздел Дополнительная информация об исходных строках), так и в конфигурации компонента. Определение формата для компонента целиком проще, но может привести к ложным срабатываниям, если строка не интерпретируется как строка формата, но при этом внутри неё используется синтаксис строки формата.

Подсказка

В случае, если конкретная проверка формата в Weblate отсутствует, вы можете использовать общую проверку Символы-заполнители.

Помимо проверки, эти флаги также включают подсветку строк формата, чтобы их было легко вставлять в перевод:

_images/format-highlight.png
Интерполяционная строка AngularJS
Сводка

Интерполяционные строки AngularJS не соответствуют источнику

Область

переведённые строки

Класс проверки

weblate.checks.angularjs.AngularJSInterpolationCheck

Флаг для включения

angularjs-format

Флаг для игнорирования

ignore-angularjs-format

Пример именованной строки формата

Your balance is {{amount}} {{ currency }}

C-формат
Сводка

Строка в формате C не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.format.CFormatCheck

Флаг для включения

c-format

Флаг для игнорирования

ignore-c-format

Пример простой строки формата

There are %d apples

Пример позиционной строки формата

Your balance is %1$d %2$s

C#-формат
Сводка

Строка в формате C# не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.format.CSharpFormatCheck

Флаг для включения

c-sharp-format

Флаг для игнорирования

ignore-c-sharp-format

Пример позиционной строки формата

There are {0} apples

Шаблонные литералы ECMAScript
Сводка

Шаблонные литералы ECMAScript не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.format.ESTemplateLiteralsCheck

Флаг для включения

es-format

Флаг для игнорирования

ignore-es-format

Пример интерполяции

There are ${number} apples

Интерполяция i18next

Добавлено в версии 4.0.

Сводка

Интерполяция i18next не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.format.I18NextInterpolationCheck

Флаг для включения

i18next-interpolation

Флаг для игнорирования

ignore-i18next-interpolation

Пример интерполяции

There are {{number}} apples

Пример вложения

There are $t(number) apples

ICU MessageFormat

Добавлено в версии 4.9.

Сводка

Ошибки синтаксиса и/или несоответствия заполнителей в строках ICU MessageFormat.

Область

переведённые строки

Класс проверки

weblate.checks.icu.ICUMessageFormatCheck

Флаг для включения

icu-message-format

Флаг для игнорирования

ignore-icu-message-format

Пример интерполяции

Есть {number, plural, one {одно яблоко} other {# яблок}}.

Эта проверка поддерживает как чистые сообщения ICU MessageFormat, так и ICU с простыми XML-тегами. Вы можете настроить поведение этой проверки с помощью icu-flags:*, либо включив поддержку XML, либо отключив определённые подпроверки. Например, следующий флаг включает поддержку XML и отключает проверку множественных подсообщений:

xml

Включите поддержку простых XML-тегов. По умолчанию XML-теги анализируются нечётко. Блуждающие символы (Stray) < игнорируются, если они не являются разумной частью тега.

strict-xml

Включите поддержку строгих XML-тегов. Все символы < должны быть экранированы (escape-символами), если они не являются частью тега.

-highlight

Отключите подсветку заполнителей в редакторе.

-require_other

Отключите требования, чтобы вложенные сообщения имели селектор other.

-submessage_selectors

Пропустите проверку соответствия селекторов подсообщений источнику.

-types

Пропустите проверку соответствия типов заполнителей источнику.

-extra

Пропустите проверку того, что в исходной строке отсутствуют заполнители, которых не было в исходной строке.

-missing

Пропустите проверку того, что отсутствуют заполнители, которые присутствовали в исходной строке.

Кроме того, когда strict-xml не включен, но включен xml, вы можете использовать флаг icu-tag-prefix:ПРЕФИКС, чтобы потребовать, чтобы все XML-теги начинались с определённой строки. Например, следующий флаг позволит сопоставлять XML-теги, только если они начинаются с <x::

Это совпадает с <x:link>нажмите сюда</x:link>, но не <strong>сюда</strong>.

Java-формат
Сводка

Строка в формате Java не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.format.JavaFormatCheck

Флаг для включения

java-format

Флаг для игнорирования

ignore-java-format

Пример простой строки формата

There are %d apples

Пример позиционной строки формата

Your balance is %1$d %2$s

Java MessageFormat
Сводка

Строка в формате Java MessageFormat не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.format.JavaMessageFormatCheck

Флаг для включения без кодирования

java-messageformat

Флаг для включения автоопределения

Флаг auto-java-messageformat включает проверку только если в исходной строке содержится строка формата

Флаг для игнорирования

ignore-java-messageformat

Пример позиционной строки формата

There are {0} apples

JavaScript-формат
Сводка

Строка в формате JavaScript не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.format.JavaScriptFormatCheck

Флаг для включения

javascript-format

Флаг для игнорирования

ignore-javascript-format

Пример простой строки формата

There are %d apples

Lua-формат
Сводка

Строка в формате Lua не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.format.LuaFormatCheck

Флаг для включения

lua-format

Флаг для игнорирования

ignore-lua-format

Пример простой строки формата

There are %d apples

Формат Object Pascal
Сводка

Строка в формате Object Pascal не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.format.ObjectPascalFormatCheck

Флаг для включения

object-pascal-format

Флаг для игнорирования

ignore-object-pascal-format

Пример простой строки формата

There are %d apples

Символы-заполнители в процентной нотации

Добавлено в версии 4.0.

Сводка

Символы-заполнители в процентной нотации не соответствуют источнику

Область

переведённые строки

Класс проверки

weblate.checks.format.PercentPlaceholdersCheck

Флаг для включения

percent-placeholders

Флаг для игнорирования

ignore-percent-placeholders

Пример простой строки формата

There are %number% apples

Perl-формат
Сводка

Строка в формате Perl’а не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.format.PerlFormatCheck

Флаг для включения

perl-format

Флаг для игнорирования

ignore-perl-format

Пример простой строки формата

There are %d apples

Пример позиционной строки формата

Your balance is %1$d %2$s

PHP- формат
Сводка

Строка в формате PHP не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.format.PHPFormatCheck

Флаг для включения

php-format

Флаг для игнорирования

ignore-php-format

Пример простой строки формата

There are %d apples

Пример позиционной строки формата

Your balance is %1$d %2$s

Python-формат: фигурные скобки
Сводка

Форматирование фигурных скобок в Python не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.format.PythonBraceFormatCheck

Флаг для включения

python-brace-format

Флаг для игнорирования

ignore-python-brace-format

Простая строка формата

There are {} apples

Пример именованной строки формата

Your balance is {amount} {currency}

Python-формат
Сводка

Строка в формате Python’а не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.format.PythonFormatCheck

Флаг для включения

python-format

Флаг для игнорирования

ignore-python-format

Простая строка формата

There are %d apples

Пример именованной строки формата

Ваш баланс %(число)d %(валюта)s

Qt-формат
Сводка

Строка в формате Qt не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.qt.QtFormatCheck

Флаг для включения

qt-format

Флаг для игнорирования

ignore-qt-format

Пример позиционной строки формата

There are %1 apples

Формат множественного числа Qt
Сводка

Строка в формате множественного числа Qt не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.qt.QtPluralCheck

Флаг для включения

qt-plural-format

Флаг для игнорирования

ignore-qt-plural-format

Пример строки формата множественного числа

There are %Ln apple(s)

Ruby-формат
Сводка

Строка формата Ruby не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.ruby.RubyFormatCheck

Флаг для включения

ruby-format

Флаг для игнорирования

ignore-ruby-format

Пример простой строки формата

There are %d apples

Пример позиционной строки формата

Your balance is %1$f %2$s

Пример именованной строки формата

Your balance is %+.2<amount>f %<currency>s

Именованная шаблонная строка

Your balance is %{amount} %{currency}

Формат схемы
Сводка

Строка формата схемы не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.format.SchemeFormatCheck

Флаг для включения

scheme-format

Флаг для игнорирования

ignore-scheme-format

Пример простой строки формата

There are ~d apples

Форматирование Vue I18n
Сводка

Форматирование Vue I18n не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.format.VueFormattingCheck

Флаг для включения

vue-format

Флаг для игнорирования

ignore-vue-format

Именованная строка формата

There are {count} apples

Форматирование локализации Rails

There are %{count} apples

Связанные сообщения локализации

@:message.dio @:message.the_world!

Уже переведено

Сводка

Эта строка уже переводилась

Область

все строки

Класс проверки

weblate.checks.consistency.TranslatedCheck

Флаг для игнорирования

ignore-translated

Означает, что строка уже переведена. Это может произойти, если переводы откатывались в системе контроля версий или иным образом терялись.

Противоречия

Сводка

Эта строка имеет более одного перевода в этом проекте, либо же в некоторых компонентах она не переведена.

Область

все строки

Класс проверки

weblate.checks.consistency.ConsistencyCheck

Флаг для игнорирования

ignore-inconsistent

Weblate проверяет переводы одинаковых строк по всем переводам в проекте, чтобы помочь вам поддерживать переводы согласованными.

Проверка срабатывает, когда в проекте обнаруживаются различные переводы одной и той же строки. Также это может привести к несогласованности в отображаемых проверках. Другие переводы этой строки можно найти на вкладке Другие вхождения.

Эта проверка будет применена ко всем компонентам проекта, содержащим Разрешить распространение перевода.

Подсказка

По соображениям производительности проверка может не найти все несоответствия, она ограничивает количество совпадений.

Примечание

This check also fires in case the string is translated in one component and not in another. It can be used as a quick way to manually handle strings which are untranslated in some components just by clicking on the Use this translation button displayed on each line in the Other occurrences tab.

You can use Автоматический перевод add-on to automate translating of newly added strings which are already translated in another component.

Используется кашида

Добавлено в версии 3.5.

Сводка

Декоративные буквы кашиды не должны использоваться

Область

переведённые строки

Класс проверки

weblate.checks.chars.KashidaCheck

Флаг для игнорирования

ignore-kashida

Декоративные буквы кашида не должны использоваться в переводе. Также они известны как татвиль.

Сноски Markdown

Добавлено в версии 3.5.

Сводка

Ссылки на сноски Markdown не соответствуют источнику

Область

переведённые строки

Класс проверки

weblate.checks.markup.MarkdownRefLinkCheck

Флаг для включения

md-text

Флаг для игнорирования

ignore-md-reflink

Ссылки на сноски Markdown не соответствуют источнику.

Синтаксис Markdown

Добавлено в версии 3.5.

Сводка

Синтаксис Markdown-разметки не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.markup.MarkdownSyntaxCheck

Флаг для включения

md-text

Флаг для игнорирования

ignore-md-syntax

Синтаксис Markdown-разметки не соответствует источнику

Максимальная длина перевода

Сводка

Перевод не должен превышать заданную длину

Область

переведённые строки

Класс проверки

weblate.checks.chars.MaxLengthCheck

Флаг для включения

max-length

Флаг для игнорирования

ignore-max-length

Проверяет, что переводы имеют приемлемую длину, чтобы укладываться в доступное пространство. Эта проверка проверяет только длину символов перевода.

В отличие от других проверок, флаг для этой проверки должен быть установлен в виде пары ключ:значение, например, max-length:100.

Подсказка

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

Также для расширения позиций-заполнителей перед проверкой строки может быть полезен флаг replacements:.

Если также используется флаг xml-text, при подсчёте длины игнорируются XML-теги.

Максимальный размер перевода

Сводка

Отрисованный текст перевода не должен превышать заданный размер

Область

переведённые строки

Класс проверки

weblate.checks.render.MaxSizeCheck

Флаг для включения

max-size

Флаг для игнорирования

ignore-max-size

Добавлено в версии 3.7.

Отрисованный текст перевода не должен превышать заданный размер. Эта проверка отрисовывает текст с переносом по строкам и проверяет, вписывается ли он в заданные границы.

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

Также директивами font-* вы можете настроить используемый шрифт (смотрите раздел Настройка поведения с помощью флагов), например, следующие флаги перевода говорят, что текст, отрисовываемый шрифтом ubuntu размера 22, должен вписаться в две строки и 500 пикселей:

max-size:500:2, font-family:ubuntu, font-size:22

Подсказка

Возможно, вы захотите установить директивы font-* в настройках компонента, чтобы для всех строк компонента был настроен один и тот же шрифт. В случае, если вам нужно будет настроить их для отдельной строки, вы сможете переопределить их значения для этой строки.

Также для расширения позиций-заполнителей перед проверкой строки может быть полезен флаг replacements:.

Если также используется флаг xml-text, при подсчёте длины игнорируются XML-теги.

Несовпадающие \n

Сводка

Количество \n в переводе не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.chars.EscapedNewlineCountingCheck

Флаг для игнорирования

ignore-escaped-newline

Экранированные символы новой строки обычно важны при форматировании вывода программы. Проверка срабатывает, если количество символов \n в переводе не совпадает с их количеством в исходной строке.

Несовпадающие двоеточия

Сводка

Источник и перевод не заканчиваются оба двоеточием

Область

переведённые строки

Класс проверки

weblate.checks.chars.EndColonCheck

Флаг для игнорирования

ignore-end-colon

Проверяет, что двоеточия в исходной строке и в переводе одинаковы. Также проверяется наличие двоеточий для тех языков, в которых они не используются (китайский или японский).

Несовпадающие многоточия

Сводка

Источник и перевод не заканчиваются оба многоточием

Область

переведённые строки

Класс проверки

weblate.checks.chars.EndEllipsisCheck

Флаг для игнорирования

ignore-end-ellipsis

Проверяет, что конечные многоточия в исходной строке и в переводе одинаковы. Эта проверка проверяет только настоящие многоточия (символы ), но не три подряд идущих точки (...).

Как правило, на печати многоточие отрисовывается лучше, чем три подряд стоящих точки и лучше звучит при преобразовании текста в речь.

Несовпадающие восклицательные знаки

Сводка

Источник и перевод не заканчиваются оба восклицательным знаком

Область

переведённые строки

Класс проверки

weblate.checks.chars.EndExclamationCheck

Флаг для игнорирования

ignore-end-exclamation

Проверяет, что восклицательные знаки в исходной строке и в переводе одинаковы. Также проверяется наличие восклицательных знаков для тех языков, в которых они не используются (китайский, японский, корейский, армянский, лимбу, бирманский или нко).

Несовпадающие точки

Сводка

Источник и перевод не заканчиваются оба точкой

Область

переведённые строки

Класс проверки

weblate.checks.chars.EndStopCheck

Флаг для игнорирования

ignore-end-stop

Проверяет, что точки в исходной строке и в переводе одинаковы. Также проверяется наличие точек для тех языков, в которых они не используются (китайский, японский, деванагари или урду).

Несовпадающие вопросительные знаки

Сводка

Источник и перевод не заканчиваются оба вопросительным знаком

Область

переведённые строки

Класс проверки

weblate.checks.chars.EndQuestionCheck

Флаг для игнорирования

ignore-end-question

Проверяет, что вопросительные знаки в исходной строке и в переводе одинаковы. Также проверяется наличие вопросительных знаков для тех языков, в которых они не используются (армянский, арабский, китайский, корейский, японский, эфиопский, ваи или коптский).

Несовпадающие точки с запятой

Сводка

Источник и перевод не заканчиваются оба точкой с запятой

Область

переведённые строки

Класс проверки

weblate.checks.chars.EndSemicolonCheck

Флаг для игнорирования

ignore-end-semicolon

Checks that semicolons at the end of sentences are replicated between both source and translation.

Несовпадающие переводы строк

Сводка

Количество символов новой строки в переводе не соответствует источнику

Область

переведённые строки

Класс проверки

weblate.checks.chars.NewLineCountCheck

Флаг для игнорирования

ignore-newline-count

Символы новой строки обычно важны при форматировании вывода программы. Проверка срабатывает, если количество литералов``n`` в переводе не совпадает с их количеством в исходной строке.

Нет форм множественного числа

Сводка

Некоторые формы множественного числа не переведены

Область

переведённые строки

Класс проверки

weblate.checks.consistency.PluralsCheck

Флаг для игнорирования

ignore-plurals

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

Отсутствие перевода в форме множественного числа в некоторых случаях приводит к тому, что при использовании формы множественного числа ничего не будет отображаться.

Символы-заполнители

Добавлено в версии 3.9.

Сводка

В переводе пропущены некоторые символы-заполнители

Область

переведённые строки

Класс проверки

weblate.checks.placeholders.PlaceholderCheck

Флаг для включения

placeholders

Флаг для игнорирования

ignore-placeholders

Изменено в версии 4.3: В качестве заполнителя вы можете использовать регулярное выражение.

В переводе пропущены некоторые символы-заполнители. Эти символы либо извлекаются из файла перевода, либо определяются вручную с помощью флага placeholders; если их несколько, они разделяются двоеточием, а строки с пробелами могут быть заключены в кавычки:

placeholders:$URL$:$TARGET$:"some long text"

Если у вас есть регулярный синтаксис для имён заполнителей, то вы можете применить регулярные выражения:

placeholders:r"%[^% ]%"

Пробелы и пунктуация

Добавлено в версии 3.9.

Сводка

Отсутствует неразрывный пробел перед знаком двойной пунктуации

Область

переведённые строки

Класс проверки

weblate.checks.chars.PunctuationSpacingCheck

Флаг для игнорирования

ignore-punctuation-spacing

Проверяет наличие неразрывного пробела перед знаком двойной пунктуации (восклицательным знаком, вопросительным знаком, точкой с запятой или двоеточием). Это правило используется только в некоторых избранных языках, вроде французского или бретонского, где по типографским правилам обязателен пробел перед знаком двойной пунктуации.

Регулярное выражение

Добавлено в версии 3.9.

Сводка

Перевод не соответствует регулярному выражению

Область

переведённые строки

Класс проверки

weblate.checks.placeholders.RegexCheck

Флаг для включения

regex

Флаг для игнорирования

ignore-regex

Перевод не соответствует регулярному выражению. Это выражение либо извлекается из файла перевода, либо определяется вручную с помощью флага regex:

regex:^foo|bar$

Одинаковые формы множественного числа

Сводка

Некоторые формы множественного числа переведены одинаково

Область

переведённые строки

Класс проверки

weblate.checks.consistency.SamePluralsCheck

Флаг для игнорирования

ignore-same-plurals

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

Пустая строка в начале

Сводка

Источник и перевод не начинаются оба с новой строки

Область

переведённые строки

Класс проверки

weblate.checks.chars.BeginNewlineCheck

Флаг для игнорирования

ignore-begin-newline

Обычно символы новой строки в исходных текстах появляются по уважительной причине, их пропуск или добавление могут привести к проблемам с форматированием при использовании переведённого текста.

Пробелы в начале

Сводка

Источник и перевод не начинаются оба одинаковым числом пробелов

Область

переведённые строки

Класс проверки

weblate.checks.chars.BeginSpaceCheck

Флаг для игнорирования

ignore-begin-space

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

Пустая строка в конце

Сводка

Источник и перевод не заканчиваются оба новой строкой

Область

переведённые строки

Класс проверки

weblate.checks.chars.EndNewlineCheck

Флаг для игнорирования

ignore-end-newline

Обычно символы новой строки в исходных текстах появляются по уважительной причине, их пропуск или добавление могут привести к проблемам с форматированием при использовании переведённого текста.

Пробелы в конце

Сводка

Источник и перевод не заканчиваются оба пробелом

Область

переведённые строки

Класс проверки

weblate.checks.chars.EndSpaceCheck

Флаг для игнорирования

ignore-end-space

Проверяет, что количество конечных пробелов в исходной строке и в переводе одинаково.

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

Перевод без изменения

Сводка

Источник и перевод тождественны

Область

переведённые строки

Класс проверки

weblate.checks.same.SameCheck

Флаг для игнорирования

ignore-same

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

Эта проверка может помочь найти ошибочно не переведённые строки.

Поведение этой проверки по умолчанию заключается в исключении из проверки слов из встроенного чёрного списка. Это такие слова, которые зачастую не переводятся. Это полезно для того, чтобы избежать ложных срабатываний на коротких строках, которые состоят только из одного слова, одинакового в нескольких языках. Этот чёрный список можно отключить, добавив в строку или в компонент флаг strict-same.

Небезопасный HTML-код

Добавлено в версии 3.9.

Сводка

Перевод использует небезопасную HTML-разметку

Область

переведённые строки

Класс проверки

weblate.checks.markup.SafeHTMLCheck

Флаг для включения

safe-html

Флаг для игнорирования

ignore-safe-html

Перевод использует небезопасную HTML-разметку. Эта проверка должна быть включена с помощью флага safe-html (смотрите раздел Настройка поведения с помощью флагов). Также имеется соответствующий автоматический исправляльщик, который может автоматически почистить разметку.

Подсказка

Если используется флаг md-text, ссылки в стиле Markdown также разрешены.

См.также

Проверка HTML осуществляется с помощью разработанной Mozilla библиотеки `Bleach <https://bleach.readthedocs.io/`_.

URL-адреса

Добавлено в версии 3.5.

Сводка

Перевод не содержит URL

Область

переведённые строки

Класс проверки

weblate.checks.markup.URLCheck

Флаг для включения

url

Флаг для игнорирования

ignore-url

Перевод не содержит URL-адрес. Эта проверка срабатывает только в том случае, если единица перевода помечена как содержащая URL-адрес. В этом случае перевод должен быть корректным URL-адресом.

XML-разметка

Сводка

XML-теги в переводе не соответствуют источнику

Область

переведённые строки

Класс проверки

weblate.checks.markup.XMLTagsCheck

Флаг для игнорирования

ignore-xml-tags

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

Проверяет, что XML-теги в исходной строке и в переводе одинаковы.

Примечание

Эта проверка отключается флагом safe-html, так как HTML-чистка, выполняемая ею, может привести к HTML-разметке, которая не является допустимой XML.

Синтаксис XML

Добавлено в версии 2.8.

Сводка

Перевод не является корректным XML

Область

переведённые строки

Класс проверки

weblate.checks.markup.XMLValidityCheck

Флаг для игнорирования

ignore-xml-invalid

Разметка XML некорректна.

Примечание

Эта проверка отключается флагом safe-html, так как HTML-чистка, выполняемая ею, может привести к HTML-разметке, которая не является допустимой XML.

Пробел нулевой ширины

Сводка

Перевод содержит лишние символы пробела нулевой ширины

Область

переведённые строки

Класс проверки

weblate.checks.chars.ZeroWidthSpaceCheck

Флаг для игнорирования

ignore-zero-width-space

Символы пробела нулевой ширины (<U+200B>) используются для разбиения сообщений по словам (переноса по словам).

Поскольку обычно они вставляются по ошибке, эта проверка срабатывает на их присутствие в переводе. В некоторых программах при использовании этого символа могут возникнуть проблемы.

Проверки для исходных строк

Проверки для исходных строк могут помочь разработчикам улучшить качество исходных строк.

Многоточие

Сводка

В этой строке используются три точки (…) вместо символа многоточия (…)

Область

исходные строки

Класс проверки

weblate.checks.source.EllipsisCheck

Флаг для игнорирования

ignore-ellipsis

Эта проверка срабатывает, когда в строке используются три подряд стоящих точки (...), когда вместо них должен использоваться символ многоточия ().

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

Синтаксис ICU MessageFormat

Добавлено в версии 4.9.

Сводка

Синтаксические ошибки в строках ICU MessageFormat.

Область

исходные строки

Класс проверки

weblate.checks.icu.ICUSourceCheck

Флаг для включения

icu-message-format

Флаг для игнорирования

ignore-icu-message-format

См.также

ICU MessageFormat

Давно не переводилась

Добавлено в версии 4.1.

Сводка

Строка давно не переводилась

Область

исходные строки

Класс проверки

weblate.checks.source.LongUntranslatedCheck

Флаг для игнорирования

ignore-long-untranslated

Если строка долго не переводилась, это может указывать на проблему в исходной строке, затрудняющую её перевод.

Множество неудачных проверок

Сводка

Переводы на несколько языков имеют неудачные проверки

Область

исходные строки

Класс проверки

weblate.checks.source.MultipleFailingCheck

Флаг для игнорирования

ignore-multiple-failures

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

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

Несколько переменных без названий

Добавлено в версии 4.1.

Сводка

Строка содержит несколько неименованных переменных, что не позволяет переводчикам их переупорядочивать

Область

исходные строки

Класс проверки

weblate.checks.format.MultipleUnnamedFormatsCheck

Флаг для игнорирования

ignore-unnamed-format

Строка содержит несколько неименованных переменных, что не позволяет переводчикам их переупорядочивать.

Рассмотрите возможность использования именованных переменных вместо неименованных, чтобы позволить переводчикам менять их порядок в переводимом тексте.

Формы единственного числа

Сводка

Строка содержит множественное число, но не использует формы множественного числа

Область

исходные строки

Класс проверки

weblate.checks.source.OptionalPluralCheck

Флаг для игнорирования

ignore-optional-plural

Строка содержит множественное число, но не использует формы множественного числа. В случае, если ваша система перевода его поддерживает, вы должны использовать вариант, учитывающий множественное число.

Например, при использовании Python’а и Gettext’а это может выглядеть так:

from gettext import ngettext

print(ngettext("Selected %d file", "Selected %d files", files) % files)

Поиск

Добавлено в версии 3.9.

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

When no field is defined, the lookup happens on source, target, and context strings.

_images/search.png

Поля

source:ТЕКСТ

Регистронезависимый поиск по исходной строке.

target:ТЕКСТ

Регистронезависимый поиск по целевой строке.

context:ТЕКСТ

Регистронезависимый поиск по строке контекста.

key:ТЕКСТ

Регистронезависимый поиск по строке ключа.

note:ТЕКСТ

Регистронезависимый поиск по описанию исходной строки.

location:ТЕКСТ

Регистронезависимый поиск по строке местоположения.

priority:ЧИСЛО

Приоритет строки.

added:ДАТА_И_ВРЕМЯ

Метка времени, когда строка была добавлена в Weblate.

state:ТЕКСТ

Поиск по состоянию (approved, translated, needs-editing, empty, read-only), поддерживает Операторы поиска по полям.

pending:ЛОГИЧЕСКОЕ_ЗНАЧЕНИЕ

Строка, ожидающая сброса в систему контроля версий.

has:ТЕКСТ

Search for string having attributes - plural, context, suggestion, comment, check, dismissed-check, translation, variant, screenshot, flags, explanation, glossary, note, label.

is:ТЕКСТ

Поиск по состояниям строки (pending, translated, untranslated).

language:ТЕКСТ

Целевой язык строки.

component:ТЕКСТ

Компонентный поиск без учёта регистра слов или имён, смотреть раздел Плашка компонента и Название компонента.

project:ТЕКСТ

Плашка проекта, смотреть раздел URL-плашка.

changed_by:ТЕКСТ

Строка была изменена автором с указанным именем пользователя.

changed:ДАТА_И_ВРЕМЯ

Дата изменения содержимого строки, поддерживает операторы поиска по полям.

change_time:ДАТА_И_ВРЕМЯ

Дата изменения строки, поддерживает операторы поиска по полям; в отличии от changed это также включает и те события, которые не изменяют само содержимое строки, а также вы можете фильтровать события по конкретным действиям с помощью change_action.

change_action:ТЕКСТ

Фильтр по действиям, вызвавшим изменения, полезно для использования совместно с change_time. Принимает название действия на английском или в кавычках и с пробелами или в нижнем регистре и с подчёркиваниями заменёнными на дефисы. Смотрите примеры в разделе «Поиск по изменениям».

check:ТЕКСТ

Строка имеет неудачные проверки.

dismissed_check:ТЕКСТ

Строка имеет пропущенные проверки.

comment:ТЕКСТ

Поиск в пользовательских комментариях.

resolved_comment:TEXT

Search in resolved comments.

comment_author:ТЕКСТ

Фильтр по авторским комментариям.

suggestion:ТЕКСТ

Поиск в предложениях.

suggestion_author:ТЕКСТ

Фильтр по автору предложения.

explanation:ТЕКСТ

Поиск в пояснениях.

label:TEXT

Поиск в метках.

screenshot:TEXT

Search in screenshots.

Логические операторы

Вы можете комбинировать поисковые запросы, используя для формирования сложных запросов операторы AND, OR и NOT и круглые скобки. Например: state:translated AND (source:hello OR source:bar)

Операторы поиска по полям

Вы можете указать операторы, диапазоны или частичный поиск по дате или числам:

state:>=translated

Состояние translated или лучше (approved).

changed:2019

Изменено в 2019 году.

changed:[2019-03-01 to 2019-04-01]

Изменено между двумя указанными датами.

Оператор точного поиска

С помощью оператора = вы можете сделать запрос на точное совпадение различных строковых полей. Например, для нахождения всех исходных строк, точно равных строке hello world, используйте запрос source:="hello world". При поиске односложных выражений кавычки можно опустить. Например, для нахождения всех исходных строк, точно равных строке hello, вы можете использовать запрос source:=hello.

Поиск по изменениям

Добавлено в версии 4.4.

Поиск по истории событий можно сделать с помощью операторов change_action и change_time.

Например, поиск по строкам, отмеченным для правки (marked for edit) в 2018 году, можно сделать с помощью: change_time:2018 AND change_action:marked-for-edit или change_time:2018 AND change_action:"Marked for edit".

Регулярные выражения

Везде, где принимается текст, вы также можете задать и регулярное выражение в виде r"выражение".

Например, для поиска по исходным строкам, содержащим любую цифру от 2 до 5, используйте запрос source:r"[2-5]".

Предопределённые запросы

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

_images/query-dropdown.png

Упорядочивание результатов

Существует множество вариантов сортировки строк в соответствии с вашими потребностями:

_images/query-sort.png

Рабочие процессы перевода

Использование Weblate — это процесс, который приближает пользователей к вам путём приближения вас к вашим переводчикам. Вы сами решаете, какой объём его возможностей вы хотите использовать.

Ниже приведён не полный список способов настройки Weblate. Вы можете основывать другие рабочие процессы на перечисленных здесь самых обычных примерах.

Доступ к переводу

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

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

Состояния перевода

Каждая переведённая строка может находиться в одном из следующих состояний:

Не переведено

Перевод пуст, он может как храниться в файле, так и не храниться в нём, в зависимости от формата файла.

На правку

Перевод нуждается в правке; обычно это результат изменения исходной строки, неточного соответствия или действий переводчика. Перевод хранится в файле, в зависимости от формата файла он может быть помечен как «На правку» (например, ему будет присвоен флаг fuzzy (неточный) в Gettext-файле).

Ожидает рецензирования

Перевод выполнен, но ещё не проверен. Он хранится в файле как готовый перевод.

Одобрено

Перевод был одобрен в процессе рецензирования. Он больше не может быть изменён переводчиками — только рецензентами. Переводчики могут только добавлять к нему предложения.

Это состояние доступно только когда рецензирование включено.

Предложения

Предложения хранятся только в Weblate, а не в файле перевода.

Состояния по возможности представлены в файлах перевода.

Подсказка

In case file format you use does not support storing states, you might want to use Пометка неизменённых переводов флагом «На правку» add-on to flag unchanged strings as needing editing.

Прямой перевод

Это самая обычная настройка для небольших команд, любой может переводить напрямую. Также она действует по умолчанию в Weblate.

  • Любой пользователь может редактировать переводы.

  • Предложения являются необязательным способом предложения изменений, когда переводчики не уверены в этом изменении.

Параметр

Значение

Примечание

Включить рецензии

выкл

Настраивается на уровне проекта.

Включить предложения

вкл

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

Голосование по предложению

выкл

Автоматическое принятие предложений

0

Группа переводчиков

Пользователи

Или Перевод, если включено per-project access control.

Группа рецензентов

Н/Д

Не используется.

Коллегиальное рецензирование

В этом рабочем процессе любой может добавлять предложения и чтобы они стали переводом, они должны получить одобрение от другого участника (или участников).

  • Любой пользователь может добавлять предложения.

  • Любой пользователь может голосовать за предложения.

  • Предложения становятся переводами, когда они получают заранее определённое количество голосов.

Параметр

Значение

Примечание

Включить рецензии

выкл

Настраивается на уровне проекта.

Включить предложения

вкл

Голосование по предложению

выкл

Автоматическое принятие предложений

1

Вы можете установить более высокое значение, чтобы потребовать больше рецензий от коллег.

Группа переводчиков

Пользователи

Или Перевод, если включено per-project access control.

Группа рецензентов

Н/Д

Не используется, рецензентами являются все переводчики.

Выделенные рецензенты

Добавлено в версии 2.18: Соответствующий рабочий процесс рецензирования поддерживается с версии Weblate 2.18.

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

  • Любой пользователь может редактировать не одобренные переводы.

  • Рецензент может одобрять строки или снимать с них одобрение.

  • Рецензент может редактировать все переводы (включая одобренные).

  • Также для внесения предложений на изменение одобренных строк могут использовать предложения.

Параметр

Значение

Примечание

Включить рецензии

вкл

Настраивается на уровне проекта.

Включить предложения

выкл

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

Голосование по предложению

выкл

Автоматическое принятие предложений

0

Группа переводчиков

Пользователи

Или Перевод, если включено per-project access control.

Группа рецензентов

Рецензенты

Или Рецензировать, если включено per-project access control.

Включение рецензирования

Рецензирование можно включить в настройках проекта, на вкладке Рабочий процесс параметров проекта (УправлятьПараметры в меню проекта):

_images/project-workflow.png

Примечание

В зависимости от настроек Weblate этот параметр может быть недоступен. Например, на Hosted Weblate он недоступен для проектов, размещённых бесплатно.

Контроль качества исходных строк

Во многих случаях строки на исходном языке поступают от разработчиков, так как именно они пишут код и придумывают новые исходные строки. Однако зачастую сами разработчики не являются носителями исходного языка и не могут обеспечить желаемого качества этих строк. Решить эту проблему может помочь промежуточный перевод, который будет являться неким дополнительным «шлюзом качества», расположенным между разработчиками, переводчиками и пользователями.

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

digraph translations { graph [fontname = "sans-serif", fontsize=10]; node [fontname = "sans-serif", fontsize=10, margin=0.1, height=0, style=filled, fillcolor=white, shape=note]; edge [fontname = "sans-serif", fontsize=10]; subgraph cluster_dev { style=filled; color=lightgrey; label = "Development process"; "Developers" [shape=box, fillcolor="#144d3f", fontcolor=white]; "Developers" -> "Intermediate file"; } subgraph cluster_l10n { style=filled; color=lightgrey; label = "Localization process"; "Translators" [shape=box, fillcolor="#144d3f", fontcolor=white]; "Editors" [shape=box, fillcolor="#144d3f", fontcolor=white]; "Editors" -> "Monolingual base language file"; "Translators" -> "Translation language file"; } "Intermediate file" -> "Monolingual base language file" [constraint=false]; "Monolingual base language file" -> "Translation language file" [constraint=false]; }

Рецензирование исходных строк

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

Для одноязычных форматов рецензирование исходной строки ничем не отличается от обычного рецензирования — когда сообщается о проблеме в исходной строке, она помечается флагом На правку.

Двуязычные форматы не позволяют напрямую редактировать исходные строки (они, как правило, извлекаются непосредственно из исходного кода). В этом случае к строкам, передаваемым переводчиками, прикрепляется метка Исходная строка требует рецензирования. Вы должны просмотреть такие строки и либо отредактировать их в исходном коде, либо удалить эту метку.

Часто задаваемые вопросы

Конфигурация

Как создать автоматизированный рабочий процесс?

Weblate может выполнить все действия, связанные с переводом, в полуавтоматическом режиме. Если вы дадите ему доступ на отправку изменений в ваш репозиторий, переводы смогут в нём появляться без запроса подтверждения, если только не возникнут конфликты слияния.

  1. Настройте свой Git-репозиторий так, чтобы он сообщал Weblate, когда происходят какие-либо изменения; для получения информации о том, как это сделать, смотрите раздел Обработчики уведомлений.

  2. В конфигурации вашего компонента установите URL для отправки, это позволит Weblate’у отправлять изменения в ваш репозиторий.

  3. В конфигурации вашего компонента включите отправку-при-коммите, это заставит Weblate отправлять изменения в ваш репозиторий всякий раз, когда они происходят в Weblate.

Как получить доступ к репозиториям по SSH?

Информацию о настройке SSH-ключей смотрите в разделе Доступ к репозиториям.

Как исправить в переводах конфликты слияния?

Время от времени, когда файл перевода изменяется одновременно и в Weblate, и в вышестоящем репозитории, происходят конфликты слияния. Обычно этого можно избежать, влив переводы из Weblate до внесения изменений в файлы перевода (например, перед запуском msgmerge). Просто скажите Weblate закоммитить все отложенные переводы (вы можете сделать это в подпункте Обслуживание репозитория меню Управлять) и влейте их в репозиторий (если не включена автоматическая отправка).

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

Примечание

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

# Commit all pending changes in Weblate, you can do this in the UI as well:
wlc commit
# Lock the translation in Weblate, again this can be done in the UI as well:
wlc lock
# Add Weblate as remote:
git remote add weblate https://hosted.weblate.org/git/project/component/
# You might need to include credentials in some cases:
git remote add weblate https://username:APIKEY@hosted.weblate.org/git/project/component/

# Update weblate remote:
git remote update weblate

# Merge Weblate changes:
git merge weblate/main

# Resolve conflicts:
edit …
git add …
…
git commit

# Push changes to upstream repository, Weblate will fetch merge from there:
git push

# Open Weblate for translation:
wlc unlock

Если вы используете в Weblate несколько ветвей, то же самое вы можете сделать со всеми ними:

# Add and update Weblate remotes
git remote add weblate-one https://hosted.weblate.org/git/project/one/
git remote add weblate-second https://hosted.weblate.org/git/project/second/
git remote update weblate-one weblate-second

# Merge QA_4_7 branch:
git checkout QA_4_7
git merge weblate-one/QA_4_7
... # Resolve conflicts
git commit

# Merge main branch:
git checkout main
git merge weblates-second/main
... # Resolve conflicts
git commit

# Push changes to the upstream repository, Weblate will fetch the merge from there:
git push

В случае использования файлов PO gettext’а существует способ полуавтоматического исправления конфликтов:

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

# Add remote:
git remote add weblate /path/to/weblate/snapshot/

# Update Weblate remote:
git remote update weblate

# Merge Weblate changes:
git merge weblate/main

# Resolve conflicts in the PO files:
for PO in `find . -name '*.po'` ; do
    msgcat --use-first /path/to/weblate/snapshot/$PO\
               /path/to/upstream/snapshot/$PO -o $PO.merge
    msgmerge --previous --lang=${PO%.po} $PO.merge domain.pot -o $PO
    rm $PO.merge
    git add $PO
done
git commit

# Push changes to the upstream repository, Weblate will fetch merge from there:
git push

Как мне сразу перевести несколько веток?

Weblate поддерживает одновременную отправку изменений перевода внутри одного проекта. В каждом компоненте, в котором она включена (это поведение по умолчанию), внесённое изменение автоматически вносится и в прочие компоненты. Таким образом, переводы остаются синхронизированными, даже если сами ветки уже достаточно сильно разошлись, и простое объединение изменений перевода между ними невозможно.

После вливания изменений из Weblate, вам, возможно, придётся объединить эти ветви (в зависимости от вашего рабочего процесса разработки) для устранения различий:

git merge -s ours origin/maintenance

Как переводить многоплатформенные проекты?

Weblate поддерживает широкий диапазон форматов файлов (смотрите раздел Поддерживаемые форматы файлов) и самым простым подходом является использование родного формата для каждой платформы.

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

Как экспортировать используемый Weblate репозиторий Git?

Репозиторий ничем таким не выделяется, он живёт в каталоге DATA_DIR и называется vcs/<проект>/<компонент>/. Если у вас есть SSH-доступ к этой машине, вы можете работать с репозиторием напрямую.

Для анонимного доступа вы можете запустить Git-сервер и позволить ему открыть репозиторий во внешний мир.

В качестве альтернативы вы можете использовать Экспортер Git изнутри Weblate для автоматизации этого процесса.

Какие есть способы для отправки изменений в вышестоящий репозиторий?

В значительной степени это зависит от вашей установки, в этом плане Weblate достаточно гибок. Вот несколько примеров используемых с Weblate’ом рабочих процессов:

  • Weblate автоматически отправляет и вливает изменения (смотрите раздел Как создать автоматизированный рабочий процесс?).

  • Вы вручную приказываете Weblate отправить изменения (ему нужны права доступа на отправку изменений в вышестоящий репозиторий).

  • Кто-то вручную вливает изменения из git-репозитория Weblate в вышестоящий репозиторий.

  • Кто-то переписывает созданную Weblate историю (например, устраняя коммиты слияния), объединяет изменения и приказывает Weblate’у сбросить содержимое в вышестоящий репозиторий.

Конечно, вы можете смешивать все эти рабочие процессы по своему усмотрению.

Как мне ограничить Weblate доступом только к переводам, не раскрывая ему при этом исходный код?

Для отделения переводов от исходного кода вы можете использовать подмодули git, при этом вы по-прежнему держите их под контролем версий.

  1. Создайте репозиторий с вашими файлами перевода.

  2. Добавьте его в качестве подмодуля к своему коду:

    git submodule add git@example.com:project-translations.git path/to/translations
    
  3. Свяжите Weblate с этим репозиторием, ему больше не нужен доступ к репозиторию, содержащему ваш исходный код.

  4. Вы можете обновлять основной репозиторий переводами из Weblate, выполняя команду:

    git submodule update --remote path/to/translations
    

Для получения более подробной информации обратитесь к документации по подмодулям git.

Как мне проверить, правильно ли настроен мой Weblate?

Weblate включает в себя набор проверок конфигурации, которые можно посмотреть, перейдите по ссылке Отчёт о производительности в интерфейсе администратора, или напрямую откройте адрес /manage/performance/.

Почему все коммиты от имени Weblate имеют электронную почту <noreply@weblate.org>?

This is the default committer name, configured by DEFAULT_COMMITER_EMAIL and DEFAULT_COMMITER_NAME.

В любом случае, в качестве пользователя, сделавший перевод всё равно корректно записывается автор коммита (если это поддерживает нижележащая система контроля версий).

For commits where no authorship is known (for example anonymous suggestions or machine translation results), the authorship is credited to the anonymous user (see ANONYMOUS_USER_NAME). You can change the name and e-mail in the management interface.

How to move files in the repository without losing history in Weblate?

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

The solution to this is to perform the operation in sync with Weblate:

  1. Lock the affected component in Weblate.

  2. Коммит ожидающих изменений в репозиторий Weblate.

  3. Disable receiving webhooks the Настройки проекта; this prevents Weblate from immediately seeing changes in the repository.

  4. Do any needed changes in the repo (for example using git mv), push them to the upstream repository.

  5. Change the Настройки компонента to match the new setup; upon changing configuration, Weblate will fetch the updated repository and notice the changed locations while keeping existing strings.

  6. Unlock the component and re-enable hooks in the project configuration.

Использование

Как мне отрецензировать переводы других переводчиков?

  • В Weblate доступно на выбор несколько вариантов рабочего процесса, основанные на рецензировании, смотреть раздел Рабочие процессы перевода.

  • Вы можете подписаться на любые изменения на вкладке Уведомления, а затем проверять вклады других переводчиков по мере их поступления по электронной почте.

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

Как мне предоставить обратную связь по исходной строке?

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

Как я могу использовать при переводе уже существующие переводы?

  • Благодаря разделяемой памяти переводов могут быть использованы все переводы, загруженные в Weblate.

  • Вы можете импортировать в Weblate свою уже существующую память переводов из файлов.

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

  • Вы можете настроить tmserver со всеми имеющимися у вас базами данных и позволить Weblate’у его использовать. Это хороший вариант, если вы хотите использовать его при переводе несколько раз.

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

Обновляет ли Weblate помимо самих переводов также и файлы перевода?

Weblate пытается свести к минимуму изменения в файлах перевода. Для некоторых форматов файлов это, к сожалению, может привести к переформатированию файла. Если вы хотите, чтобы файл был отформатирован по-вашему, пожалуйста, используйте для этого перехватчик pre-commit.

Откуда берутся определения языка и как я могу добавить свои собственные определения?

Базовый набор определений языка входит в состав Weblate и Translate-toolkit. Он охватывает более 150 языков и включает информацию о множественных формах или направлении текста.

Вы можете определять свои собственные языки в интерфейсе администратора. Для этого вам нужно просто ввести необходимую информацию о них.

Может ли Weblate подсветить изменения в строке «на правку»?

Weblate поддерживает такую подсветку, однако, чтобы показать различия, ему нужны данные.

К примеру, для PO-файлов Gettext при обновлении PO-файлов необходимо в вызов команды msgmerge передать параметр --previous:

msgmerge --previous -U po/cs.po po/phpmyadmin.pot

Для одноязычных переводов Weblate может найти предыдущую строку по её идентификатору, поэтому различия он показывает автоматически.

Почему Weblate до сих пор показывает старые строки перевода, хотя я уже обновил шаблон?

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

Примечание

Обычно перед обновлением файлов перевода полезно влить изменения, сделанные в Weblate, в основной репозиторий, так как в противном случае вы, вероятно, столкнётесь с некоторыми конфликтами при слиянии.

Например, если вы используете PO-файлы gettext, вы можете обновить файлы перевода с помощью инструмента msgmerge:

msgmerge -U locale/cs/LC_MESSAGES/django.mo locale/django.pot

In case you want to do the update automatically, you can install add-on Обновлять PO-файлы до соответствия POT (msgmerge).

Решение проблем

Запросы иногда завершаются с ошибкой «слишком много открытых файлов» (“too many open files”)

Такое иногда случается, когда ваш Git-репозиторий слишком разрастается и у вас их очень много. Сжатие Git-репозиториев улучшит эту ситуацию.

Простейший способ это сделать — запустить следующий скрипт:

# Go to DATA_DIR directory
cd data/vcs
# Compress all Git repositories
for d in */* ; do
    pushd $d
    git gc
    popd
done

См.также

DATA_DIR

При доступе к сайту я получаю ошибку «Плохой запрос (400)» (“Bad Request (400)”)

Скорее всего это вызвано неправильной настройкой параметра ALLOWED_HOSTS. Он должен содержать все имена хостов, с которых вы хотите получать доступ к вашему Weblate’у. Например:

ALLOWED_HOSTS = ["weblate.example.com", "weblate", "localhost"]

Что означает сообщение «Есть больше файлов для одного языка (en)»?

Обычно такое происходит, когда у вас есть файл перевода для исходного языка. Weblate отслеживает исходные строки и резервирует для этого язык оригинала. Дополнительный файл для того же самого языка не обрабатывается.

  • В случае необходимости перевода на исходный язык в настройках компонента необходимо изменить параметр Исходный язык.

  • Если файл перевода для исходного языка не нужен, пожалуйста, удалите его из репозитория.

  • Если же файл перевода для исходного языка необходим, но должен игнорироваться Weblate, пожалуйста, настройте для его исключения языковой фильтр.

Подсказка

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

Это может быть вызвано тем, что используются устаревшие коды языков одновременно с новыми (ja и jp для японского) или используется одновременно код, привязанный к стране, и основной (ru и ru_RU). Смотрите подробности в разделе «Разбор кодов языков».

Возможности

Поддерживает ли Weblate другие системы контроля версий, кроме Git и Mercurial?

В настоящее время Weblate не имеет родной поддержки ни для чего, кроме Git (с расширенной поддержкой GitHub pull requests, Gerrit и Subversion) и Mercurial, но вполне возможно дописать поддержку и других систем контроля версий.

Также для доступа к другим системам контроля версий вы можете использовать Удалённые помощники Git в Git’е .

Кроме того, Weblate поддерживает операции, не требующие системы контроля версий, смотрите раздел Локальные файлы.

Примечание

Для родной поддержки других систем контроля версий Weblate требует использования распределённых СКВ, и, вероятно, может быть настроен на работу с любой системой, помимо Git или Mercurial, но кто-то должен эту поддержку реализовать.

Как Weblate сообщает о том, кто какую строку перевёл?

Каждое изменение, сделанное через Weblate, фиксируется в системе контроля версий под именем переводчика. Таким образом, каждое изменение имеет надлежащее авторство, и вы можете отследить его с помощью стандартных инструментов СКВ, которые вы используете для кода.

Кроме того, если формат файла перевода это поддерживает, он обновляет заголовки файлов и включает в них имя переводчика.

Почему Weblate принудительно показывает все PO-файлы в одном дереве?

Weblate был спроектирован таким образом, что каждый PO-файл представляется одним компонентом. Это выгодно переводчиками, поскольку они знают, что они переводят на самом деле.

Изменено в версии 4.2: Переводчики могут переводить все компоненты одного проекта на один конкретный язык как единое целое.

Почему Weblate использует такие коды языков, как sr_Latn или zh_Hant?

Это коды языков, определяемые RFC 5646, чтобы лучше показать, что это и в самом деле разные языки, вместо ранее ошибочно используемых модификаторов (для вариантов @latin) или кодов стран (для китайского языка).

Weblate по-прежнему понимает старые коды языков и сопоставляет их с текущими — например, sr@latin будет обрабатываться как sr_Latn, а zh@CN — как zh_Hans.

Примечание

Weblate по умолчанию использует коды языков в стиле POSIX с подчёркиванием, подробнее см. в Определение языков.

Поддерживаемые форматы файлов

Weblate поддерживает большинство форматов перевода, понимаемых translate-toolkit, однако у каждого формата есть свои особенности, поэтому могут возникнуть некоторые проблемы с форматами, которые были протестированы недостаточно тщательно.

Примечание

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

Двуязычные и одноязычные форматы

Поддерживаются как одноязычные, так и двуязычные форматы. Двуязычные форматы хранят в одном файле два языка — исходный язык и перевод (типовые примеры: GNU gettext, XLIFF или Строки Apple iOS). Одноязычные же форматы, напротив, идентифицируют строку по ID, и каждый файл перевода содержит только сопоставление этих ID с одним конкретным языком (например, Строковые ресурсы Android). Некоторые форматы файлов могут использоваться и так, и так; подробности смотрите ниже.

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

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

Автоматическое обнаружение

Weblate умеет автоматически обнаруживать некоторые широко распространённые форматы файлов, но это обнаружение может навредить вашей производительности и ограничено возможностями, специфичными для данного формата файла (к примеру, автоматическим добавлением новых переводов).

Возможности типов переводов

Возможности всех поддерживаемых форматов:

Формат

Язычность 1

Множественные формы 2

Descriptions 3

Контекст 4

Расположение 5

Флаги 8

Дополнительные состояния 6

GNU gettext

двуязычный

да

да

да

да

да 9

требуется правка

Одноязычный gettext

одноязычный

да

да

да

да

да 9

требуется правка

XLIFF

оба

да

да

да

да

да 10

требуется правка, одобрено

Файлы свойств Java

оба

нет

да

нет

нет

нет

файлы mi18n lang

одноязычный

нет

да

нет

нет

нет

Файлы свойств GWT

одноязычный

да

да

нет

нет

нет

Переводы Joomla

одноязычный

нет

да

нет

да

нет

Файлы .ts Qt Linguist

оба

да

да

нет

да

да 10

требуется правка

Строковые ресурсы Android

одноязычный

да

да 7

нет

нет

да 10

Строки Apple iOS

двуязычный

нет

да

нет

нет

нет

Строки PHP

одноязычный

нет 11

да

нет

нет

нет

JSON-файлы

одноязычный

нет

нет

нет

нет

нет

JSON -файлы i18next

одноязычный

да

нет

нет

нет

нет

JSON-файлы go-i18n

одноязычный

да

нет

нет

нет

нет

Файл ARB

одноязычный

да

да

нет

нет

нет

JSON-файлы WebExtension

одноязычный

да

да

нет

нет

нет

.XML-файлы ресурсов

одноязычный

нет

да

нет

нет

да 10

Файлы CSV

оба

нет

да

да

да

нет

требуется правка

Файлы YAML

одноязычный

нет

да

нет

нет

нет

Файлы Ruby YAML

одноязычный

да

да

нет

нет

нет

Файлы DTD

одноязычный

нет

нет

нет

нет

нет

Плоские XML-файлы

одноязычный

нет

нет

нет

нет

да 10

Файлы ресурсов Windows

одноязычный

нет

да

нет

нет

нет

Excel Open XML

одноязычный

нет

да

да

да

нет

требуется правка

Файлы метаданных магазина приложений

одноязычный

нет

нет

нет

нет

нет

Файлы субтитров

одноязычный

нет

нет

нет

да

нет

Файлы HTML

одноязычный

нет

нет

нет

нет

нет

Формат OpenDocument

одноязычный

нет

нет

нет

нет

нет

Формат IDML

одноязычный

нет

нет

нет

нет

нет

Переводы в INI-файлах

одноязычный

нет

нет

нет

нет

нет

Переводы в INI-файлах Inno Setup

одноязычный

нет

нет

нет

нет

нет

Формат TermBase eXchange

двуязычный

нет

да

нет

нет

да 10

Текстовые файлы

одноязычный

нет

нет

нет

нет

нет

Формат Stringsdict

одноязычный

да

да

нет

нет

нет

Формат Fluent

одноязычный

нет 12

да

нет

нет

нет

1

Смотрите раздел Двуязычные и одноязычные форматы

2

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

3

Source string descriptions can be used to pass additional info about the string to translate.

4

Контекст используется для различения одинаковых строк, используемых в разных областях (например, Sun может означать как сокращённое название дня «воскресенье» — «Sunday» — так и название нашей ближайшей звезды).

5

Расположение строки в исходном коде может помочь опытным переводчикам понять предназначение этой строки.

6

Additional states supported by the file format in addition to «Untranslated» and «Translated».

7

XML comment placed before the <string> element, parsed as a source string description.

8

Смотрите раздел Настройка поведения с помощью флагов

9(1,2)

В качестве флагов используются комментарии типа gettext.

10(1,2,3,4,5,6)

Для всех форматов на основе XML флаги извлекаются из нестандартного атрибута weblate-flags. Кроме того, флаг max-length:N поддерживается через атрибут maxwidth, как определено в стандарте XLIFF, смотрите раздел Указание флагов перевода.

11

Множественные формы поддерживаются только для Laravel, который использует для их определения внутристрочный синтаксис, смотрите документ Локализация в Laravel.

12

Множественное число обрабатывается в синтаксисе строк и не отображается как множественное число в Weblate.

Строки только для чтения

Добавлено в версии 3.10.

Строки из файлов перевода, доступные только для чтения, будут включены, но не могут быть отредактированы в Weblate. Поддержка этой возможности уже встроена в некоторые форматы (XLIFF и Строковые ресурсы Android), а в других может быть сэмулирована добавлением к строке флага read-only — смотрите раздел Настройка поведения с помощью флагов.

GNU gettext

Самый широкоиспользуемый формат для перевода свободного програмного обеспечения.

Контекстная информация, хранящаяся в файле, поддерживается настройкой его заголовков или его привязкой к соответствующим исходным файлам.

Двуязычный PO-файл gettext обычно выглядит следующим образом:

#: weblate/media/js/bootstrap-datepicker.js:1421
msgid "Monday"
msgstr "Pondělí"

#: weblate/media/js/bootstrap-datepicker.js:1421
msgid "Tuesday"
msgstr "Úterý"

#: weblate/accounts/avatar.py:163
msgctxt "No known user"
msgid "None"
msgstr "Žádný"

Типовые настройки компонента Weblate

Маска файла

po/*.po

Одноязычный базовый файл

Пусто

Шаблон для новых переводов

po/messages.pot

Формат файла

PO-файл gettext

Одноязычный gettext

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

Одноязычный PO-файл gettext обычно выглядит следующим образом:

#: weblate/media/js/bootstrap-datepicker.js:1421
msgid "day-monday"
msgstr "Pondělí"

#: weblate/media/js/bootstrap-datepicker.js:1421
msgid "day-tuesday"
msgstr "Úterý"

#: weblate/accounts/avatar.py:163
msgid "none-user"
msgstr "Žádný"

А базовый языковой файл — вот таким образом:

#: weblate/media/js/bootstrap-datepicker.js:1421
msgid "day-monday"
msgstr "Monday"

#: weblate/media/js/bootstrap-datepicker.js:1421
msgid "day-tuesday"
msgstr "Tuesday"

#: weblate/accounts/avatar.py:163
msgid "none-user"
msgstr "None"

Типовые настройки компонента Weblate

Маска файла

po/*.po

Одноязычный базовый файл

po/en.po

Шаблон для новых переводов

po/messages.pot

Формат файла

PO-файл gettext (одноязычный)

XLIFF

Формат на основе XML, созданный для стандартизации файлов перевода, но в конечном итоге ставший просто ещё одним из многочисленных стандартов в этой области.

Формат файла XML для обмена локализациями (XLIFF) обычно используется как двуязычный, но Weblate поддерживает его использование и в качестве одноязычного.

См.также

Спецификация формата файла XML для обмена локализациями (XLIFF)

Состояния перевода

Изменено в версии 3.3: Weblate игнорировал атрибут state до выхода версии 3.3.

Атрибуту состояния state из XLIFF-файла частично соответствует состояние «На правку» в Weblate (строки в следующих состояниях считаются отмеченными на правку, если перевод на целевой язык уже присутствует в файле: new, needs-translation, needs-adaptation, needs-l10n). Если атрибут state отсутствует, а собственно перевод есть (существует элемент <target>), то строка считается переведённой.

Если строка перевода имеет атрибут approved="yes", она также будет импортирована в Weblate в состоянии «Одобрено», все остальные строки будут импортированы в состоянии «Ожидает рецензирования» (что соответствует спецификации XLIFF).

При сохранении Weblate добавляет эти атрибуты только если они действительно необходимы:

  • Атрибут state добавляется только в том случае, если строка помечена на правку.

  • Атрибут approved добавляется только в том случае, если строка была отрецензирована.

  • В остальных случаях эти атрибуты не добавляются, но если они присутствуют, то они будут обновлятся.

Таким образом, при использовании формата XLIFF настоятельно рекомендуется включить рецензирование в Weblate, чтобы видеть и изменять состояние одобрения строк.

Аналогично, при импорте таких файлов (в форме загрузки) необходимо выбрать пункт Импортировать как переведённое в выпадающем списке Обработка строк, отмеченных «На правку».

Пробелы и переводы строк в файлах XLIFF

Как правило, тип или количество пробельных символов в XML-форматах не различаются. Если вы хотите их сохранить, вы должны добавить к строке флаг xml:space="preserve".

Например:

    <trans-unit id="10" approved="yes">
        <source xml:space="preserve">hello</source>
        <target xml:space="preserve">Hello, world!
</target>
    </trans-unit>

Указание флагов перевода

С помощью атрибута weblate-flags вы можете указать дополнительные флаги перевода (смотрите раздел Настройка поведения с помощью флагов). Также Weblate понимает атрибуты maxwidth и font из спецификации XLIFF:

<trans-unit id="10" maxwidth="100" size-unit="pixel" font="ubuntu;22;bold">
   <source>Hello %s</source>
</trans-unit>
<trans-unit id="20" maxwidth="100" size-unit="char" weblate-flags="c-format">
   <source>Hello %s</source>
</trans-unit>

Из атрибута font извлекается название семейства шрифтов, а также размер и насыщенность шрифта. Приведённый выше пример показывает использование всех трёх параметров, хотя обязательным к указанию является только семейство шрифта. Любые пробельные символы в наименовании семейства шрифта преобразуются в подчёркивания, так что Source Sans Pro становится Source_Sans_Pro, поэтому при указании группы шрифтов (смотрите раздел Управление шрифтами) имейте это в виду.

Ключи строк

В качестве идентификаторов единиц перевода (unit) из XLIFF-файла Weblate использует значение атрибута resname, а если его нет, то id (совместно с тегом file, если есть).

То что именно аттрибут resname используется в качестве идентификатора, а не id вызвано тем, что для resname поддерживаются значения в виде, удобном для человека, что делает из более подходящими для отображения в интерфейсе Weblate. Значение resname должно быть уникальным для всего XLIFF-файла. Это требование Weblate, а не стандарта XLIFF, который не накладывает таких ограничений.

Типовые настройки компонента Weblate для двуязычного XLIFF

Маска файла

localizations/*.xliff

Одноязычный базовый файл

Пусто

Шаблон для новых переводов

localizations/en-US.xliff

Формат файла

Файл перевода XLIFF

Типовые настройки компонента Weblate для одноязычного XLIFF

Маска файла

localizations/*.xliff

Одноязычный базовый файл

localizations/en-US.xliff

Шаблон для новых переводов

localizations/en-US.xliff

Формат файла

Файл перевода XLIFF

Файлы свойств Java

Родной формат Java для переводов.

Файлы свойств Java обычно используются в качестве одноязычных переводов.

Weblate поддерживает варианты этого формата в кодировках ISO-8859-1, UTF-8 и UTF-16. Все они поддерживают сохранение всех символов юникода, просто в разных кодировках. В формате ISO-8859-1 используются юникодные экранирующие последовательности (например, zkou\u0161ka), остальные кодируют символы непосредственно в UTF-8 или UTF-16.

Примечание

Загрузка экранирующих последовательностей также работает в режиме UTF-8, поэтому, пожалуйста, будьте внимательны при выборе правильного набора кодировок в соответствии с потребностями вашего приложения.

Типовые настройки компонента Weblate

Маска файла

src/app/Bundle_*.properties

Одноязычный базовый файл

src/app/Bundle.properties

Шаблон для новых переводов

Пусто

Формат файла

Свойства Java (ISO 8859-1)

файлы mi18n lang

Добавлено в версии 4.7.

Формат файла, используемый для локализации JavaScript программой mi18n. Синтаксически он соответствует Файлы свойств Java.

Типовые настройки компонента Weblate

Маска файла

*.lang

Одноязычный базовый файл

en-US.lang

Шаблон для новых переводов

Пусто

Формат файла

файл mi18n lang

Файлы свойств GWT

Родной формат GWT для переводов.

Файлы свойств GWT обычно используются в качестве одноязычных переводов.

Типовые настройки компонента Weblate

Маска файла

src/app/Bundle_*.properties

Одноязычный базовый файл

src/app/Bundle.properties

Шаблон для новых переводов

Пусто

Формат файла

Свойства GWT

Переводы в INI-файлах

Добавлено в версии 4.1.

Формат INI-файла для переводов.

Переводы в INI-файлах обычно используются в качестве одноязычных переводов.

Типовые настройки компонента Weblate

Маска файла

language/*.ini

Одноязычный базовый файл

language/en.ini

Шаблон для новых переводов

Пусто

Формат файла

INI-файл

Примечание

Weblate извлекает ключи только из внутренних секций INI-файла. Если в вашем INI-файле нет секций, то, возможно, вместо INI вам стоит использовать формат переводов Joomla или Java.

Переводы в INI-файлах Inno Setup

Добавлено в версии 4.1.

Формат INI-файлов Inno Setup для переводов.

Переводы в INI-файлах Inno Setup обычно используются в качестве одноязычных переводов.

Примечание

Единственным заметным отличием от обычных переводов в INI-файлах является поддержка заполнителей %n и %t для символов переноса строки и табуляции.

Типовые настройки компонента Weblate

Маска файла

language/*.islu

Одноязычный базовый файл

language/en.islu

Шаблон для новых переводов

Пусто

Формат файла

INI-файл Inno Setup

Примечание

На текущий момент поддерживаются только юникодные файлы (.islu), файлы в кодировке ANSI (.isl) в настоящее время не поддерживаются.

Переводы Joomla

Добавлено в версии 2.12.

Родной формат Joomla для переводов.

Переводы Joomla обычно используются в качестве одноязычных переводов.

Типовые настройки компонента Weblate

Маска файла

language/*/com_foobar.ini

Одноязычный базовый файл

language/en-GB/com_foobar.ini

Шаблон для новых переводов

Пусто

Формат файла

Языковой файл Joomla

Файлы .ts Qt Linguist

Формат перевода, используемый в приложениях на основе Qt.

Файлы Qt Linguist используются и как двуязычные, так и одноязычные переводы.

Типовые настройки компонента Weblate при использовании формата как двуязычного

Маска файла

i18n/app.*.ts

Одноязычный базовый файл

Пусто

Шаблон для новых переводов

i18n/app.ru.ts

Формат файла

Файл перевода Qt Linguist

Типовые настройки компонента Weblate при использовании формата как одноязычного

Маска файла

i18n/app.*.ts

Одноязычный базовый файл

i18n/app.en.ts

Шаблон для новых переводов

i18n/app.en.ts

Формат файла

Файл перевода Qt Linguist

Строковые ресурсы Android

Специфичный для Android формат файла для перевода приложений.

Android string resources are monolingual, the Одноязычный базовый файл is stored in a different location from the other files – res/values/strings.xml.

Типовые настройки компонента Weblate

Маска файла

res/values-*/strings.xml

Одноязычный базовый файл

res/values/strings.xml

Шаблон для новых переводов

Пусто

Формат файла

Строковый ресурс Android

Примечание

Структуры строкового массива Android, string-array, в настоящее время не поддерживаются. Чтобы это обойти, вы можете разбить свои строковые массивы на части:

<string-array name="several_strings">
    <item>First string</item>
    <item>Second string</item>
</string-array>

станет:

<string-array name="several_strings">
    <item>@string/several_strings_0</item>
    <item>@string/several_strings_1</item>
</string-array>
<string name="several_strings_0">First string</string>
<string name="several_strings_1">Second string</string>

Элемент string-array, указывающий на элементы string, должен храниться в другом файле и не должен быть доступен для перевода.

Помочь в подготовке существующих файлов strings.xml и переводов вам может вот этот скрипт: https://gist.github.com/paour/11291062

Строки Apple iOS

Специфичный для Apple формат файла для перевода приложений, используемый для переводов приложений как для iOS, так и для iPhone’а/iPad’а.

Строки Apple iOS обычно используются в качестве двуязычных переводов.

Типовые настройки компонента Weblate

Маска файла

Resources/*.lproj/Localizable.strings

Одноязычный базовый файл

Resources/en.lproj/Localizable.strings или Resources/Base.lproj/Localizable.strings

Шаблон для новых переводов

Пусто

Формат файла

Строки iOS (UTF-8)

Строки PHP

Переводы PHP обычно одноязычные, поэтому рекомендуется указывать базовый файл со строками на (как это чаще всего бывает) английском языке.

Пример файла:

<?php
$LANG['foo'] = 'bar';
$LANG['foo1'] = 'foo bar';
$LANG['foo2'] = 'foo bar baz';
$LANG['foo3'] = 'foo bar baz bag';

Типовые настройки компонента Weblate

Маска файла

lang/*/texts.php

Одноязычный базовый файл

lang/en/texts.php

Шаблон для новых переводов

lang/en/texts.php

Формат файла

Строки PHP

Строки Laravel PHP

Изменено в версии 4.1.

Файлы локализации Laravel PHP также поддерживают множественные формы:

<?php
return [
    'welcome' => 'Welcome to our application',
    'apples' => 'There is one apple|There are many apples',
];

JSON-файлы

Добавлено в версии 2.0.

Изменено в версии 2.16: Начиная с Weblate версии 2.16 и translate-toolkit версии не ниже 2.2.4 также поддерживаются JSON-файлы с вложенной структурой.

Изменено в версии 4.3: Структура JSON-файла корректно сохраняется даже в сложных ситуациях (которые некорректно обрабатывались в предыдущих выпусках).

Формат JSON используется в основном для перевода приложений, написанных на JavaScript.

В настоящее время Weblate поддерживает несколько вариантов переводов в JSON:

Переводы JSON обычно одноязычные, поэтому рекомендуется указывать базовый файл со строками на (как это чаще всего бывает) английском языке.

Пример файла:

{
  "Hello, world!\n": "Ahoj světe!\n",
  "Orangutan has %d banana.\n": "",
  "Try Weblate at https://demo.weblate.org/!\n": "",
  "Thank you for using Weblate.": ""
}

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

{
  "weblate": {
    "hello": "Ahoj světe!\n",
    "orangutan": "",
    "try": "",
    "thanks": ""
  }
}

Подсказка

И формат JSON-файл, и JSON-файл с вложенной структурой могут обрабатывать одни и теже файлы.

Единственная разница между ними проявляется при добавлении новых строк через Weblate: варианта формата «со вложенной структурой» разбирает ключи вновь добавленных строк и вставляет их в файл в виде соответствующей структуры. Например, ключ app.name будет вставлен как:

{
   "app": {
      "name": "Weblate"
   }
}

Типовые настройки компонента Weblate

Маска файла

langs/translation-*.json

Одноязычный базовый файл

langs/translation-en.json

Шаблон для новых переводов

Пусто

Формат файла

Файл вложенной структуры JSON

JSON -файлы i18next

Изменено в версии 2.17: Начиная с Weblate версии 2.17 и translate-toolkit версии не ниже 2.2.5 также поддерживаются JSON-файлы i18next с формами множественного числа.

i18next — это фреймворк интернационализации, написанный на и для JavaScript. Weblate поддерживает его файлы локализации с такими возможностями, как формы множественного числа.

Переводы i18next обычно одноязычные, поэтому рекомендуется указывать базовый файл со строками на (как это чаще всего бывает) английском языке.

Примечание

Weblate поддерживает формат JSON-файла i18next версии v3. Версии v2 и v1 в основном совместимы, за исключением того, как они работают с формами множественного числа.

В варианте v4 использован другой подход к сохранению множественных форм. Поддержка его ещё не реализована.

Пример файла:

{
  "hello": "Hello",
  "apple": "I have an apple",
  "apple_plural": "I have {{count}} apples",
  "apple_negative": "I have no apples"
}

Типовые настройки компонента Weblate

Маска файла

langs/*.json

Одноязычный базовый файл

langs/en.json

Шаблон для новых переводов

Пусто

Формат файла

JSON-файл i18next

JSON-файлы go-i18n

Добавлено в версии 4.1.

Переводы go-i18n обычно одноязычные, поэтому рекомендуется указывать базовый файл со строками на (как это чаще всего бывает) английском языке.

Примечание

Weblate поддерживает формат JSON-файла go-i18n версии v1, для плоских JSON-файлов используйте формат JSON-файлы. Формат v2 с хэшами в настоящее время не поддерживается.

Типовые настройки компонента Weblate

Маска файла

langs/*.json

Одноязычный базовый файл

langs/en.json

Шаблон для новых переводов

Пусто

Формат файла

JSON -файл go-i18n

Файл ARB

Добавлено в версии 4.1.

Переводы ARB обычно одноязычные, поэтому рекомендуется указывать базовый файл со строками на (как это чаще всего бывает) английском языке.

Типовые настройки компонента Weblate

Маска файла

lib/l10n/intl_*.arb

Одноязычный базовый файл

lib/l10n/intl_en.arb

Шаблон для новых переводов

Пусто

Формат файла

Файл ARB

JSON-файлы WebExtension

Добавлено в версии 2.16: Поддерживаются с версии Weblate 2.16 и translate-toolkit версии не ниже 2.2.4.

Формат файла, используемый при переводе расширений для Mozilla Firefox или Google Chromium.

Примечание

Хотя этот формат называется JSON, его спецификация позволяет включать комментарии, которые не являются частью спецификации JSON. В настоящее время Weblate не поддерживает файл с комментариями.

Пример файла:

{
  "hello": {
    "message": "Ahoj světe!\n",
    "description": "Description",
    "placeholders": {
      "url": {
        "content": "$1",
        "example": "https://developer.mozilla.org"
      }
    }
  },
  "orangutan": {
    "message": "",
    "description": "Description"
  },
  "try": {
    "message": "",
    "description": "Description"
  },
  "thanks": {
    "message": "",
    "description": "Description"
  }
}

Типовые настройки компонента Weblate

Маска файла

_locales/*/messages.json

Одноязычный базовый файл

_locales/en/messages.json

Шаблон для новых переводов

Пусто

Формат файла

JSON-файл WebExtension

.XML-файлы ресурсов

Добавлено в версии 2.3.

В .XML-файле ресурса (.resx) применяется формат одноязычного XML-файла, используемый в приложениях Microsoft .NET. Он взаимозаменяем с форматом .resw, который использует синтаксис, идентичный синтаксису .resx.

Типовые настройки компонента Weblate

Маска файла

Resources/Language.*.resx

Одноязычный базовый файл

Resources/Language.resx

Шаблон для новых переводов

Пусто

Формат файла

Файл ресурсов .NET

Файлы CSV

Добавлено в версии 2.4.

Файлы CSV обычно содержат простой список исходных строк и переводов. Weblate поддерживает следующие форматы оных:

  • Файлы с заголовком, определяющим поля в самом файле (location — расположение, source — исходная строка, target — перевод, ID, fuzzy — «на правку», context — контекст, translator_comments — комментарий переводчика, developer_comments — комментарий разработчика). Это рекомендуемый подход, так как при его использовании меньше вероятность ошибок. Выберите CSV-файл в качестве формата.

  • Файлы с двумя полями - источник и перевод (в данном порядке). Выберите Простой CSV-файл в качестве формата файла.

  • Файлы без заголовка, с полями в порядке, определённом translate-toolkit: location, source, target, ID, fuzzy, context, translator_comments, developer_comments. Выберите CSV-файл в качестве формата.

  • Не забывайте определить одноязычный базовый файл, если ваши файлы одноязычные (смотреть раздел Двуязычные и одноязычные форматы).

Предупреждение

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

Пример файла:

Thank you for using Weblate.,Děkujeme za použití Weblate.

Типовые настройки компонента Weblate для двуязычного CSV

Маска файла

locale/*.csv

Одноязычный базовый файл

Пусто

Шаблон для новых переводов

locale/en.csv

Формат файла

Файл CSV

Типовые настройки компонента Weblate для одноязычного CSV

Маска файла

locale/*.csv

Одноязычный базовый файл

locale/en.csv

Шаблон для новых переводов

locale/en.csv

Формат файла

Простой CSV-файл

См.также

CSV

Файлы YAML

Добавлено в версии 2.9.

Простые файлы YAML со строковыми ключами и значениями. Также Weblate извлекает строки из списков и словарей.

Пример файла YAML:

weblate:
  hello: ""
  orangutan": ""
  try": ""
  thanks": ""

Типовые настройки компонента Weblate

Маска файла

translations/messages.*.yml

Одноязычный базовый файл

translations/messages.en.yml

Шаблон для новых переводов

Пусто

Формат файла

Файл YAML

См.также

YAML, Файлы Ruby YAML

Файлы Ruby YAML

Добавлено в версии 2.9.

Файлы YAML локализации Ruby с языком в качестве корневого узла.

Пример файла YAML локализации Ruby:

cs:
  weblate:
    hello: ""
    orangutan: ""
    try: ""
    thanks: ""

Типовые настройки компонента Weblate

Маска файла

translations/messages.*.yml

Одноязычный базовый файл

translations/messages.en.yml

Шаблон для новых переводов

Пусто

Формат файла

Файл Ruby YAML

См.также

YAML, Файлы YAML

Файлы DTD

Добавлено в версии 2.18.

Пример DTD-файла:

<!ENTITY hello "">
<!ENTITY orangutan "">
<!ENTITY try "">
<!ENTITY thanks "">

Типовые настройки компонента Weblate

Маска файла

locale/*.dtd

Одноязычный базовый файл

locale/en.dtd

Шаблон для новых переводов

Пусто

Формат файла

Файл DTD

См.также

Формат DTD Mozilla

Плоские XML-файлы

Добавлено в версии 3.9.

Пример плоского XML-файла:

<?xml version='1.0' encoding='UTF-8'?>
<root>
  <str key="hello_world">Hello World!</str>
  <str key="resource_key">Translated value.</str>
</root>

Типовые настройки компонента Weblate

Маска файла

locale/*.xml

Одноязычный базовый файл

locale/en.xml

Шаблон для новых переводов

Пусто

Формат файла

Плоский XML-файл

Файлы ресурсов Windows

Изменено в версии 4.1: Поддержка файлов ресурсов Windows была переписана.

Примечание

Поддержка этого формата в настоящее время находится в бета-режиме, приветствуются обратная связь от тестирования.

Пример файла ресурсов Windows:

LANGUAGE LANG_CZECH, SUBLANG_DEFAULT

STRINGTABLE
BEGIN
    IDS_MSG1                "Hello, world!\n"
    IDS_MSG2                "Orangutan has %d banana.\n"
    IDS_MSG3                "Try Weblate at http://demo.weblate.org/!\n"
    IDS_MSG4                "Thank you for using Weblate."
END

Типовые настройки компонента Weblate

Маска файла

lang/*.rc

Одноязычный базовый файл

lang/en-US.rc

Шаблон для новых переводов

lang/en-US.rc

Формат файла

Файл RC

Файлы метаданных магазина приложений

Добавлено в версии 3.5.

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

Метаданные состоят из нескольких текстовых файлов, которые Weblate представляет для перевода в виде отдельных строк.

Типовые настройки компонента Weblate

Маска файла

fastlane/android/metadata/*

Одноязычный базовый файл

fastlane/android/metadata/en-US

Шаблон для новых переводов

fastlane/android/metadata/en-US

Формат файла

Файлы метаданных магазина приложений

Подсказка

Если вы не хотите переводить определённые строки (например, историю изменений), пометьте их «только для чтения» (read-only, смотреть раздел Настройка поведения с помощью флагов). Это также можно автоматизировать с помощью надстройки «Массовая правка».

Файлы субтитров

Добавлено в версии 3.7.

Weblate может переводить различные файлы субтитров:

  • Файл субтитров SubRip (*.srt)

  • Файл субтитров MicroDVD (*.sub)

  • Файл субтитров Advanced SubStation Alpha (*.ass)

  • Файл субтитров SubStation Alpha (*.ssa)

Типовые настройки компонента Weblate

Маска файла

path/*.srt

Одноязычный базовый файл

path/en.srt

Шаблон для новых переводов

path/en.srt

Формат файла

Файл субтитров SubRip

См.также

Субтитры

Excel Open XML

Добавлено в версии 3.2.

Можно импортировать и экспортировать файлы Excel Open XML (.xlsx).

Загружая для перевода файлы XLSX, имейте в виду, что учитывается только активный рабочий лист, и должны быть хотя бы колонки с названием source (содержащая исходную строку) и target (содержащая перевод). Дополнительно может быть колонка с названием context (содержащая путь к контексту строки перевода). Если вы используете скачанный XLSX для экспорта переводов в рабочую книгу Excel, вы уже получите файл в правильном формате.

Файлы HTML

Добавлено в версии 4.1.

Примечание

Поддержка этого формата в настоящее время находится в бета-режиме, приветствуются обратная связь от тестирования.

Переводимое содержимое извлекается из HTML-файлов и предлагается для перевода.

См.также

HTML

Текстовые файлы

Добавлено в версии 4.6.

Примечание

Поддержка этого формата в настоящее время находится в бета-режиме, приветствуются обратная связь от тестирования.

Переводимое содержимое извлекается из обычных текстовых файлов и предлагается для перевода. Каждый абзац переводится как отдельная строка.

Существует три варианта этого формата:

  • Обычный текстовый файл

  • Текстовый файл DokuWiki

  • Текстовый файл MediaWiki

См.также

Simple Text Documents

Формат OpenDocument

Добавлено в версии 4.1.

Примечание

Поддержка этого формата в настоящее время находится в бета-режиме, приветствуются обратная связь от тестирования.

Переводимое содержимое извлекается из файлов OpenDocument и предлагается для перевода.

См.также

Формат OpenDocument

Формат IDML

Добавлено в версии 4.1.

Примечание

Поддержка этого формата в настоящее время находится в бета-режиме, приветствуются обратная связь от тестирования.

Переводимое содержимое извлекается из файлов языка разметки Adobe InDesign и предлагается для перевода.

Формат TermBase eXchange

Добавлено в версии 4.5.

TBX — это XML-формат для обмена терминологическими данными.

Типовые настройки компонента Weblate

Маска файла

tbx/*.tbx

Одноязычный базовый файл

Пусто

Шаблон для новых переводов

Пусто

Формат файла

Файл TermBase eXchange

Формат Stringsdict

Добавлено в версии 4.8.

Примечание

Поддержка этого формата в настоящее время находится в бета-режиме, приветствуются обратная связь от тестирования.

Формат на основе XML, используемый компанией Apple, который способен хранить множественные формы строки.

Типовые настройки компонента Weblate

Маска файла

Resources/*.lproj/Localizable.stringsdict

Одноязычный базовый файл

Resources/en.lproj/Localizable.stringsdict или Resources/Base.lproj/Localizable.stringsdict

Шаблон для новых переводов

Пусто

Формат файла

Файл Stringsdict

Формат Fluent

Добавлено в версии 4.8.

Примечание

Поддержка этого формата в настоящее время находится в бета-режиме, приветствуются обратная связь от тестирования.

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

Типовые настройки компонента Weblate

Маска файла

locales/*/messages.ftl

Одноязычный базовый файл

locales/en/messages.ftl

Шаблон для новых переводов

Пусто

Формат файла

Файл Fluent

Поддержка других форматов

Большинство форматов, которые поддерживают сериализацию и которые поддерживает translate-toolkit, могут поддерживаться с лёгкостью, но они (пока) ни как не тестировались. В большинстве случаев, чтобы скрыть различия в поведении различных хранилищ translate-toolkit, в Weblate приходится добавлять тонкую прослойку.

Чтобы добавить поддержку нового формата, предпочтительный подход состоит в том, чтобы сначала реализовать его поддержку в translate-toolkit.

Интеграция с системой контроля версий

В настоящее время Weblate в качестве систем контроля версий поддерживает Git (с расширенной поддержкой GitHub pull requests, Gerrit и Subversion) и Mercurial.

Доступ к репозиториям

Репозиторий системы контроля версий, который вы хотите использовать, должен быть доступен для Weblate. При использовании общедоступного репозитория вам просто надо указать правильный URL-адрес (например, https://github.com/WeblateOrg/weblate.git), но для частных репозиториев или для URL-адресов отправки изменений настройка будет более сложной и потребует аутентификации.

Доступ к репозиториям из Hosted Weblate

Для Hosted Weblate существует выделенный пользователь для отправки изменений, зарегистрированный на GitHub, Bitbucket, Codeberg и GitLab (с именем пользователя weblate, электронной почтой hosted@weblate.org и полным именем Weblate push user). Вам необходимо добавить этого пользователя в качестве сотрудника и дать ему в вашем репозитории соответствующее права (для клонирования будет достаточно только чтения, а отправка изменений потребует права на запись). В зависимости от конкретного сервиса и настроек вашей организации, это произойдёт или сразу, или потребует подтверждения со стороны Weblate.

Приглашения GitHub пользователя weblate принимаются автоматически в течение пяти минут. На других сервисах может потребоваться ручная обработка, поэтому, наберитесь терпения.

После того, как пользователь weblate будет добавлен, вы сможете настроить Репозиторий исходного кода и URL для отправки в репозиторий по протоколу SSH (например, git@github.com:WeblateOrg/weblate.git).

Репозитории по SSH

Наиболее часто используемый метод доступа к частным репозиториям — доступ по SSH. Чтобы дать Weblate такой доступ к вышестоящему репозиторию, авторизуйте его публичный SSH-ключ (смотрите раздел SSH-ключ Weblate).

Предупреждение

На GitHub каждый ключ может быть использован только один раз, смотрите разделы Репозитории GitHub и Доступ к репозиториям из Hosted Weblate.

Weblate также сохраняет отпечаток ключа сервера при первом подключении и не сможет подключиться к нему, если в дальнейшем ключ будет изменён (смотрите раздел Проверка SSH-ключей сервера).

В случае, если его будет необходимо изменить, это можно сделать из интерфейса администратора Weblate:

_images/ssh-keys.png
SSH-ключ Weblate

Открытый ключ Weblate виден всем пользователям, просматривающим страницу О Weblate.

Администраторы могут сгенерировать или посмотреть публичный ключ, который в настоящее время использует Weblate (из блока SSH-ключи) на странице входа в интерфейс администратора.

Примечание

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

Подсказка

Сделайте резервную копию сгенерированного закрытого SSH-ключа Weblate.

Проверка SSH-ключей сервера

Weblate автоматически сохраняет для дальнейшего использования SSH-ключи серверов при первом обращении к ним.

В случае, если вы хотите, подтвердить подлинность отпечатков ключей до первого подключения к репозиторию, добавьте SSH-ключ тех серверов, к которым вы собираетесь подключаться, через пункт Добавить ключ хоста, в том же разделе интерфейса администратора. Введите имя хоста, к которому вы собираетесь получить доступ (например, gitlab.com), и нажмите Подтвердить. После этого вы сможете убедится, что отпечаток этого ключа соответствует тому серверу, который вы добавляете.

Добавленные ключи и их отпечатки будут отображаться в сообщении о подтверждении:

_images/ssh-keys-added.png

Репозитории GitHub

Доступ по SSH возможен (смотрите раздел. Репозитории по SSH), но в случае, если вам необходимо получить доступ к более чем одному репозиторию, вы столкнётесь с ограничением GitHub’а по разрешённому использованию ключей SSH (поскольку один ключ может быть использован только один раз).

В случае, если ветка для отправки не задана, проект форкается и изменения отправляются через форк. В случае если она задана, изменения отправляются в вышестоящий репозиторий и выбранную ветку.

Для небольших проектов используйте HTTPS-аутентификацию с персональным токеном доступа и вашей GitHub’овской учётной записью, смотрите подробности в документации GitHub’а: Создание токена доступа для использования из командной строки.

Для более крупных конфигураций обычно лучше создать для Weblate специального пользователя, назначить ему открытый SSH-ключ, сгенерированный Weblate (смотрите раздел SSH-ключ Weblate), и предоставить ему доступ ко всем репозиториям, которые вы собираетесь переводить. Этот подход также используется и наоблачном хостинге Weblate, для него на GitHub есть специальный пользователь weblate.

Внутренние URL-адреса Weblate

Совместное использование одной установки репозитория различными компонентами, можно ссылаясь на его размещение как weblate://проект/компонент в других (связанных) компонентах. В таком случае, ссылающиеся компоненты используют конфигурацию репозитория VCS главного (ссылочного) компонента.

Предупреждение

Удаление главного компонента также удаляет связанные компоненты.

При создании компонента, если Weblate находит другой компонент с таким же репозиторием, то он автоматически заменяет его на разделяемый репозиторий с внутренним URL-адресом. Вы можете переопределить это позже, на последнем этапе настройки компонента.

Зачем это нужно:

  • Экономия дискового пространства на сервере: хранится только одна копия репозитория.

  • Ускорение обновлений: обновляется только один репозиторий.

  • Существует только один экспортируемый репозиторий с переводами Weblate (смотрите раздел Экспортер Git).

  • Some add-ons can operate on multiple components sharing one repository, for example Уплотнение Git-коммитов.

Репозитории по HTTPS

Для доступа к защищённым HTTPS-репозиториям включите в URL-адрес имя пользователя и пароль. Не волнуйтесь, Weblate обрежет эту информацию, когда адрес будет показываться пользователям (если им вообще будет разрешено просматривать адрес репозитория).

Например, URL-адрес GitHub с добавленной аутентификацией будет выглядеть примерно следующим образом: https://пользователь:ваш_токен_доступа@github.com/WeblateOrg/weblate.git.

Примечание

Если имя вашего пользователя или пароль содержат специальные символы, то они должны быть закодированы для использования в URL, например https://user%40example.com:%24password%23@bitbucket.org/….

Использование прокси

Если вам необходимо получить доступ к репозиториям системы контроля версий по HTTP/HTTPS через прокси-сервер, настройте СКВ на его использование.

Это можно сделать с помощью установки переменных окружения http_proxy, https_proxy и all_proxy (как описано в документации cURL) или принудительно включив его использование в конфигурации системы контроля версий, например:

git config --global http.proxy http://user:password@proxy.example.com:80

Примечание

Настройка прокси должна выполняться под тем пользователем, от имени которого работает Weblate (смотрите также раздел Права доступа к файлам) и с HOME=$DATA_DIR/home (смотрите DATA_DIR), иначе процесс Git, запускаемый Weblate, не будет его использовать.

Git

Подсказка

Weblate необходим Git 2.12 или новее.

См.также

Для получения информации о том, как получить доступ к различным типам репозиториев, смотрите раздел Доступ к репозиториям.

Git c принудительной отправкой (force push)

Этот вариант ведёт себя точно так же, как и Git, с той лишь разницей, что он всегда выполняет принудительную отправку. Он предназначен только для тех случаев, когда вы используете отдельный репозиторий для переводов.

Предупреждение

Используйте с осторожностью, поскольку это может привести к потере коммитов в вашем репозитории.

Настройка конфигурации Git’а

Weblate выполняет все команды системы контроля версий с установкой HOME=$DATA_DIR/home (смотрите DATA_DIR), поэтому изменение пользовательских настроек нужно выполнять в DATA_DIR/home/.git.

Удалённые помощники Git

Вы также можете использовать удалённых помощников Git, чтобы получить поддержку других систем контроля версий, но будьте готовы самостоятельно отлаживать проблемы, которые это может вызвать.

В настоящее время в отдельных GitHub’овских репозиторияхдоступны помощники для Bazaar и Mercurial: git-remote-hg и git-remote-bzr. Скачайте их вручную и поместите куда-нибудь в пути поиска (например, в ~/bin). Убедитесь, что у вас установлены соответствующие системы контроля версий.

После их установки ссылки на такие удалённые репозитории можно будет указывать в качестве репозитория в Weblate.

Для клонирования проекта gnuhello из Launchpad с помощью Bazaar используйте:

bzr::lp:gnuhello

Для клонирования репозитория hello с selenic.com через Mercurial используйте:

hg::http://selenic.com/repo/hello

Предупреждение

Неудобство использования удалённых помощников Git’а заключается , на примере Mercurial, в том, что удалённый помощник иногда создаёт новую оконечную фиксацию (tip) при отправке изменений обратно.

GitHub pull requests

Добавлено в версии 2.3.

Это просто добавляет тонкий слой логики поверх Git с помощью API GitHub’а, что позволяет отправлять изменения в переводе в виде запросов на извлечение вместо того, чтобы выполнять push непосредственно в репозиторий.

Git отправляет изменения непосредственно в репозиторий, в то время как GitHub pull requests создаёт запросы на извлечение. Для простого доступа к Git-репозиториям последние не нужны.

You need to configure API credentials (GITHUB_CREDENTIALS) in the Weblate settings to make this work. Once configured, you will see a GitHub option when selecting Система контроля версий.

Запросы на слияние в GitLab

Добавлено в версии 3.9.

Это просто добавляет тонкий слой логики поверх Git с помощью API GitLab’а, что позволяет отправлять изменения в переводе в виде запросов на слияние вместо того, чтобы выполнять push непосредственно в репозиторий.

Нет необходимости использовать его для доступа к Git-репозиториям, обычный Git работает так же, единственная разница заключается в том, как выполняется отправка изменений в репозиторий. С помощью Git изменения отправляются непосредственно в репозиторий, в то время как Запросы на слияние в GitLab создаёт запрос на слияние.

You need to configure API credentials (GITLAB_CREDENTIALS) in the Weblate settings to make this work. Once configured, you will see a GitLab option when selecting Система контроля версий.

Gitea pull requests

Добавлено в версии 4.12.

This just adds a thin layer atop Git using the Gitea API to allow pushing translation changes as pull requests instead of pushing directly to the repository.

There is no need to use this to access Git repositories, ordinary Git works the same, the only difference is how pushing to a repository is handled. With Git changes are pushed directly to the repository, while Gitea pull requests creates pull requests.

You need to configure API credentials (GITEA_CREDENTIALS) in the Weblate settings to make this work. Once configured, you will see a Gitea option when selecting Система контроля версий.

Запросы на слияние в Pagure

Добавлено в версии 4.3.2.

Это просто добавляет тонкий слой логики поверх Git с помощью API Pagure, что позволяет отправлять изменения в переводе в виде запросов на слияние вместо того, чтобы выполнять push непосредственно в репозиторий.

Нет необходимости использовать его для доступа к Git-репозиториям, обычный Git работает так же, единственная разница заключается в том, как выполняется отправка изменений в репозиторий. С помощью Git изменения отправляются непосредственно в репозиторий, в то время как Запросы на слияние в Pagure создаёт запрос на слияние.

You need to configure API credentials (PAGURE_CREDENTIALS) in the Weblate settings to make this work. Once configured, you will see a Pagure option when selecting Система контроля версий.

Gerrit

Добавлено в версии 2.2.

Это просто добавляет тонкий слой логики поверх Git с помощью git-review , что позволяет отправлять изменения в переводе в виде запросов на рецензирование Gerrit вместо того, чтобы выполнять push непосредственно в репозиторий.

В документации Gerrit подробно описаны те настройки, которые необходимо сделать для использования таких репозиториев.

Mercurial

Добавлено в версии 2.1.

Mercurial — это ещё одна система контроля версий, которую вы можете использовать в Weblate напрямую.

Примечание

Weblate должен работать с любой версией Mercurial’а, но иногда в его интерфейсе командной строки происходят несовместимые изменения, которые нарушают его интеграцию с Weblate.

См.также

Для получения информации о том, как получить доступ к различным типам репозиториев, смотрите раздел Доступ к репозиториям.

Subversion

Добавлено в версии 2.8.

Для взаимодействия с репозиторием subversion Weblate использует команду git-svn. Это Perl-скрипт, который позволяет использовать subversion из клиента Git’а, позволяя пользователям поддерживать полный клон внутреннего репозитория и коммитить в него локально.

Примечание

Weblate автоматически пытается определить компоновку репозитория Subversion — он поддерживает как прямые URL-адреса для веток, так и репозитории со стандартной компоновкой (каталоги branches/, tags/ и trunk/). Подробнее об этом можно прочитать в документации к git-svn. Если ваш репозиторий не придерживается стандартной компоновки и вы столкнулись с ошибками, попробуйте включить в URL-адрес репозитория имя ветки, а саму ветку оставить пустой.

Изменено в версии 2.19: До этого поддерживались только хранилища, использующие стандартный макет.

Учётные данные Subversion

Weblate ожидает, что вы заранее приняли сертификат (и ваши учётные данные, если необходимо). Он будет искать возможность поместить их в каталог, указанный в DATA_DIR. Один раз примите сертификат, используя команду svn с переменной окружения $HOME, установленной в значение DATA_DIR:

# Use DATA_DIR as configured in Weblate settings.py, it is /app/data in the Docker
HOME=${DATA_DIR}/home svn co https://svn.example.com/example

См.также

DATA_DIR

Локальные файлы

Git

Подсказка

Под ним используется Git. Он требует установленного Git’а и позволяет вам перейти на использование Git’а нативно с полной историей ваших переводов.

Добавлено в версии 3.8.

Weblate также может работать без удалённой системы контроля версий. Первоначальные переводы импортируются путём их загрузки. Позже вы можете заменить отдельные файлы через загрузку файлов или добавить строки перевода непосредственно из Weblate (в настоящее время этот функционал доступен только для одноязычных переводов).

Weblate создаст свой внутренний Git-репозиторий, в котором будут отслеживаться все изменения. В случае, если вы позже решите использовать систему контроля версий для хранения переводов, у вас уже будет готовый репозиторий внутри Weblate, на основе которого можно будет создать свой собственный.

REST API Weblate’а

Добавлено в версии 2.6: REST API доступен с версии Weblate 2.6.

API доступен по адресу /api/ и основан на фреймворке Django REST. Вы можете использовать его напрямую или через Клиент Weblate.

Аутентификация и общие параметры

API публичного проекта доступен без аутентификации, хотя количество неаутентифицированных запросов сильно ограничено (по умолчанию до 100 запросов в день), так что аутентификацию всё равно рекомендуется использовать. Аутентификация использует токен, который вы можете получить в своём профиле. Используйте его в заголовке Authorization:

ANY /

Описанные здесь общее поведение запросов для API, заголовки, коды состояния и параметры применяются ко всем конечным точкам.

Параметры запроса
  • format – Формат ответа (переопределяет заголовок Accept). Возможные значения зависят от настройки REST-фреймворка, по умолчанию поддерживаются json и api. Последний предоставляет для API интерфейс веб-браузера.

  • page – Возвращает заданную страницу постраничных результатов (используйте поля next и previous в ответе для автоматизации навигации).

Заголовки запроса
  • Accept – тип содержимого ответа зависит от заголовка Accept

  • Authorization – необязательный токен для аутентификации в качестве Authorization: Token YOUR-TOKEN

Заголовки ответа
  • Content-Type – зависит от заголовка Accept запроса

  • Allow – список разрешённых для объекта методов HTTP

JSON -объект ответа
  • detail (string) – подробное описание результата (для кодов статусов HTTP, отличных от 200 OK)

  • count (int) – общее количество элементов для списков объектов

  • next (string) – URL-адрес следующей страницы для списков объектов

  • previous (string) – URL-адрес предыдущей страницы для списков объектов

  • results (array) – результаты для списков объектов

  • url (string) – URL-адрес для доступа к этому ресурсу с помощью API

  • web_url (string) – URL-адрес для доступа к этому ресурсу через веб-браузер

Коды статусов
  • 200 OK – при правильной обработке запроса

  • 201 Created – когда новый объект был успешно создан

  • 204 No Content – когда объект был успешно удалён

  • 400 Bad Request – при отсутствии параметров формы

  • 403 Forbidden – в случае отказа в доступе

  • 429 Too Many Requests – при превышении количества запросов из-за ограничения на количество запросов

Токены аутентификации

Изменено в версии 4.10: Токены с ограничениями по проекту были введены в версии 4.10.

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

Предусмотрена возможность создания токенов для доступа к API на уровне текущего проекта. Эти токены можно распознать по префиксу wlp_.

Примеры аутентификации

Пример запроса:

GET /api/ HTTP/1.1
Host: example.com
Accept: application/json, text/javascript
Authorization: Token YOUR-TOKEN

Пример ответа:

HTTP/1.0 200 OK
Date: Fri, 25 Mar 2016 09:46:12 GMT
Server: WSGIServer/0.1 Python/2.7.11+
Vary: Accept, Accept-Language, Cookie
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Content-Language: en
Allow: GET, HEAD, OPTIONS

{
    "projects":"http://example.com/api/projects/",
    "components":"http://example.com/api/components/",
    "translations":"http://example.com/api/translations/",
    "languages":"http://example.com/api/languages/"
}

Пример CURL:

curl \
    -H "Authorization: Token TOKEN" \
    https://example.com/api/

Примеры передачи параметров

Для метода POST параметры могут быть указаны либо в виде представления формы (application/x-www-form-urlencoded), либо в JSON (application/json).

Пример запроса формы:

POST /api/projects/hello/repository/ HTTP/1.1
Host: example.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Authorization: Token TOKEN

operation=pull

Пример JSON запроса:

POST /api/projects/hello/repository/ HTTP/1.1
Host: example.com
Accept: application/json
Content-Type: application/json
Authorization: Token TOKEN
Content-Length: 20

{"operation":"pull"}

Пример CURL:

curl \
    -d operation=pull \
    -H "Authorization: Token TOKEN" \
    http://example.com/api/components/hello/weblate/repository/

Пример CURL с JSON:

curl \
    --data-binary '{"operation":"pull"}' \
    -H "Content-Type: application/json" \
    -H "Authorization: Token TOKEN" \
    http://example.com/api/components/hello/weblate/repository/

Ограничение частоты запросов API

Частота запросов к API ограничена; конфигурация по умолчанию ограничивает её до 100 запросов в день для анонимных пользователей и до 5000 запросов в час для аутентифицированных пользователей.

Это ограничение можно настроить в settings.py; подробнее о его настройке смотрите в разделе Throttling документации фреймворка Django REST.

In the Docker container this can be configured using WEBLATE_API_RATELIMIT_ANON and WEBLATE_API_RATELIMIT_USER.

О состоянии ограничения частоты запросов сообщается в следующих заголовках:

X-RateLimit-Limit

Ограничение на максимальное число выполняемых запросов

X-RateLimit-Remaining

Оставшийся лимит запросов

X-RateLimit-Reset

Количество секунд до сброса окна ограничения количества запросов

Изменено в версии 4.1: Добавлены заголовки состояния ограничения количества запросов.

Точка входа в API

GET /api/

Корневая точка входа в API.

Пример запроса:

GET /api/ HTTP/1.1
Host: example.com
Accept: application/json, text/javascript
Authorization: Token YOUR-TOKEN

Пример ответа:

HTTP/1.0 200 OK
Date: Fri, 25 Mar 2016 09:46:12 GMT
Server: WSGIServer/0.1 Python/2.7.11+
Vary: Accept, Accept-Language, Cookie
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Content-Language: en
Allow: GET, HEAD, OPTIONS

{
    "projects":"http://example.com/api/projects/",
    "components":"http://example.com/api/components/",
    "translations":"http://example.com/api/translations/",
    "languages":"http://example.com/api/languages/"
}

Пользователи

Добавлено в версии 4.0.

GET /api/users/

Возвращает список пользователей, если у вас есть разрешения на просмотр пользоватей для управления. Если их нет, то вы увидите только свои данные.

См.также

Атрибуты объекта-пользователя описываются в разделе GET /api/users/(str:username)/.

POST /api/users/

Создаёт нового пользователя.

Параметры
  • username (string) – Имя пользователя

  • full_name (string) – Полное имя пользователя

  • email (string) – Электронная почта пользователя

  • is_superuser (boolean) – Является ли пользователь суперпользователем? (необязательный)

  • is_active (boolean) – Активен ли пользователь? (необязательный)

  • is_bot (boolean) – Является ли пользователь ботом? (необязательно) (используется для токенов проекта)

GET /api/users/(str: username)/

Возвращает информацию о пользователях.

Параметры
  • username (string) – Имя пользователя

JSON -объект ответа
  • username (string) – имя пользователя

  • full_name (string) – полное имя пользователя

  • email (string) – электронная почта пользователя

  • is_superuser (boolean) – является ли пользователь суперпользователем

  • is_active (boolean) – активен ли пользователь

  • is_bot (boolean) – whether the user is bot (used for project scoped tokens)

  • date_joined (string) – дата создания пользователя

  • groups (array) – ссылка на связанные группы; смотрите описание GET /api/groups/(int:id)/

Пример данных в JSON:

{
    "email": "user@example.com",
    "full_name": "Example User",
    "username": "exampleusername",
    "groups": [
        "http://example.com/api/groups/2/",
        "http://example.com/api/groups/3/"
    ],
    "is_superuser": true,
    "is_active": true,
    "is_bot": false,
    "date_joined": "2020-03-29T18:42:42.617681Z",
    "url": "http://example.com/api/users/exampleusername/",
    "statistics_url": "http://example.com/api/users/exampleusername/statistics/"
}
PUT /api/users/(str: username)/

Изменяет параметры пользователя.

Параметры
  • username (string) – Имя пользователя

JSON -объект ответа
  • username (string) – имя пользователя

  • full_name (string) – полное имя пользователя

  • email (string) – электронная почта пользователя

  • is_superuser (boolean) – является ли пользователь суперпользователем

  • is_active (boolean) – активен ли пользователь

  • is_bot (boolean) – whether the user is bot (used for project scoped tokens)

  • date_joined (string) – дата создания пользователя

PATCH /api/users/(str: username)/

Изменяет параметры пользователя.

Параметры
  • username (string) – Имя пользователя

JSON -объект ответа
  • username (string) – имя пользователя

  • full_name (string) – полное имя пользователя

  • email (string) – электронная почта пользователя

  • is_superuser (boolean) – является ли пользователь суперпользователем

  • is_active (boolean) – активен ли пользователь

  • is_bot (boolean) – whether the user is bot (used for project scoped tokens)

  • date_joined (string) – дата создания пользователя

DELETE /api/users/(str: username)/

Удаляет всю информацию о пользователе и помечает пользователя как неактивного.

Параметры
  • username (string) – Имя пользователя

POST /api/users/(str: username)/groups/

Связывает группы с пользователем.

Параметры
  • username (string) – Имя пользователя

Параметры формы
  • string group_id – Уникальный идентификатор группы

GET /api/users/(str: username)/statistics/

Список статистик пользователя.

Параметры
  • username (string) – Имя пользователя

JSON -объект ответа
  • translated (int) – Количество переводов пользователя

  • suggested (int) – Количество предложений пользователя

  • uploaded (int) – Количество загрузок пользователя

  • commented (int) – Количество комментариев пользователя

  • languages (int) – Количество языков, на которые пользователь может переводить

GET /api/users/(str: username)/notifications/

Список подписок пользователя.

Параметры
  • username (string) – Имя пользователя

POST /api/users/(str: username)/notifications/

Связывает подписки с пользователем.

Параметры
  • username (string) – Имя пользователя

JSON -объект запроса
  • notification (string) – Название зарегистрированного уведомления

  • scope (int) – Область действия уведомления из доступных вариантов

  • frequency (int) – Выбор частоты уведомлений

GET /api/users/(str: username)/notifications/(int: subscription_id)/

Возвращает связанную с пользователем подписку.

Параметры
  • username (string) – Имя пользователя

  • subscription_id (int) – Идентификатор зарегистрированного уведомления

PUT /api/users/(str: username)/notifications/(int: subscription_id)/

Редактирует связанную с пользователем подписку.

Параметры
  • username (string) – Имя пользователя

  • subscription_id (int) – Идентификатор зарегистрированного уведомления

JSON -объект запроса
  • notification (string) – Название зарегистрированного уведомления

  • scope (int) – Область действия уведомления из доступных вариантов

  • frequency (int) – Выбор частоты уведомлений

PATCH /api/users/(str: username)/notifications/(int: subscription_id)/

Редактирует связанную с пользователем подписку.

Параметры
  • username (string) – Имя пользователя

  • subscription_id (int) – Идентификатор зарегистрированного уведомления

JSON -объект запроса
  • notification (string) – Название зарегистрированного уведомления

  • scope (int) – Область действия уведомления из доступных вариантов

  • frequency (int) – Выбор частоты уведомлений

DELETE /api/users/(str: username)/notifications/(int: subscription_id)/

Удаляет связанную с пользователем подписку.

Параметры
  • username (string) – Имя пользователя

  • subscription_id – Название зарегистрированного уведомления

  • subscription_id – целое

Группы

Добавлено в версии 4.0.

GET /api/groups/

Возвращает список групп, если у вас есть разрешения на просмотр групп для управления. Если их нет, то вы можете видеть только те группы, в которые входит пользователь.

См.также

Атрибуты объекта-группы описываются в разделе GET /api/groups/(int:id)/.

POST /api/groups/

Создаёт новую группу.

Параметры
  • name (string) – Название группы

  • project_selection (int) – Группа проекта, выбранная из предложенных вариантов

  • language_selection (int) – Группа языков, выбранная из предложенных вариантов

  • defining_project (str) – link to the defining project, used for По-проектная настройка доступа; see GET /api/projects/(string:project)/

GET /api/groups/(int: id)/

Возвращает информацию о группе.

Параметры
  • id (int) – Идентификатор группы

JSON -объект ответа

Пример данных в JSON:

{
    "name": "Guests",
    "defining_project": null,
    "project_selection": 3,
    "language_selection": 1,
    "url": "http://example.com/api/groups/1/",
    "roles": [
        "http://example.com/api/roles/1/",
        "http://example.com/api/roles/2/"
    ],
    "languages": [
        "http://example.com/api/languages/en/",
        "http://example.com/api/languages/cs/",
    ],
    "projects": [
        "http://example.com/api/projects/demo1/",
        "http://example.com/api/projects/demo/"
    ],
    "componentlist": "http://example.com/api/component-lists/new/",
    "components": [
        "http://example.com/api/components/demo/weblate/"
    ]
}
PUT /api/groups/(int: id)/

Изменяет параметры группы.

Параметры
  • id (int) – Идентификатор группы

JSON -объект ответа
  • name (string) – название группы

  • project_selection (int) – целое число, соответствующее группе проектов

  • language_selection (int) – целое число, соответствующее группе языков

PATCH /api/groups/(int: id)/

Изменяет параметры группы.

Параметры
  • id (int) – Идентификатор группы

JSON -объект ответа
  • name (string) – название группы

  • project_selection (int) – целое число, соответствующее группе проектов

  • language_selection (int) – целое число, соответствующее группе языков

DELETE /api/groups/(int: id)/

Удаляет группу.

Параметры
  • id (int) – Идентификатор группы

POST /api/groups/(int: id)/roles/

Связывает роли с группой.

Параметры
  • id (int) – Идентификатор группы

Параметры формы
  • string role_id – Уникальный идентификатор роли

POST /api/groups/(int: id)/components/

Связывает компоненты с группой.

Параметры
  • id (int) – Идентификатор группы

Параметры формы
  • string component_id – Уникальный идентификатор компонента

DELETE /api/groups/(int: id)/components/(int: component_id)

Удаляет компонент из группы.

Параметры
  • id (int) – Идентификатор группы

  • component_id (int) – Уникальный идентификатор компонента

POST /api/groups/(int: id)/projects/

Связывает проекты с группой.

Параметры
  • id (int) – Идентификатор группы

Параметры формы
  • string project_id – Уникальный идентификатор проекта

DELETE /api/groups/(int: id)/projects/(int: project_id)

Удаляет проект из группы.

Параметры
  • id (int) – Идентификатор группы

  • project_id (int) – Уникальный идентификатор проекта

POST /api/groups/(int: id)/languages/

Связывает языки с группой.

Параметры
  • id (int) – Идентификатор группы

Параметры формы
  • string language_code – Уникальный код языка

DELETE /api/groups/(int: id)/languages/(string: language_code)

Удаляет язык из группы.

Параметры
  • id (int) – Идентификатор группы

  • language_code (string) – Уникальный код языка

POST /api/groups/(int: id)/componentlists/

Связывает списки компонентов с группой.

Параметры
  • id (int) – Идентификатор группы

Параметры формы
  • string component_list_id – Уникальный идентификатор списка компонентов

DELETE /api/groups/(int: id)/componentlists/(int: component_list_id)

Удаляет список компонентов из группы.

Параметры
  • id (int) – Идентификатор группы

  • component_list_id (int) – Уникальный идентификатор списка компонентов

Роли

GET /api/roles/

Возвращает список всех ролей, связанных с пользователем. Если пользователь является суперпользователем, то возвращается список всех существующих ролей.

См.также

Атрибуты объекта-роли описываются в разделе GET /api/roles/(int:id)/.

POST /api/roles/

Создает новую роль.

Параметры
  • name (string) – Название роли

  • permissions (array) – Список кодовых названий разрешений

GET /api/roles/(int: id)/

Возвращает информацию о роли.

Параметры
  • id (int) – Идентификатор роли

JSON -объект ответа
  • name (string) – Название роли

  • permissions (array) – список кодовых названий разрешений

Пример данных в JSON:

{
    "name": "Access repository",
    "permissions": [
        "vcs.access",
        "vcs.view"
    ],
    "url": "http://example.com/api/roles/1/",
}
PUT /api/roles/(int: id)/

Изменяет параметры роли.

Параметры
  • id (int) – Идентификатор роли

JSON -объект ответа
  • name (string) – Название роли

  • permissions (array) – список кодовых названий разрешений

PATCH /api/roles/(int: id)/

Изменяет параметры роли.

Параметры
  • id (int) – Идентификатор роли

JSON -объект ответа
  • name (string) – Название роли

  • permissions (array) – список кодовых названий разрешений

DELETE /api/roles/(int: id)/

Удаляет роль.

Параметры
  • id (int) – Идентификатор роли

Языки

GET /api/languages/

Возвращает список всех языков.

См.также

Атрибуты объекта-языка описываются в разделе GET /api/languages/(string:language)/.

POST /api/languages/

Создаёт новый язык.

Параметры
  • code (string) – Название языка

  • name (string) – Название языка

  • direction (string) – Направление текста

  • plural (object) – Формула множественного числа языка и количество форм множественных чисел

GET /api/languages/(string: language)/

Возвращает информацию о языке.

Параметры
  • language (string) – Код языка

JSON -объект ответа
  • code (string) – Код языка

  • direction (string) – Направление текста

  • plural (object) – Объект информации о формах множественного числа языка

  • aliases (array) – Массив псевдонимов языка

Пример данных в JSON:

{
    "code": "en",
    "direction": "ltr",
    "name": "English",
    "plural": {
        "id": 75,
        "source": 0,
        "number": 2,
        "formula": "n != 1",
        "type": 1
    },
    "aliases": [
        "english",
        "en_en",
        "base",
        "source",
        "eng"
    ],
    "url": "http://example.com/api/languages/en/",
    "web_url": "http://example.com/languages/en/",
    "statistics_url": "http://example.com/api/languages/en/statistics/"
}
PUT /api/languages/(string: language)/

Изменяет параметры языка.

Параметры
  • language (string) – Код языка

JSON -объект запроса
  • name (string) – Название языка

  • direction (string) – Направление текста

  • plural (object) – Данные по формам множественного числа языка

PATCH /api/languages/(string: language)/

Изменяет параметры языка.

Параметры
  • language (string) – Код языка

JSON -объект запроса
  • name (string) – Название языка

  • direction (string) – Направление текста

  • plural (object) – Данные по формам множественного числа языка

DELETE /api/languages/(string: language)/

Удаляет язык.

Параметры
  • language (string) – Код языка

GET /api/languages/(string: language)/statistics/

Возвращает статистику по языку.

Параметры
  • language (string) – Код языка

JSON -объект ответа
  • total (int) – общее количество строк

  • total_words (int) – общее количество слов

  • last_change (timestamp) – последние изменения в языке

  • recent_changes (int) – общее количество изменений

  • translated (int) – количество переведенных строк

  • translated_percent (float) – процент переведённых строк

  • translated_words (int) – количество переведённых слов

  • translated_words_percent (int) – процент переведенных слов

  • translated_chars (int) – количество переведённых символов

  • translated_chars_percent (int) – процент переведенных символов

  • total_chars (int) – общее количество символов

  • fuzzy (int) – количество неточных (отмеченных «на правку») переводов

  • fuzzy_percent (int) – процент неточных (отмеченных «на правку») переводов

  • failing (int) – количество строк с неудачными проверками

  • failing – процент строк с неудачными проверками

Проекты

GET /api/projects/

Возвращает список всех проектов.

См.также

Атрибуты объекта-проекта описываются в разделе GET /api/projects/(string:project)/.

POST /api/projects/

Добавлено в версии 3.9.

Создаёт новый проект.

Параметры
  • name (string) – Название проекта

  • slug (string) – Плашка проекта

  • web (string) – Веб-сайт проекта

GET /api/projects/(string: project)/

Возвращает информацию о проекте.

Параметры
  • project (string) – URL-плашка проекта

JSON -объект ответа

Пример данных в JSON:

{
    "name": "Hello",
    "slug": "hello",
    "url": "http://example.com/api/projects/hello/",
    "web": "https://weblate.org/",
    "web_url": "http://example.com/projects/hello/"
}
PATCH /api/projects/(string: project)/

Добавлено в версии 4.3.

Вносит изменения в проект с помощью PATCH-запроса.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

PUT /api/projects/(string: project)/

Добавлено в версии 4.3.

Вносит изменения в проект с помощью PUT-запроса.

Параметры
  • project (string) – URL-плашка проекта

DELETE /api/projects/(string: project)/

Добавлено в версии 3.9.

Удаляет проект.

Параметры
  • project (string) – URL-плашка проекта

GET /api/projects/(string: project)/changes/

Возвращает список изменений проекта. По сути, эта точка входа работает так же и принимает те же самые параметры, что и GET /api/changes/, только для проекта.

Параметры
  • project (string) – URL-плашка проекта

JSON -объект ответа
  • results (array) – массив объектов компонентов; смотрите описание GET /api/changes/(int:id)/

GET /api/projects/(string: project)/repository/

Возвращает информацию о состоянии репозитория системы контроля версий. Эта конечная точка содержит только общую сводку по всем репозиториям проекта. Для получения более подробной информации о состоянии используйте конечную точку GET /api/components/(string:project)/(string:component)/repository/.

Параметры
  • project (string) – URL-плашка проекта

JSON -объект ответа
  • needs_commit (boolean) – есть ли какие-нибудь отложенные изменения для коммита

  • needs_merge (boolean) – есть ли какие-нибудь изменения в вышестоящем репозитории для объединения

  • needs_push (boolean) – есть ли какие-нибудь локальные изменения для отправки

Пример данных в JSON:

{
    "needs_commit": true,
    "needs_merge": false,
    "needs_push": true
}
POST /api/projects/(string: project)/repository/

Выполняет заданную операцию на репозитории системы контроля версий.

Параметры
  • project (string) – URL-плашка проекта

JSON -объект запроса
  • operation (string) – Выполняемые операции: одна из push, pull, commit, reset, cleanup, file-sync

JSON -объект ответа
  • result (boolean) – результат операции

Пример CURL:

curl \
    -d operation=pull \
    -H "Authorization: Token TOKEN" \
    http://example.com/api/projects/hello/repository/

Пример JSON запроса:

POST /api/projects/hello/repository/ HTTP/1.1
Host: example.com
Accept: application/json
Content-Type: application/json
Authorization: Token TOKEN
Content-Length: 20

{"operation":"pull"}

Пример ответа в JSON:

HTTP/1.0 200 OK
Date: Tue, 12 Apr 2016 09:32:50 GMT
Server: WSGIServer/0.1 Python/2.7.11+
Vary: Accept, Accept-Language, Cookie
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Content-Language: en
Allow: GET, POST, HEAD, OPTIONS

{"result":true}
GET /api/projects/(string: project)/components/

Возвращает список компонентов перевода в указанном проекте.

Параметры
  • project (string) – URL-плашка проекта

JSON -объект ответа
POST /api/projects/(string: project)/components/

Добавлено в версии 3.9.

Изменено в версии 4.3: Параметры zipfile и docfile теперь доступны и для компонентов без системы контроля версий, смотреть раздел Локальные файлы.

Изменено в версии 4.6: Клонированные репозитории теперь автоматически разделяются внутри проекта с помощью Внутренние URL-адреса Weblate. Используйте disable_autoshare, чтобы отключить это.

Создаёт компоненты перевода в указанном проекте.

Подсказка

Используйте Внутренние URL-адреса Weblate при создании нескольких компонентов из одного VCS-репозитория.

Примечание

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

Параметры
  • project (string) – URL-плашка проекта

Параметры формы
  • file zipfile – ZIP-файл, который будет загружен в Weblate для инициализации переводов

  • file docfile – Документ для перевода

  • boolean disable_autoshare – Отключает автоматический обмен репозиториями через Внутренние URL-адреса Weblate.

JSON -объект запроса
JSON -объект ответа

JSON не может использоваться при загрузке файлов с помощью параметров zipfile и docfile. Данные должны быть загружены в формате multipart/form-data.

Пример запроса CURL:

curl \
    --form docfile=@strings.html \
    --form name=Weblate \
    --form slug=weblate \
    --form file_format=html \
    --form new_lang=add \
    -H "Authorization: Token TOKEN" \
    http://example.com/api/projects/hello/components/

Пример CURL JSON запроса:

curl \
    --data-binary '{
        "branch": "main",
        "file_format": "po",
        "filemask": "po/*.po",
        "name": "Weblate",
        "slug": "weblate",
        "repo": "https://github.com/WeblateOrg/hello.git",
        "template": "",
        "new_base": "po/hello.pot",
        "vcs": "git"
    }' \
    -H "Content-Type: application/json" \
    -H "Authorization: Token TOKEN" \
    http://example.com/api/projects/hello/components/

Запрос JSON для создания нового компонента из Git:

POST /api/projects/hello/components/ HTTP/1.1
Host: example.com
Accept: application/json
Content-Type: application/json
Authorization: Token TOKEN
Content-Length: 20

{
    "branch": "main",
    "file_format": "po",
    "filemask": "po/*.po",
    "name": "Weblate",
    "slug": "weblate",
    "repo": "https://github.com/WeblateOrg/hello.git",
    "template": "",
    "new_base": "po/hello.pot",
    "vcs": "git"
}

Запрос JSON для создания нового компонента на основе другого компонента:

POST /api/projects/hello/components/ HTTP/1.1
Host: example.com
Accept: application/json
Content-Type: application/json
Authorization: Token TOKEN
Content-Length: 20

{
    "file_format": "po",
    "filemask": "po/*.po",
    "name": "Weblate",
    "slug": "weblate",
    "repo": "weblate://weblate/hello",
    "template": "",
    "new_base": "po/hello.pot",
    "vcs": "git"
}

Пример ответа в JSON:

HTTP/1.0 200 OK
Date: Tue, 12 Apr 2016 09:32:50 GMT
Server: WSGIServer/0.1 Python/2.7.11+
Vary: Accept, Accept-Language, Cookie
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Content-Language: en
Allow: GET, POST, HEAD, OPTIONS

{
    "branch": "main",
    "file_format": "po",
    "filemask": "po/*.po",
    "git_export": "",
    "license": "",
    "license_url": "",
    "name": "Weblate",
    "slug": "weblate",
    "project": {
        "name": "Hello",
        "slug": "hello",
        "source_language": {
            "code": "en",
            "direction": "ltr",
            "name": "English",
            "url": "http://example.com/api/languages/en/",
            "web_url": "http://example.com/languages/en/"
        },
        "url": "http://example.com/api/projects/hello/",
        "web": "https://weblate.org/",
        "web_url": "http://example.com/projects/hello/"
    },
    "repo": "file:///home/nijel/work/weblate-hello",
    "template": "",
    "new_base": "",
    "url": "http://example.com/api/components/hello/weblate/",
    "vcs": "git",
    "web_url": "http://example.com/projects/hello/weblate/"
}
GET /api/projects/(string: project)/languages/

Возвращает разбитую на страницы статистику по всем языкам проекта.

Добавлено в версии 3.8.

Параметры
  • project (string) – URL-плашка проекта

JSON -объект ответа
  • results (array) – массив объектов статистики перевода

  • language (string) – название языка

  • code (string) – код языка

  • total (int) – общее количество строк

  • translated (int) – количество переведенных строк

  • translated_percent (float) – процент переведённых строк

  • total_words (int) – общее количество слов

  • translated_words (int) – количество переведённых слов

  • words_percent (float) – процент переведенных слов

GET /api/projects/(string: project)/statistics/

Возвращает статистику по проекту.

Добавлено в версии 3.8.

Параметры
  • project (string) – URL-плашка проекта

JSON -объект ответа
  • total (int) – общее количество строк

  • translated (int) – количество переведенных строк

  • translated_percent (float) – процент переведённых строк

  • total_words (int) – общее количество слов

  • translated_words (int) – количество переведённых слов

  • words_percent (float) – процент переведенных слов

Компоненты

Подсказка

Используйте POST /api/projects/(string:project)/components/ для создания новых компонентов.

GET /api/components/

Возвращает список компонентов перевода.

См.также

Атрибуты объекта-компонента описываются в разделе GET /api/components/(string:project)/(string:component)/.

GET /api/components/(string: project)/(string: component)/

Возвращает информацию о компоненте перевода.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

JSON -объект ответа

Пример данных в JSON:

{
    "branch": "main",
    "file_format": "po",
    "filemask": "po/*.po",
    "git_export": "",
    "license": "",
    "license_url": "",
    "name": "Weblate",
    "slug": "weblate",
    "project": {
        "name": "Hello",
        "slug": "hello",
        "source_language": {
            "code": "en",
            "direction": "ltr",
            "name": "English",
            "url": "http://example.com/api/languages/en/",
            "web_url": "http://example.com/languages/en/"
        },
        "url": "http://example.com/api/projects/hello/",
        "web": "https://weblate.org/",
        "web_url": "http://example.com/projects/hello/"
    },
    "source_language": {
        "code": "en",
        "direction": "ltr",
        "name": "English",
        "url": "http://example.com/api/languages/en/",
        "web_url": "http://example.com/languages/en/"
    },
    "repo": "file:///home/nijel/work/weblate-hello",
    "template": "",
    "new_base": "",
    "url": "http://example.com/api/components/hello/weblate/",
    "vcs": "git",
    "web_url": "http://example.com/projects/hello/weblate/"
}
PATCH /api/components/(string: project)/(string: component)/

Вносит изменения в компонент с помощью PATCH-запроса.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

  • source_language (string) – Код исходного языка проекта (необязательный)

JSON -объект запроса
  • name (string) – название компонента

  • slug (string) – плашка компонента

  • repo (string) – URL-адрес репозитория системы контроля версий

Пример CURL:

curl \
    --data-binary '{"name": "new name"}' \
    -H "Content-Type: application/json" \
    -H "Authorization: Token TOKEN" \
    PATCH http://example.com/api/projects/hello/components/

Пример JSON запроса:

PATCH /api/projects/hello/components/ HTTP/1.1
Host: example.com
Accept: application/json
Content-Type: application/json
Authorization: Token TOKEN
Content-Length: 20

{
    "name": "new name"
}

Пример ответа в JSON:

HTTP/1.0 200 OK
Date: Tue, 12 Apr 2016 09:32:50 GMT
Server: WSGIServer/0.1 Python/2.7.11+
Vary: Accept, Accept-Language, Cookie
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Content-Language: en
Allow: GET, POST, HEAD, OPTIONS

{
    "branch": "main",
    "file_format": "po",
    "filemask": "po/*.po",
    "git_export": "",
    "license": "",
    "license_url": "",
    "name": "new name",
    "slug": "weblate",
    "project": {
        "name": "Hello",
        "slug": "hello",
        "source_language": {
            "code": "en",
            "direction": "ltr",
            "name": "English",
            "url": "http://example.com/api/languages/en/",
            "web_url": "http://example.com/languages/en/"
        },
        "url": "http://example.com/api/projects/hello/",
        "web": "https://weblate.org/",
        "web_url": "http://example.com/projects/hello/"
    },
    "repo": "file:///home/nijel/work/weblate-hello",
    "template": "",
    "new_base": "",
    "url": "http://example.com/api/components/hello/weblate/",
    "vcs": "git",
    "web_url": "http://example.com/projects/hello/weblate/"
}
PUT /api/components/(string: project)/(string: component)/

Вносит изменения в компонент с помощью PATCH-запроса.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

JSON -объект запроса
  • branch (string) – Ветка репозитория системы контроля версий

  • file_format (string) – формат файла переводов

  • filemask (string) – маска файлов перевода в репозитории

  • name (string) – название компонента

  • slug (string) – плашка компонента

  • repo (string) – URL-адрес репозитория системы контроля версий

  • template (string) – базовый файл для одноязычных переводов

  • new_base (string) – базовый файл для добавления новых переводов

  • vcs (string) – система контроля версий

DELETE /api/components/(string: project)/(string: component)/

Добавлено в версии 3.9.

Удаляет компонент.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

GET /api/components/(string: project)/(string: component)/changes/

Возвращает список изменений компонента. По сути, эта точка входа работает так же и принимает те же самые параметры, что и GET /api/changes/, только для компонента.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

JSON -объект ответа
  • results (array) – массив объектов компонентов; смотрите описание GET /api/changes/(int:id)/

GET /api/components/(string: project)/(string: component)/file/

Добавлено в версии 4.9.

Загружает все доступные переводы, связанные с компонентом, в виде архивного файла, используя запрашиваемый формат.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

Параметры запроса
  • format (string) – Формат архива для использования; если не указан, по умолчанию используется zip; Поддерживаемые форматы: zip

  • q (string) – Фильтр загруженных строк, смотрите раздел. Поиск.

GET /api/components/(string: project)/(string: component)/screenshots/

Возвращает список снимков экрана компонента.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

JSON -объект ответа
GET /api/components/(string: project)/(string: component)/lock/

Возвращает состояние блокировки компонента.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

JSON -объект ответа
  • locked (boolean) – заблокирован ли компонент для обновлений

Пример данных в JSON:

{
    "locked": false
}
POST /api/components/(string: project)/(string: component)/lock/

Устанавливает статус блокировки компонента.

Ответ такой же, как и у GET /api/components/(string:project)/(string:component)/lock/.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

JSON -объект запроса
  • lock – Логическое значение, стоит ли блокировка или нет.

Пример CURL:

curl \
    -d lock=true \
    -H "Authorization: Token TOKEN" \
    http://example.com/api/components/hello/weblate/repository/

Пример JSON запроса:

POST /api/components/hello/weblate/repository/ HTTP/1.1
Host: example.com
Accept: application/json
Content-Type: application/json
Authorization: Token TOKEN
Content-Length: 20

{"lock": true}

Пример ответа в JSON:

HTTP/1.0 200 OK
Date: Tue, 12 Apr 2016 09:32:50 GMT
Server: WSGIServer/0.1 Python/2.7.11+
Vary: Accept, Accept-Language, Cookie
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Content-Language: en
Allow: GET, POST, HEAD, OPTIONS

{"locked":true}
GET /api/components/(string: project)/(string: component)/repository/

Возвращает информацию о состоянии репозитория системы контроля версий.

Ответ такой же, как и у GET /api/projects/(string:project)/repository/.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

JSON -объект ответа
  • needs_commit (boolean) – есть ли какие-нибудь отложенные изменения для коммита

  • needs_merge (boolean) – есть ли какие-нибудь изменения в вышестоящем репозитории для объединения

  • needs_push (boolean) – есть ли какие-нибудь локальные изменения для отправки

  • remote_commit (string) – Информация о коммите из удаленного репозитория

  • status (string) – Статус репозитория системы контроля версий по её же данным

  • merge_failure – Текст, описывающий причину неудачи объединения или null, если её нет

POST /api/components/(string: project)/(string: component)/repository/

Выполняет заданную операцию на репозитории системы контроля версий.

Документацию смотрите в описании POST /api/projects/(string:project)/repository/.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

JSON -объект запроса
  • operation (string) – Выполняемые операции: одна из push, pull, commit, reset или cleanup

JSON -объект ответа
  • result (boolean) – результат операции

Пример CURL:

curl \
    -d operation=pull \
    -H "Authorization: Token TOKEN" \
    http://example.com/api/components/hello/weblate/repository/

Пример JSON запроса:

POST /api/components/hello/weblate/repository/ HTTP/1.1
Host: example.com
Accept: application/json
Content-Type: application/json
Authorization: Token TOKEN
Content-Length: 20

{"operation":"pull"}

Пример ответа в JSON:

HTTP/1.0 200 OK
Date: Tue, 12 Apr 2016 09:32:50 GMT
Server: WSGIServer/0.1 Python/2.7.11+
Vary: Accept, Accept-Language, Cookie
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Content-Language: en
Allow: GET, POST, HEAD, OPTIONS

{"result":true}
GET /api/components/(string: project)/(string: component)/monolingual_base/

Скачивает базовый файл для одноязычных переводов.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

GET /api/components/(string: project)/(string: component)/new_template/

Скачивает файл шаблона для новых переводов.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

GET /api/components/(string: project)/(string: component)/translations/

Возвращает список объектов перевода в указанном компоненте.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

JSON -объект ответа
POST /api/components/(string: project)/(string: component)/translations/

Создаёт новый перевод в указанном компоненте.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

JSON -объект запроса
JSON -объект ответа
  • result (object) – новый созданный объект перевода

Пример CURL:

curl \
    -d language_code=cs \
    -H "Authorization: Token TOKEN" \
    http://example.com/api/projects/hello/components/

Пример JSON запроса:

POST /api/projects/hello/components/ HTTP/1.1
Host: example.com
Accept: application/json
Content-Type: application/json
Authorization: Token TOKEN
Content-Length: 20

{"language_code": "cs"}

Пример ответа в JSON:

HTTP/1.0 200 OK
Date: Tue, 12 Apr 2016 09:32:50 GMT
Server: WSGIServer/0.1 Python/2.7.11+
Vary: Accept, Accept-Language, Cookie
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Content-Language: en
Allow: GET, POST, HEAD, OPTIONS

{
    "failing_checks": 0,
    "failing_checks_percent": 0,
    "failing_checks_words": 0,
    "filename": "po/cs.po",
    "fuzzy": 0,
    "fuzzy_percent": 0.0,
    "fuzzy_words": 0,
    "have_comment": 0,
    "have_suggestion": 0,
    "is_template": false,
    "is_source": false,
    "language": {
        "code": "cs",
        "direction": "ltr",
        "name": "Czech",
        "url": "http://example.com/api/languages/cs/",
        "web_url": "http://example.com/languages/cs/"
    },
    "language_code": "cs",
    "id": 125,
    "last_author": null,
    "last_change": null,
    "share_url": "http://example.com/engage/hello/cs/",
    "total": 4,
    "total_words": 15,
    "translate_url": "http://example.com/translate/hello/weblate/cs/",
    "translated": 0,
    "translated_percent": 0.0,
    "translated_words": 0,
    "url": "http://example.com/api/translations/hello/weblate/cs/",
    "web_url": "http://example.com/projects/hello/weblate/cs/"
}
GET /api/components/(string: project)/(string: component)/statistics/

Возвращает разбитую на страницы статистику по всем переводам компонента.

Добавлено в версии 2.7.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

JSON -объект ответа

Возвращает проекты, связанные с компонентом.

Добавлено в версии 4.5.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

JSON -объект ответа
POST /api/components/(string: project)/(string: component)/links/

Связывает проект с компонентом.

Добавлено в версии 4.5.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

Параметры формы
  • string project_slug – Плашка проекта

Удаляет связь проекта с компонентом.

Добавлено в версии 4.5.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

  • project_slug (string) – Плашка удаляемого проекта

Переводы

GET /api/translations/

Возвращает список переводов.

См.также

Атрибуты объекта-перевода описываются в разделе GET /api/translations/(string:project)/(string:component)/(string:language)/.

GET /api/translations/(string: project)/(string: component)/(string: language)/

Возвращает информацию о переводе.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

  • language (string) – Код языка перевода

JSON -объект ответа
  • component (object) – объект компонента; смотрите описание GET /api/components/(string:project)/(string:component)/

  • failing_checks (int) – количество строк с неудачными проверками

  • failing_checks_percent (float) – процент строк с неудачными проверками

  • failing_checks_words (int) – количество слов с неудачными проверками

  • filename (string) – имя файла перевода

  • fuzzy (int) – количество неточных (отмеченных «на правку») переводов

  • fuzzy_percent (float) – процент неточных (отмеченных «на правку») переводов

  • fuzzy_words (int) – количество слов в неточных (отмеченных «на правку») строках

  • have_comment (int) – количество строк с комментариями

  • have_suggestion (int) – количество строк с комментариями

  • is_template (boolean) – использует ли перевод одноязычные файлы

  • language (object) – объект исходного языка; смотрите описание GET /api/languages/(string:language)/

  • language_code (string) – код языка, используемый в репозитории; он может отличаться от кода языка в объекте языка

  • last_author (string) – имя последнего автора

  • last_change (timestamp) – метка времени последнего изменения

  • revision (string) – хэш ревизии файла

  • share_url (string) – URL-адрес для принятия участия в переводе, ведущий на вводную страницу

  • total (int) – общее количество строк

  • total_words (int) – общее количество слов

  • translate_url (string) – URL-адрес для перевода

  • translated (int) – количество переведенных строк

  • translated_percent (float) – процент переведённых строк

  • translated_words (int) – количество переведённых слов

  • repository_url (string) – URL-адрес статуса репозитория; смотрите описание GET /api/translations/(string:project)/(string:component)/(string:language)/repository/

  • file_url (string) – URL-адрес объекта файла; смотрите описание GET /api/translations/(string:project)/(string:component)/(string:language)/file/

  • changes_list_url (string) – URL-адрес списка изменений; смотрите описание GET /api/translations/(string:project)/(string:component)/(string:language)/changes/

  • units_list_url (string) – URL-адрес списка строк; смотрите описание GET /api/translations/(string:project)/(string:component)/(string:language)/units/

Пример данных в JSON:

{
    "component": {
        "branch": "main",
        "file_format": "po",
        "filemask": "po/*.po",
        "git_export": "",
        "license": "",
        "license_url": "",
        "name": "Weblate",
        "new_base": "",
        "project": {
            "name": "Hello",
            "slug": "hello",
            "source_language": {
                "code": "en",
                "direction": "ltr",
                "name": "English",
                "url": "http://example.com/api/languages/en/",
                "web_url": "http://example.com/languages/en/"
            },
            "url": "http://example.com/api/projects/hello/",
            "web": "https://weblate.org/",
            "web_url": "http://example.com/projects/hello/"
        },
        "repo": "file:///home/nijel/work/weblate-hello",
        "slug": "weblate",
        "template": "",
        "url": "http://example.com/api/components/hello/weblate/",
        "vcs": "git",
        "web_url": "http://example.com/projects/hello/weblate/"
    },
    "failing_checks": 3,
    "failing_checks_percent": 75.0,
    "failing_checks_words": 11,
    "filename": "po/cs.po",
    "fuzzy": 0,
    "fuzzy_percent": 0.0,
    "fuzzy_words": 0,
    "have_comment": 0,
    "have_suggestion": 0,
    "is_template": false,
    "language": {
        "code": "cs",
        "direction": "ltr",
        "name": "Czech",
        "url": "http://example.com/api/languages/cs/",
        "web_url": "http://example.com/languages/cs/"
    },
    "language_code": "cs",
    "last_author": "Weblate Admin",
    "last_change": "2016-03-07T10:20:05.499",
    "revision": "7ddfafe6daaf57fc8654cc852ea6be212b015792",
    "share_url": "http://example.com/engage/hello/cs/",
    "total": 4,
    "total_words": 15,
    "translate_url": "http://example.com/translate/hello/weblate/cs/",
    "translated": 4,
    "translated_percent": 100.0,
    "translated_words": 15,
    "url": "http://example.com/api/translations/hello/weblate/cs/",
    "web_url": "http://example.com/projects/hello/weblate/cs/"
}
DELETE /api/translations/(string: project)/(string: component)/(string: language)/

Добавлено в версии 3.9.

Удаляет перевод.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

  • language (string) – Код языка перевода

GET /api/translations/(string: project)/(string: component)/(string: language)/changes/

Возвращает список изменений перевода. По сути, эта точка входа работает так же и принимает те же самые параметры, что и GET /api/changes/, только для перевода.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

  • language (string) – Код языка перевода

JSON -объект ответа
  • results (array) – массив объектов компонентов; смотрите описание GET /api/changes/(int:id)/

GET /api/translations/(string: project)/(string: component)/(string: language)/units/

Возвращает список единиц перевода.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

  • language (string) – Код языка перевода

  • q (string) – Строка поискового запроса (необязательный, смотреть раздел Поиск)

JSON -объект ответа
  • results (array) – массив объектов компонента; смотрите описание GET /api/units/(int:id)/

POST /api/translations/(string: project)/(string: component)/(string: language)/units/

Добавляет новую одноязычную единицу перевода.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

  • language (string) – Код языка перевода

JSON -объект запроса
  • key (string) – Name of translation unit (used as key or context)

  • value (array) – Source strings (use single string if not creating plural)

POST /api/translations/(string: project)/(string: component)/(string: language)/autotranslate/

Запускает автоматический перевод.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

  • language (string) – Код языка перевода

JSON -объект запроса
  • mode (string) – Режим автоматического перевода

  • filter_type (string) – Тип фильтра автоматического перевода

  • auto_source (string) – Источник автоматического перевода - mt или others

  • component (string) – Добавлять переводы этого компонента в общую память переводов проекта, дабы получить к ним доступ из других компонентов.

  • engines (array) – Механизмы машинного перевода

  • threshold (string) – Порог оценки

GET /api/translations/(string: project)/(string: component)/(string: language)/file/

Скачивает текущий файл перевода в том виде, в котором он хранится в VCS (без параметра format) или преобразован в другой формат (смотреть раздел Скачивание переводов).

Примечание

Эта конечная точка API использует отличающуюся от остального API логику вывода, так как она работает не с данными, а с целым файлом. Отличается логика при установке допустимого параметра format — без него вы получите файл перевода, хранящийся в системе контроля версий.

Параметры запроса
  • format – Используемый формат файла; если не указан, преобразование формата не происходит; поддерживаемые форматы файлов: po, mo, xliff, xliff11, tbx, csv, xlsx, json, aresource и strings

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

  • language (string) – Код языка перевода

POST /api/translations/(string: project)/(string: component)/(string: language)/file/

Загружает новый файл с переводами.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

  • language (string) – Код языка перевода

Параметры формы
  • string conflict – Как поступать с конфликтами (ignore, replace-translated или replace-approved)

  • file file – Загруженный файл

  • string email – Эл. почта автора

  • string author – Имя автора

  • string method – Метод загрузки (translate, approve, suggest, fuzzy, replace, source или add), смотрите раздел Способы импорта

  • string fuzzy – Что делать с неточными, отмеченными на правку, переводами (пусто, process или approve)

Пример CURL:

curl -X POST \
    -F file=@strings.xml \
    -H "Authorization: Token TOKEN" \
    http://example.com/api/translations/hello/android/cs/file/
GET /api/translations/(string: project)/(string: component)/(string: language)/repository/

Возвращает информацию о состоянии репозитория системы контроля версий.

Ответ такой же, как и у GET /api/components/(string:project)/(string:component)/repository/.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

  • language (string) – Код языка перевода

POST /api/translations/(string: project)/(string: component)/(string: language)/repository/

Выполняет заданную операцию на репозитории системы контроля версий.

Документацию смотрите в описании POST /api/projects/(string:project)/repository/.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

  • language (string) – Код языка перевода

JSON -объект запроса
  • operation (string) – Выполняемые операции: одна из push, pull, commit, reset или cleanup

JSON -объект ответа
  • result (boolean) – результат операции

GET /api/translations/(string: project)/(string: component)/(string: language)/statistics/

Возвращает подробную статистику по переводам.

Добавлено в версии 2.7.

Параметры
  • project (string) – URL-плашка проекта

  • component (string) – URL-плашка компонента

  • language (string) – Код языка перевода

JSON -объект ответа
  • code (string) – код языка

  • failing (int) – количество неудачных проверок

  • failing_percent (float) – процент неудачных проверок

  • fuzzy (int) – количество неточных (отмеченных «на правку») переводов

  • fuzzy_percent (float) – процент неточных (отмеченных «на правку») переводов

  • total_words (int) – общее количество слов

  • translated_words (int) – количество переведённых слов

  • last_author (string) – имя последнего автора

  • last_change (timestamp) – дата последнего изменения

  • name (string) – название языка

  • total (int) – общее количество строк

  • translated (int) – количество переведенных строк

  • translated_percent (float) – процент переведённых строк

  • url (string) – URL-адрес для доступа к переводу (URL-адрес вводной страницы)

  • url_translate (string) – URL-адрес для доступа к переводу (реальный URL-адрес перевода)

Единицы перевода

Единица перевода (unit) — это единичный фрагмент перевода, сопоставляющий исходную строку и соответствующий ей перевод, а также содержащий некоторые связанные с ними метаданные. Этот термин унаследован от Translate Toolkit и XLIFF.

Добавлено в версии 2.10.

GET /api/units/

Возвращает список единиц перевода.

См.также

Атрибуты объекта единицы перевода описываются в разделе GET /api/units/(int:id)/.

GET /api/units/(int: id)/

Изменено в версии 4.3: target и source теперь являются массивами, чтобы корректно обрабатывать строки со множественным числом.

Возвращает информацию о единице перевода.

Параметры
  • id (int) – Идентификатор единицы перевода

JSON -объект ответа
  • translation (string) – URL-адрес связанного объекта перевода

  • source (array) – исходная строка

  • previous_source (string) – предыдущая исходная строка, использованная для поиска неточного соответствия

  • target (array) – целевая строка

  • id_hash (string) – уникальный идентификатор единицы перевода

  • content_hash (string) – уникальный идентификатор исходной строки

  • location (string) – местоположение единицы перевода в исходном коде

  • context (string) – контекст единицы перевода

  • note (string) – примечания к единице перевода

  • flags (string) – флаги единицы перевода

  • state (int) – unit state, 0 - untranslated, 10 - needs editing, 20 - translated, 30 - approved, 100 - read only

  • fuzzy (boolean) – является ли перевод единицы перевода неточным или отмеченным на правку

  • translated (boolean) – переведена ли единица перевода

  • approved (boolean) – одобрена ли единица перевода

  • position (int) – позиция единицы перевода в файле перевода

  • has_suggestion (boolean) – содержит ли единица перевода предложения

  • has_comment (boolean) – содержит ли единица перевода комментарии

  • has_failing_check (boolean) – имеются ли у единицы перевода неудачные проверки

  • num_words (int) – количество слов в исходной строке

  • priority (int) – приоритет перевода; по умолчанию равен 100

  • id (int) – идентификатор единицы перевода

  • explanation (string) – Пояснения для строки, доступные для данной единицы перевода, смотрите раздел Дополнительная информация об исходных строках

  • extra_flags (string) – Дополнительные флаги строки, доступны на исходных единицах перевода, смотрите раздел Настройка поведения с помощью флагов

  • web_url (string) – URL-адрес, по которому можно отредактировать единицу перевода

  • souce_unit (string) – Ссылка на исходную единицу перевода; смотрите описание GET /api/units/(int:id)/

  • pending (boolean) – whether the unit is pending for write

  • timestamp (timestamp) – string age

PATCH /api/units/(int: id)/

Добавлено в версии 4.3.

Выполняет частичное обновление единицы перевода.

Параметры
  • id (int) – Идентификатор единицы перевода

JSON -объект запроса
PUT /api/units/(int: id)/

Добавлено в версии 4.3.

Выполняет полное обновление единицы перевода.

Параметры
  • id (int) – Идентификатор единицы перевода

JSON -объект запроса
DELETE /api/units/(int: id)/

Добавлено в версии 4.3.

Удаляет единицу перевода.

Параметры
  • id (int) – Идентификатор единицы перевода

Изменения

Добавлено в версии 2.10.

GET /api/changes/

Изменено в версии 4.1: Фильтрация изменений была введена в выпуске 4.1.

Возвращает список изменений в переводе.

См.также

Атрибуты объекта-изменения описываются в разделе GET /api/changes/(int:id)/.

Параметры запроса
  • user (string) – Имя пользователя для фильтров

  • action (int) – Действие для фильтра, может быть указано несколько раз

  • timestamp_after (timestamp) – Временная метка в формате ISO 8601, изменения после которой нужно вернуть

  • timestamp_before (timestamp) – Временная метка в формате ISO 8601, изменения до которой нужно вернуть

GET /api/changes/(int: id)/

Возвращает информацию об изменении в переводе.

Параметры
  • id (int) – Идентификатор изменения

JSON -объект ответа
  • unit (string) – URL-адрес связанного объекта единицы перевода

  • translation (string) – URL-адрес связанного объекта перевода

  • component (string) – URL-адрес связанного объекта компонента

  • user (string) – URL-адрес связанного объекта пользователя

  • author (string) – URL-адрес связанного объекта автора

  • timestamp (timestamp) – временная метка события

  • action (int) – числовой идентификатор действия

  • action_name (string) – текстовое описание действия

  • target (string) – изменённый текст или информация о событии

  • id (int) – идентификатор изменения

Снимки экрана

Добавлено в версии 2.14.

GET /api/screenshots/

Возвращает список снимков экрана для исходных строк.

См.также

Атрибуты объекта снимка экрана описываются в разделе GET /api/screenshots/(int:id)/.

GET /api/screenshots/(int: id)/

Возвращает информацию о снимке экрана.

Параметры
  • id (int) – Идентификатор снимка экрана

JSON -объект ответа
  • name (string) – название снимка экрана

  • component (string) – URL-адрес связанного объекта компонента

  • file_url (string) – URL-адрес для скачивания файла; смотрите описание GET /api/screenshots/(int:id)/file/

  • units (array) – ссылка на связанную информацию об исходной строке; смотрите описание GET /api/units/(int:id)/

GET /api/screenshots/(int: id)/file/

Скачивает изображение снимка экрана.

Параметры
  • id (int) – Идентификатор снимка экрана

POST /api/screenshots/(int: id)/file/

Заменяет изображение снимка экрана.

Параметры
  • id (int) – Идентификатор снимка экрана

Параметры формы
  • file image – Загруженный файл

Пример CURL:

curl -X POST \
    -F image=@image.png \
    -H "Authorization: Token TOKEN" \
    http://example.com/api/screenshots/1/file/
POST /api/screenshots/(int: id)/units/

Связывает исходную строку со снимком экрана.

Параметры
  • id (int) – Идентификатор снимка экрана

Параметры формы
  • string unit_id – Идентификатор единицы перевода

JSON -объект ответа
  • name (string) – название снимка экрана

  • translation (string) – URL-адрес связанного объекта перевода

  • file_url (string) – URL-адрес для скачивания файла; смотрите описание GET /api/screenshots/(int:id)/file/

  • units (array) – ссылка на связанную информацию об исходной строке; смотрите описание GET /api/units/(int:id)/

DELETE /api/screenshots/(int: id)/units/(int: unit_id)

Удаляет связь исходной строки со снимком экрана.

Параметры
  • id (int) – Идентификатор снимка экрана

  • unit_id – ИД единицы перевода исходной строки

POST /api/screenshots/

Создаёт новый снимок экрана.

Параметры формы
  • file image – Загруженный файл

  • string name – Название снимка экрана

  • string project_slug – Плашка проекта

  • string component_slug – Плашка компонента

  • string language_code – Код языка

JSON -объект ответа
  • name (string) – название снимка экрана

  • component (string) – URL-адрес связанного объекта компонента

  • file_url (string) – URL-адрес для скачивания файла; смотрите описание GET /api/screenshots/(int:id)/file/

  • units (array) – ссылка на связанную информацию об исходной строке; смотрите описание GET /api/units/(int:id)/

PATCH /api/screenshots/(int: id)/

Редактирует часть информации о снимке экрана.

Параметры
  • id (int) – Идентификатор снимка экрана

JSON -объект ответа
  • name (string) – название снимка экрана

  • component (string) – URL-адрес связанного объекта компонента

  • file_url (string) – URL-адрес для скачивания файла; смотрите описание GET /api/screenshots/(int:id)/file/

  • units (array) – ссылка на связанную информацию об исходной строке; смотрите описание GET /api/units/(int:id)/

PUT /api/screenshots/(int: id)/

Редактирует всю информацию о снимке экрана.

Параметры
  • id (int) – Идентификатор снимка экрана

JSON -объект ответа
  • name (string) – название снимка экрана

  • component (string) – URL-адрес связанного объекта компонента

  • file_url (string) – URL-адрес для скачивания файла; смотрите описание GET /api/screenshots/(int:id)/file/

  • units (array) – ссылка на связанную информацию об исходной строке; смотрите описание GET /api/units/(int:id)/

DELETE /api/screenshots/(int: id)/

Удаляет снимок экрана.

Параметры
  • id (int) – Идентификатор снимка экрана

Надстройки

Добавлено в версии 4.4.1.

GET /api/addons/

Возвращает список надстроек.

См.также

Атрибуты объекта-надстройки, описываются в разделе GET /api/units/(int:id)/.

GET /api/addons/(int: id)/

Возвращает информацию о надстройке.

Параметры
  • id (int) – ID надстройки

JSON -объект ответа
  • name (string) – название надстройки

  • component (string) – URL-адрес связанного объекта компонента

  • configuration (object) – Необязательные настройки надстройки

См.также

Надстройки

POST /api/components/(string: project)/(string: component)/addons/

Создаёт новую надстройку.

Параметры
  • project_slug (string) – Плашка проекта

  • component_slug (string) – Плашка компонента

JSON -объект запроса
  • name (string) – название надстройки

  • configuration (object) – Необязательные настройки надстройки

PATCH /api/addons/(int: id)/

Редактирует часть информации о надстройке.

Параметры
  • id (int) – ID надстройки

JSON -объект ответа
  • configuration (object) – Необязательные настройки надстройки

PUT /api/addons/(int: id)/

Редактирует всю информацию о надстройке.

Параметры
  • id (int) – ID надстройки

JSON -объект ответа
  • configuration (object) – Необязательные настройки надстройки

DELETE /api/addons/(int: id)/

Удаляет надстройку.

Параметры
  • id (int) – ID надстройки

Списки компонентов

Добавлено в версии 4.0.

GET /api/component-lists/

Возвращает список списков компонентов.

См.также

Атрибуты объекта списка компонентов описываются в разделе GET /api/component-lists/(str:slug)/.

GET /api/component-lists/(str: slug)/

Возвращает информацию о списке компонентов.

Параметры
  • slug (string) – Плашка списка компонентов

JSON -объект ответа
  • name (string) – название списка компонентов

  • slug (string) – плашка списка компонентов

  • show_dashboard (boolean) – показывать ли его на панели управления

  • components (array) – ссылка на связанные компоненты; смотрите описание GET /api/components/(string:project)/(string:component)/

  • auto_assign (array) – правила автоматического назначения

PUT /api/component-lists/(str: slug)/

Изменяет параметры списка компонентов.

Параметры
  • slug (string) – Плашка списка компонентов

JSON -объект запроса
  • name (string) – название списка компонентов

  • slug (string) – плашка списка компонентов

  • show_dashboard (boolean) – показывать ли его на панели управления

PATCH /api/component-lists/(str: slug)/

Изменяет параметры списка компонентов.

Параметры
  • slug (string) – Плашка списка компонентов

JSON -объект запроса
  • name (string) – название списка компонентов

  • slug (string) – плашка списка компонентов

  • show_dashboard (boolean) – показывать ли его на панели управления

DELETE /api/component-lists/(str: slug)/

Удаляет список компонентов.

Параметры
  • slug (string) – Плашка списка компонентов

POST /api/component-lists/(str: slug)/components/

Связывает компонент со списком компонентов.

Параметры
  • slug (string) – Плашка списка компонентов

Параметры формы
  • string component_id – Идентификатор компонента

DELETE /api/component-lists/(str: slug)/components/(str: component_slug)

Отвязывает компонент от списка компонентов.

Параметры
  • slug (string) – Плашка списка компонентов

  • component_slug (string) – Плашка компонента

Глоссарий

Изменено в версии 4.5: Глоссарии теперь хранятся как обычные компоненты, переводы и строки, поэтому используйте для работы с ними соответствующие API.

Задачи

Добавлено в версии 4.4.

GET /api/tasks/

На данный момент получение списка задач недоступно.

GET /api/tasks/(str: uuid)/

Возвращает информацию о задаче

Параметры
  • uuid (string) – UUID задачи

JSON -объект ответа
  • completed (boolean) – Завершилась ли задача

  • progress (int) – Ход выполнения задачи (в процентах)

  • result (object) – Результат выполнения задачи или дополнительная информация о ходе её выполнения

  • log (string) – Журнал выполнения задачи

Метрики

GET /api/metrics/

Возвращает метрики сервера.

JSON -объект ответа
  • units (int) – Количество единиц

  • units_translated (int) – Количество переведённых единиц

  • users (int) – Количество пользователей

  • changes (int) – Количество изменений

  • projects (int) – Количество проектов

  • components" (int) – Количество компонентов

  • translations" (int) – Количество переводов

  • languages" (int) – Количество используемых языков

  • checks" (int) – Количество проведённых проверок

  • configuration_errors" (int) – Количество ошибок конфигурации

  • suggestions" (int) – Количество ожидающих предложений

  • celery_queues (object) – Длины очередей Celery, смотреть раздел Фоновые задачи с использованием Celery

  • name (string) – Настроенное имя сервера

Обработчики уведомлений

Обработчики уведомлений позволяют внешним приложениям уведомлять Weblate об обновлении репозитория системы контроля версий.

Вы можете использовать конечные точки репозитория для проектов, компонентов и переводов для обновления отдельных репозиториев; документацию смотрите в описании POST /api/projects/(string:project)/repository/.

GET /hooks/update/(string: project)/(string: component)/

Не рекомендуется, начиная с версии 2.6: Пожалуйста, используйте вместо этой конечной точки точку POST /api/components/(string:project)/(string:component)/repository/, которая корректно работает с аутентификацией для проектов, ограниченных списками контроля доступа.

Запускает обновление компонента (извлечение кода из системы контроля версий и поиск в нём изменений перевода).

GET /hooks/update/(string: project)/

Не рекомендуется, начиная с версии 2.6: Пожалуйста, используйте вместо этой конечной точки точку POST /api/projects/(string:project)/repository/, которая корректно работает с аутентификацией для проектов, ограниченных списками контроля доступа.

Запускает обновление всех компонентов в проекте (извлечение кода из системы контроля версий и поиск в нём изменений перевода).

POST /hooks/github/

Специальный обработчик для обработки уведомлений GitHub и автоматического обновления соответствующих компонентов.

Примечание

GitHub включает прямую поддержку уведомлений Weblate: включите сервисный обработчик Weblate в настройках репозитория и установите URL-адрес в соответствие с URL-адресом вашей установки Weblate.

См.также

Автоматическое получение изменений из GitHub’а

Инструкция по настройке интеграции с GitHub

https://docs.github.com/en/get-started/customizing-your-github-workflow/exploring-integrations/about-webhooks

Общая информация о веб-обработчиках GitHub

ENABLE_HOOKS

Для включения обработчиков для всего Weblate

POST /hooks/gitlab/

Специальный обработчик для обработки уведомлений GitLab и автоматического обновления соответствующих компонентов.

См.также

Автоматическое получение изменений из GitLab’а

Инструкция по настройке интеграции с GitLab

https://docs.gitlab.com/ee/user/project/integrations/webhooks.html

Общая информация о веб-обработчиках GitLab

ENABLE_HOOKS

Для включения обработчиков для всего Weblate

POST /hooks/bitbucket/

Специальный обработчик для обработки уведомлений Bitbucket и автоматического обновления соответствующих компонентов.

См.также

Автоматическое получение изменений из Bitbucket’а

Инструкция по настройке интеграции с Bitbucket

https://support.atlassian.com/bitbucket-cloud/docs/manage-webhooks/

Общая информация о веб-обработчиках Bitbucket

ENABLE_HOOKS

Для включения обработчиков для всего Weblate

POST /hooks/pagure/

Добавлено в версии 3.3.

Специальный обработчик для обработки уведомлений Pagure и автоматического обновления соответствующих компонентов.

См.также

Автоматическое получение изменений из Pagure

Инструкция по настройке интеграции с Pagure

https://docs.pagure.org/pagure/usage/using_webhooks.html

Общая информация о веб-обработчиках Pagure

ENABLE_HOOKS

Для включения обработчиков для всего Weblate

POST /hooks/azure/

Добавлено в версии 3.8.

Специальный обработчик для обработки уведомлений Azure Repos и автоматического обновления соответствующих компонентов.

См.также

Автоматическое получение изменений из Azure Repos

Инструкция по настройке интеграции с Azure

https://docs.microsoft.com/ru-ru/azure/devops/service-hooks/services/webhooks?view=azure-devops

Общая информация о веб-обработчиках Azure Repos

ENABLE_HOOKS

Для включения обработчиков для всего Weblate

POST /hooks/gitea/

Добавлено в версии 3.9.

Специальный обработчик для обработки уведомлений Gitea и автоматического обновления соответствующих компонентов.

См.также

Автоматическое получение изменений из репозиториев Gitea

Инструкция по настройке интеграции с Gitea

https://docs.gitea.io/en-us/webhooks/

Общая информация о веб-обработчиках Gitea

ENABLE_HOOKS

Для включения обработчиков для всего Weblate

POST /hooks/gitee/

Добавлено в версии 3.9.

Специальный обработчик для обработки уведомлений Gitee и автоматического обновления соответствующих компонентов.

См.также

Автоматическое получение изменений из репозиториев Gitee

Инструкция по настройке интеграции с Gitee

https://gitee.com/help/categories/40

Общая информация о веб-обработчиках Gitee

ENABLE_HOOKS

Для включения обработчиков для всего Weblate

Экспорты

Чтобы позволить вам и дальше обрабатывать данные, Weblate предоставляет вам различные виды экспорта.

GET /exports/stats/(string: project)/(string: component)/
Параметры запроса
  • format (string) – Выходной формат: json или csv

Не рекомендуется, начиная с версии 2.6: Пожалуйста, используйте вместо этой конечной точки GET /api/components/(string:project)/(string:component)/statistics/ или GET /api/translations/(string:project)/(string:component)/(string:language)/statistics/; они также разрешает доступ к проектам, контролируемым списками контроля доступа.

Возвращает статистику по указанному компоненту в заданном формате.

Пример запроса:

GET /exports/stats/weblate/main/ HTTP/1.1
Host: example.com
Accept: application/json, text/javascript

Пример ответа:

HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json

[
    {
        "code": "cs",
        "failing": 0,
        "failing_percent": 0.0,
        "fuzzy": 0,
        "fuzzy_percent": 0.0,
        "last_author": "Michal Čihař",
        "last_change": "2012-03-28T15:07:38+00:00",
        "name": "Czech",
        "total": 436,
        "total_words": 15271,
        "translated": 436,
        "translated_percent": 100.0,
        "translated_words": 3201,
        "url": "http://hosted.weblate.org/engage/weblate/cs/",
        "url_translate": "http://hosted.weblate.org/projects/weblate/main/cs/"
    },
    {
        "code": "nl",
        "failing": 21,
        "failing_percent": 4.8,
        "fuzzy": 11,
        "fuzzy_percent": 2.5,
        "last_author": null,
        "last_change": null,
        "name": "Dutch",
        "total": 436,
        "total_words": 15271,
        "translated": 319,
        "translated_percent": 73.2,
        "translated_words": 3201,
        "url": "http://hosted.weblate.org/engage/weblate/nl/",
        "url_translate": "http://hosted.weblate.org/projects/weblate/main/nl/"
    },
    {
        "code": "el",
        "failing": 11,
        "failing_percent": 2.5,
        "fuzzy": 21,
        "fuzzy_percent": 4.8,
        "last_author": null,
        "last_change": null,
        "name": "Greek",
        "total": 436,
        "total_words": 15271,
        "translated": 312,
        "translated_percent": 71.6,
        "translated_words": 3201,
        "url": "http://hosted.weblate.org/engage/weblate/el/",
        "url_translate": "http://hosted.weblate.org/projects/weblate/main/el/"
    }
]

RSS-каналы

Изменения в переводах экспортируются в RSS-каналы.

GET /exports/rss/(string: project)/(string: component)/(string: language)/

Возвращает RSS-ленту с последними изменениями в переводе.

GET /exports/rss/(string: project)/(string: component)/

Возвращает RSS-ленту с последними изменениями в компоненте.

GET /exports/rss/(string: project)/

Возвращает RSS-ленту с последними изменениями в проекте.

GET /exports/rss/language/(string: language)/

Возвращает RSS-ленту с последними изменениями в языке.

GET /exports/rss/

Возвращает RSS-ленту с последними изменениями в экземпляре Weblate.

См.также

RSS в Википедии

Клиент Weblate

Добавлено в версии 2.7: Полная поддержка вспомогательной команды wlc существует с версии Weblate 2.7. Если вы используете более старую версию, могут возникнуть некоторые несовместимости с API.

Установка

Клиент Weblate поставляется отдельно и включает в себя модуль Python. Для использования нижеприведённых команд необходимо установить модуль wlc:

pip3 install wlc

Использование Docker

Клиент Weblate также доступен в виде образа Docker.

Этот образ публикуется на Docker Hub: https://hub.docker.com/r/weblate/wlc

Установка:

docker pull weblate/wlc

Контейнер Docker использует настройки по умолчанию Weblate и соединяется с API, развёрнутом на локальной машине. URL-адрес API и API_KEY можно настроить через параметры, принимаемые Weblate.

У команды запуска контейнера следующий синтаксис:

docker run --rm weblate/wlc [WLC_ARGS]

Пример:

docker run --rm weblate/wlc --url https://hosted.weblate.org/api/ list-projects

Также вы можете пробросить файлы настроек в контейнер Docker. Проще всего будет это сделать добавив текущий каталог в качестве тома /home/weblate:

docker run --volume $PWD:/home/weblate --rm weblate/wlc show

Начало работы

Настройки wlc хранятся в ~/.config/weblate (другие возможные расположения смотрите в разделе Файлы настроек), создайте этот файл в соответствии со своим окружением:

[weblate]
url = https://hosted.weblate.org/api/

[keys]
https://hosted.weblate.org/api/ = APIKEY

После этого вы сможете вызывать команды на умолчательном сервере:

wlc ls
wlc commit sandbox/hello-world

См.также

Файлы настроек

Обзор

wlc [arguments] <command> [options]

Какая операция должна быть выполнена на самом деле указывает параметр command.

Описание

Weblate Client — это библиотека Python и инструмент командной строки для удалённого управления Weblate с помощью его REST API Weblate’а. Инструмент командной строки может быть вызван как команда wlc, которая построена на основе модуля wlc.

Аргументы

Программа принимает следующие аргументы, определяющие формат вывода или то, какой надо использовать экземпляр Weblate’а. Они должны быть введены до какой-либо команды.

--format {csv,json,text,html}

Определяет формат вывода.

--url URL

Задаёт URL-адрес API. Переопределяет любое значение, найденное в файле настроек, смотрите раздел Файлы настроек. URL-адрес должен заканчиваться на /api/, например, https://hosted.weblate.org/api/.

--key KEY

Задаёт пользовательский ключ API. Переопределяет любое значение из файла настроек, смотрите раздел Файлы настроек. Свой ключ вы можете найти в своём профиле на Weblate.

--config PATH

Переопределяет путь к файлу настроек, смотрите раздел Файлы настроек.

--config-section SECTION

Переопределяет используемый раздел файла настроек, смотрите раздел Файлы настроек.

Команды

Доступны следующие команды:

version

Распечатать текущую версию.

list-languages

Вывести список используемых в Weblate языков.

list-projects

Вывести список существующих в Weblate проектов.

list-components

Вывести список существующих в Weblate компонентов.

list-translations

Вывести список существующих в Weblate переводов.

show

Показать объект Weblate (перевод, компонент или проект).

ls

Вывести список объектов Weblate (переводов, компонентов или проектов).

commit

Зафиксировать изменения, внесённые в объект Weblate (перевод, компонент или проект).

pull

Извлечь изменения из удалённого репозитория в объект Weblate (перевод, компонент или проект).

push

Отправить изменения объекта Weblate (перевода, компонента или проекта) в удалённый репозиторий.

reset

Добавлено в версии 0.7: Поддерживается с версии wlc 0.7.

Сбросить изменения в объекте Weblate (переводе, компоненте или проекте) для приведения их в соответствие с удалённым репозиторием.

cleanup

Добавлено в версии 0.9: Поддерживается с версии wlc 0.9.

Удалить любые неотслеживаемые изменения в объекте Weblate (переводе, компоненте или проекте) для приведения их в соответствие с удалённым репозиторием.

repo

Вывести статус репозитория для данного объекта Weblate (перевода, компонента или проекта).

statistics

Вывести подробную статистику по данному объекту Weblate (переводу, компоненту или проекту).

lock-status

Добавлено в версии 0.5: Поддерживается с версии wlc 0.5.

Вывести статус блокировки.

lock

Добавлено в версии 0.5: Поддерживается с версии wlc 0.5.

Заблокировать компонент в Weblate от дальнейшего перевода.

unlock

Добавлено в версии 0.5: Поддерживается с версии wlc 0.5.

Разблокировать перевод компонента Weblate.

changes

Добавлено в версии 0.7: Поддерживается с версии wlc 0.7 и Weblate 2.10.

Вывести список изменений для данного объекта.

download

Добавлено в версии 0.7: Поддерживается с версии wlc 0.7.

Скачать файл перевода.

--convert

Преобразовывать формат файла; если не указан, то ни каких преобразований на стороне сервера не происходит и файл скачивается в том виде, в котором он сохранён в репозитории.

--output

Задаёт файл, в который нужно сохранить файл перевода, если не указан, он будет распечатан в стандартный поток вывода.

upload

Добавлено в версии 0.9: Поддерживается с версии wlc 0.9.

Загрузить файл перевода.

--overwrite

Перезаписывать существующие переводы во время загрузки.

--input

Файл, из которого читается содержимое, если не указан, чтение будет производиться со стандартного потока ввода.

--method

Используемый метод загрузки, смотрите Способы импорта.

--fuzzy

Что делать с неточными, отмеченными на правку, переводами (пусто, process или approve)

--author-name

Author name, to override currently authenticated user

--author-email

Author e-mail, to override currently authenticated user

Подсказка

Более подробную информацию по выполнению конкретных команд можно получить с помощью параметра --help, например, wlc ls --help.

Файлы настроек

.weblate, .weblate.ini, weblate.ini

Изменено в версии 1.6: Также допустимы и файлы с расширением .ini.

Проектный файл настроек

C:\Users\ИМЯ\AppData\weblate.ini

Добавлено в версии 1.6.

Пользовательский файл настроек в Windows.

~/.config/weblate

Пользовательский файл настроек

/etc/xdg/weblate

Системный файл настроек

Программа следует спецификации XDG, поэтому вы можете изменить пути размещения файлов настроек с помощью переменных окружения XDG_CONFIG_HOME и XDG_CONFIG_DIRS. В Windows предпочтительным местом для файла настроек является каталог APPDATA.

Можно настроить следующие параметры, находящиеся в разделе [weblate] (изменить этот раздел вы можете ключом командной строки --config-section):

key

Ключ API для доступа к Weblate.

url

Адрес API сервера, по умолчанию установлен http://127.0.0.1:8000/api/.

translation

Путь к переводу по умолчанию — компоненту или проекту.

Файл настроек является INI-файлом, например:

[weblate]
url = https://hosted.weblate.org/api/
key = APIKEY
translation = weblate/application

Дополнительно ключи API могут быть сохранены в разделе [keys]:

[keys]
https://hosted.weblate.org/api/ = APIKEY

Это позволяет вам сохранять ключи в ваших личных настройках, а файл настроек .weblate хранить в системе контроля версий, чтобы wlc знал, с каким сервером ему следует общаться.

Примеры

Печать текущей версии программы:

$ wlc version
version: 0.1

Список всех проектов:

$ wlc list-projects
name: Hello
slug: hello
url: http://example.com/api/projects/hello/
web: https://weblate.org/
web_url: http://example.com/projects/hello/

Загрузить файл перевода:

$ wlc upload project/component/language --input /tmp/hello.po

Также вы можете указать, с каким проектом должен работать wlc:

$ cat .weblate
[weblate]
url = https://hosted.weblate.org/api/
translation = weblate/application

$ wlc show
branch: main
file_format: po
source_language: en
filemask: weblate/locale/*/LC_MESSAGES/django.po
git_export: https://hosted.weblate.org/git/weblate/application/
license: GPL-3.0+
license_url: https://spdx.org/licenses/GPL-3.0+
name: Application
new_base: weblate/locale/django.pot
project: weblate
repo: git://github.com/WeblateOrg/weblate.git
slug: application
template:
url: https://hosted.weblate.org/api/components/weblate/application/
vcs: git
web_url: https://hosted.weblate.org/projects/weblate/application/

При такой настройке закоммитить отложенные изменения в текущем проекте проще простого:

$ wlc commit

Python API Weblate’а

Установка

Python API поставляется отдельно, чтобы он был у вас появился, вам нужно установить клиент Weblate wlc.

pip install wlc

wlc

WeblateException

exception wlc.WeblateException

Базовый класс для всех исключений.

Weblate

class wlc.Weblate(key='', url=None, config=None)
Параметры
  • key (str) – Ключ пользователя

  • url (str) – URL-адрес сервера API, если не указан, используется адрес по умолчанию

  • config (wlc.config.WeblateConfig) – Объект-конфигурация, может переопределять все остальные параметры.

Класс доступа к API, определения ключа API и, необязательно, URL-адреса API.

get(path)
Параметры

path (str) – Путь запроса

Тип результата

object

Выполняет единичный GET-вызов API.

post(path, **kwargs)
Параметры

path (str) – Путь запроса

Тип результата

object

Выполняет единичный GET-вызов API.

wlc.config

WeblateConfig

class wlc.config.WeblateConfig(section='wlc')
Параметры

section (str) – Используемый раздел конфигурации

Парсер файлов настроек, реализующий спецификацию XDG.

load(path=None)
Параметры

path (str) – Путь к файлу, из которого загружаются настройки.

Загружает настройки из файла; если файл не указан, загружает их из файла настроек wlc (~/.config/wlc), расположенного в вашем каталоге настроек XDG (/etc/xdg/wlc).

wlc.main

wlc.main.main(settings=None, stdout=None, args=None)
Параметры
  • settings (list) – Параметры для переопределения в виде списка кортежей

  • stdout (object) – Файловый объект стандартного потока вывода печати вывода, по умолчанию используется sys.stdout

  • args (list) – Аргументы командной строки для обработки, по умолчанию используется sys.args

Главная точка входа для интерфейса командной строки.

@wlc.main.register_command(command)

Декоратор для регистрации класса Command в основном анализаторе, используемом функцией main().

Command

class wlc.main.Command(args, config, stdout=None)

Главный класс для вызова команд.

Инструкции по настройке

Установка Weblate

Установка с помощью Docker’а

С помощью докеризированного развертывания Weblate вы можете обзавестись своим личный экземпляр Weblate за считаные секунды. Все зависимости Weblate уже включены в образ. В качестве базы данных по умолчанию настроена PostgreSQL.

Требования к оборудованию

Weblate должен без проблем работать на любом современном оборудовании, ниже приведена минимальная конфигурация, необходимая для запуска Weblate на одном сервере (сам Weblate, база данных и веб-сервер):

  • 2 ГБ оперативной памяти

  • 2-х ядерный процессор

  • 1 ГБ дискового пространства

Чем больше памяти, тем лучше — она используется для кэширования на всех уровнях (на уровне файловой системы, уровне базы данных и уровне Weblate).

Множество одновременно работающих пользователей увеличивают количество необходимых ядер процессора. Для сотен компонентов перевода рекомендуется не менее 4 Гб оперативной памяти.

Типовое использование дискового пространства базой данной находится в районе 300MB на 1 миллион хранимых слов. Пространство необходимое для клонирования репозиториев разнится, хотя Weblate и пытается поддерживать их размер минимальным, делая поверхностные (shallow) копии.

Примечание

Фактические требования к вашей установке Weblate сильно зависят от размера управляемых ею переводов.

Установка

В следующих примерах предполагается, что у вас есть рабочее окружение Docker’а, в котором установлен docker-compose. Для получения конкретных инструкций ознакомьтесь с документацией к Docker’у.

  1. Склонируйте репозиторий weblate-docker:

    git clone https://github.com/WeblateOrg/docker-compose.git weblate-docker
    cd weblate-docker
    
  2. Создайте файл docker-compose.override.yml со своими настройками. Полный список переменных окружения приведен в разделе Переменные окружения Docker’а.

    version: '3'
    services:
      weblate:
        ports:
          - 80:8080
        environment:
          WEBLATE_EMAIL_HOST: smtp.example.com
          WEBLATE_EMAIL_HOST_USER: user
          WEBLATE_EMAIL_HOST_PASSWORD: pass
          WEBLATE_SERVER_EMAIL: weblate@example.com
          WEBLATE_DEFAULT_FROM_EMAIL: weblate@example.com
          WEBLATE_SITE_DOMAIN: weblate.example.com
          WEBLATE_ADMIN_PASSWORD: password for the admin user
          WEBLATE_ADMIN_EMAIL: weblate.admin@example.com
    

    Примечание

    Если переменная WEBLATE_ADMIN_PASSWORD не установлена, то пользователь-администратор создаётся со случайным паролем, отображаемым при первом запуске.

    Приведённый пример настраивает Weblate на прослушку порта 80, чтобы его изменить, отредактируйте отображение портов в файле docker-compose.override.yml.

  3. Запустите контейнеры Weblate:

    docker-compose up
    

Наслаждайтесь своим развернутым Weblate’ом, он доступен на порту 80 контейнера weblate.

Изменено в версии 2.15-2: Недавно настройка изменилась, ранее существовал отдельный контейнер веб-сервера, но с версии 2.15-2 веб-сервер встроен в контейнер Weblate.

Изменено в версии 3.7.1-6: С июля 2019 года (начиная с метки 3.7.1-6) контейнеры больше не запускают своё содержимое под пользователем root. Это изменение привело к изменению открытого порта с 80 на 8080.

Выбор метки для Docker hub

Вы можете использовать следующие метки на Docker hub, полный список доступных меток см. на https://hub.docker.com/r/weblate/weblate/tags/.

Имя метки

Описание

Пример использования

latest

Стабильный выпуск Weblate, соответствует последнему выпуску с метками

Выполнение обновлений в рабочей среде

<VERSION>-<PATCH>

Стабильный выпуск Weblate

Хорошо поставленное развёртывание в рабочей среде

edge

Стабильный выпуск Weblate с изменениями в разработке в Docker-контейнере (например, обновленные зависимости)

Запуск обновлений в среде постановки

edge-<DATE>-<SHA>

Стабильный выпуск Weblate с изменениями в разработке в Docker-контейнере (например, обновленные зависимости)

Чётко определённое развертывание в среде постановки

bleeding

Версия разработчика Weblate из Git

Запуск обновлений для тестирования предстоящих функций Weblate

bleeding-<DATE>-<SHA>

Версия разработчика Weblate из Git

Хорошо определённое развёртывание для тестирования предстоящих функций Weblate

Каждое изображение тестируется нашей непрерывной интеграцией перед публикацией, поэтому даже bleeding (кровоточащая) версия должна быть вполне безопасной для использования.

Контейнер Docker с поддержкой HTTPS

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

Использование собственных SSL-сертификатов

Добавлено в версии 3.8-3.

Если вы хотите использовать свой собственный SSL-сертификат, просто поместите его файлы в том данных Weblate (смотрите раздел Тома контейнеров Docker’а):

  • ssl/fullchain.pem, содержащий сертификат и все необходимые сертификаты центров сертификации

  • ssl/privkey.pem, содержащий закрытый ключ

Обеими этими файлами должен владеть тот же самый пользователь, который запускает контейнер docker ’а, а маска этих файлов должна быть равна 600 (читать и писать в них может только владелец).

Кроме того, контейнер Weblate теперь будет принимать SSL-соединения на порт 4443 и вам нужно будет включить перенаправление портов для HTTPS в переопределении Docker Compose:

version: '3'
services:
  weblate:
    ports:
      - 80:8080
      - 443:4443

Если на этом же сервере у вас уже размещены другие сайты, скорее всего, порты 80 и 443 используются обратным прокси, например, NGINX. Для передачи HTTPS соединения из NGINX’а в контейнер docker ’а вы можете использовать следующую конфигурацию:

server {
    listen 443;
    listen [::]:443;

    server_name <SITE_URL>;
    ssl_certificate /etc/letsencrypt/live/<SITE>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<SITE>/privkey.pem;

    location / {
            proxy_set_header HOST $host;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Host $server_name;
            proxy_pass https://127.0.0.1:<EXPOSED_DOCKER_PORT>;
    }
}

Замените заполнители <SITE_URL>, <SITE> и EXPOSED_DOCKER_PORT на фактические значения из вашего окружения.

Автоматический выпуск SSL-сертификатов с помощью сервиса Let’s Encrypt

Если вы хотите использовать Let’s Encrypt для автоматической генерации SSL-сертификатов для общедоступной установки, вам нужно будет добавить дополнительный контейнер Docker с обратным HTTPS прокси — https-portal. Он используется в файле docker-compose-https.yml. Затем создайте файл docker-compose-https.override.yml со своими настройками:

version: '3'
services:
  weblate:
    environment:
      WEBLATE_EMAIL_HOST: smtp.example.com
      WEBLATE_EMAIL_HOST_USER: user
      WEBLATE_EMAIL_HOST_PASSWORD: pass
      WEBLATE_SITE_DOMAIN: weblate.example.com
      WEBLATE_ADMIN_PASSWORD: password for admin user
  https-portal:
    environment:
      DOMAINS: 'weblate.example.com -> http://weblate:8080'

При каждом вызове docker-compose вам нужно будет передавать ему оба этих файла, а затем сделать следующее:

docker-compose -f docker-compose-https.yml -f docker-compose-https.override.yml build
docker-compose -f docker-compose-https.yml -f docker-compose-https.override.yml up
Обновление контейнера Docker’а

Обычно рекомендуется обновлять только контейнер Weblate, а контейнер PostgreSQL сохранять той версии, которая у вас есть, поскольку обновление PostgreSQL довольно болезненно и в большинстве случаев не приносит особых преимуществ.

Изменено в версии 4.10-1: Since Weblate 4.10-1, the Docker container uses Django 4.0 what requires PostgreSQL 10 or newer, please upgrade it prior to upgrading Weblate. See Обновление с версии 4.9 до версии 4.10 and Upgrading PostgreSQL container.

Вы можете сделать это, оставаясь с существующим docker-compose и просто извлекая последние образы с последующим перезапуском контейнера:

# Fetch latest versions of the images
docker-compose pull
# Stop and destroy the containers
docker-compose down
# Spawn new containers in the background
docker-compose up -d
# Follow the logs during upgrade
docker-compose logs -f

При первом запуске база данных Weblate должна быть перенесена автоматически, надобности в дополнительных ручных действиях не возникнет.

Примечание

Upgrades across major versions are not supported by Weblate. For example, if you are on 3.x series and want to upgrade to 4.x, first upgrade to the latest 4.0.x-y image (at time of writing this it is the 4.0.4-5), which will do the migration and then continue upgrading to newer versions.

You might also want to update the docker-compose repository, though it’s not needed in most case. See Upgrading PostgreSQL container for upgrading the PostgreSQL server.

Upgrading PostgreSQL container

PostgreSQL containers do not support automatic upgrading between version, you need to perform the upgrade manually. Following steps show one of the options of upgrading.

  1. Stop Weblate container:

    docker-compose stop weblate cache
    
  2. Backup the database:

    docker-compose exec database pg_dumpall --clean --username weblate > backup.sql
    
  3. Stop the database container:

    docker-compose stop database
    
  4. Remove the PostgreSQL volume:

    docker-compose rm -v database
    docker volume remove weblate_postgres-data
    
  5. Adjust docker-compose.yml to use new PostgreSQL version.

  6. Start the database container:

    docker-compose up -d database
    
  7. Восстановите данные из резервной копии:

    cat backup.sql | docker-compose exec -T database psql --username weblate --dbname postgres
    
  8. Start all remaining containers:

    docker-compose up -d
    
Вход от имени администратора

После настройки контейнера вы можете войти в систему под пользователем admin с паролем, указанным в переменной окружения WEBLATE_ADMIN_PASSWORD, или случайным паролем, сгенерированным при первом запуске, если он не был установлен явно.

Для сброса пароля пользователя admin перезапустите контейнер с переменной WEBLATE_ADMIN_PASSWORD, установленной в новое значение пароля.

Количество процессов и потребление памяти

Количество рабочих процессов для uWSGI и Celery определяется автоматически на основе количества ЦП. Это хорошо подходит для большинства облачных виртуальных машин, так как они обычно имеют мало процессоров и хороший объём памяти.

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

environment:
  WEBLATE_WORKERS: 2

Вы также можете точно настроить отдельные категории процессов:

environment:
  WEB_WORKERS: 4
  CELERY_MAIN_OPTIONS: --concurrency 2
  CELERY_NOTIFY_OPTIONS: --concurrency 1
  CELERY_TRANSLATE_OPTIONS: --concurrency 1
Масштабирование горизонтально

Добавлено в версии 4.6.

Вы можете запустить несколько Weblate-контейнеров для горизонтального масштабирования сервиса. Том /app/data должен быть общим для всех контейнеров, для этого рекомендуется использовать кластерную файловую систему, например GlusterFS. Том /app/cache должен быть отдельным для каждого контейнера.

Каждый контейнер Weblate имеет определенную роль с помощью переменной окружения WEBLATE_SERVICE. Пожалуйста, внимательно изучите документацию, так как некоторые сервисы должны быть запущены только один раз в кластере, и порядок следования сервисов также имеет значение.

Пример установки вы можете найти в репозитории docker-compose в виде docker-compose-split.yml.

Переменные окружения Docker’а

Многие параметры конфигурации Weblate в контейнере Docker могут быть установлены через переменные окружения:

Общие параметры
WEBLATE_DEBUG

Настраивает отладочный режим Django, используя ее переменную DEBUG.

Пример:

environment:
  WEBLATE_DEBUG: 1
WEBLATE_LOGLEVEL

Настраивает подробность ведения журнала.

WEBLATE_LOGLEVEL_DATABASE

Configures the logging of the database queries verbosity.

WEBLATE_SITE_TITLE

Изменяет название сайта, показываемое в заголовке всех страниц.

WEBLATE_SITE_DOMAIN

Настраивает домен сайта. Этот параметр является обязательным.

WEBLATE_ADMIN_NAME
WEBLATE_ADMIN_EMAIL

Настраивает имя и электронную почту администратора сайта. Используется как для параметра ADMINS, так и для создания пользователя admin (подробнее смотрите в описании переменной окружения WEBLATE_ADMIN_PASSWORD).

Пример:

environment:
  WEBLATE_ADMIN_NAME: Weblate admin
  WEBLATE_ADMIN_EMAIL: noreply@example.com
WEBLATE_ADMIN_PASSWORD

Устанавливает пароль для пользователя admin.

  • Если не установлен и пользователя admin не существует, он создается со случайным паролем, который показывается при первом запуске контейнера.

  • Если не установлен и пользователя admin не существует, никакие действия не выполняются.

  • Если установлен, при каждом запуске контейнера пользователю admin устанавливаются соответствующие пароль WEBLATE_ADMIN_PASSWORD, имя WEBLATE_ADMIN_NAME и адрес электронной почты WEBLATE_ADMIN_EMAIL.

Предупреждение

Хранение пароля в файле настроек может представлять из себя угрозу безопасности. Используйте эту переменную только для начальной установки (или пусть Weblate сгенерирует при начальной загрузке случайный пароль) или для восстановления пароля.

WEBLATE_ADMIN_PASSWORD_FILE

Устанавливает путь к файлу с паролем для пользователя admin.

См.также

WEBLATE_ADMIN_PASSWORD

WEBLATE_SERVER_EMAIL

Адрес электронной почты, с которого отправляются сообщения об ошибках.

WEBLATE_DEFAULT_FROM_EMAIL

Настраивает адрес для исходящих сообщений электронной почты.

WEBLATE_CONTACT_FORM

Настраивает поведение контактной формы, смотреть параметр CONTACT_FORM.

WEBLATE_ALLOWED_HOSTS

Настраивает разрешённые имена HTTP-хостов с помощью параметра ALLOWED_HOSTS.

По умолчанию установлен в *, что позволяет использовать все имена хостов.

Пример:

environment:
  WEBLATE_ALLOWED_HOSTS: weblate.example.com,example.com
WEBLATE_REGISTRATION_OPEN

Настраивает статус открытия регистрации, переключая параметр REGISTRATION_OPEN.

Пример:

environment:
  WEBLATE_REGISTRATION_OPEN: 0
WEBLATE_REGISTRATION_ALLOW_BACKENDS

Настраивает через параметр REGISTRATION_ALLOW_BACKENDS методы аутентификации, которые можно использовать для создания новой учетной записи.

Пример:

environment:
  WEBLATE_REGISTRATION_OPEN: 0
  WEBLATE_REGISTRATION_ALLOW_BACKENDS: azuread-oauth2,azuread-tenant-oauth2
WEBLATE_TIME_ZONE

Настраивает используемый в Weblate часовой пояс, смотрите описание параметра TIME_ZONE.

Примечание

Для изменения часового пояса самого контейнера Docker используйте переменную окружения TZ.

Пример:

environment:
  WEBLATE_TIME_ZONE: Europe/Prague
WEBLATE_ENABLE_HTTPS

Заставляет Weblate думать, что он работает за обратным HTTPS-прокси, что принуждает Weblate использовать HTTPS в ссылках писем электронной почты и API или устанавливать у кук флаги безопасности.

Подсказка

Смотрите возможные топкие места в документацию к параметру ENABLE_HTTPS.

Примечание

Этот параметр не включает разрешение на прием контейнером Weblate’а соединений по HTTPS, его нужно настроить отдельно, для примеров смотрите раздел Контейнер Docker с поддержкой HTTPS.

Пример:

environment:
  WEBLATE_ENABLE_HTTPS: 1
WEBLATE_INTERLEDGER_PAYMENT_POINTERS

Добавлено в версии 4.12.1.

Lets Weblate set the meta[name=monetization] field in the head of the document. If multiple are specified, chooses one randomly.

WEBLATE_IP_PROXY_HEADER

Позволяет Weblate’у получать IP-адрес из любого заданного HTTP-заголовка. Используйте его при использовании обратного прокси перед контейнером Weblate.

Включает параметр IP_BEHIND_REVERSE_PROXY и устанавливает параметр IP_PROXY_HEADER.

Примечание

Формат параметра должен соответствовать ожиданиям Django. Django преобразует необработанные имена HTTP-заголовков следующим образом:

  • переводит все символы в верхний регистр

  • все дефисы заменяет на подчеркивания

  • добавляет префикс `` HTTP_``

Таким образом, заголовок X-Forwarded-For` отображается на ``HTTP_X_FORWARDED_FOR.

Пример:

environment:
  WEBLATE_IP_PROXY_HEADER: HTTP_X_FORWARDED_FOR
WEBLATE_SECURE_PROXY_SSL_HEADER

Кортеж, представляющий собой комбинацию HTTP-заголовков/значений, указывающую, что запрос является безопасным. Он необходим, когда Weblate работает за обратным прокси, выполняющим SSL-терминацию, которая не передает стандартные HTTPS-заголовки.

Пример:

environment:
  WEBLATE_SECURE_PROXY_SSL_HEADER: HTTP_X_FORWARDED_PROTO,https

См.также

SECURE_PROXY_SSL_HEADER

WEBLATE_REQUIRE_LOGIN

Включает параметр REQUIRE_LOGIN, в результате чего аутентификация будет требоваться для всего Weblate.

Пример:

environment:
  WEBLATE_REQUIRE_LOGIN: 1
WEBLATE_LOGIN_REQUIRED_URLS_EXCEPTIONS
WEBLATE_ADD_LOGIN_REQUIRED_URLS_EXCEPTIONS
WEBLATE_REMOVE_LOGIN_REQUIRED_URLS_EXCEPTIONS

Добавляет исключения из URL-адресов (для которых требование аутентификации установлено глобально для всего Weblate) с помощью параметра LOGIN_REQUIRED_URLS_EXCEPTIONS.

Вы можете либо заменить все настройки целиком, либо изменить значение по умолчанию с помощью переменных ADD и REMOVE.

WEBLATE_GOOGLE_ANALYTICS_ID

Настраивает идентификатор для Google Analytics, изменяя параметр GOOGLE_ANALYTICS_ID.

WEBLATE_GITHUB_USERNAME

Настраивает имя пользователя GitHub для GitHub’овских запросов на извлечение, изменяя параметр GITHUB_USERNAME.

См.также

GitHub pull requests

WEBLATE_GITHUB_TOKEN

Добавлено в версии 4.3.

Настраивает GitHub’овский токен персонального доступа для GitHub’овских запросов на извлечение через API, изменяя параметр GITHUB_TOKEN.

См.также

GitHub pull requests

WEBLATE_GITLAB_USERNAME

Настраивает имя пользователя GitLab для GitLab’овских запросов на слияние, изменяя параметр GITLAB_USERNAME

WEBLATE_GITLAB_TOKEN

Настраивает GitLab’овский токен персонального доступа для GitLab’овских запросов на слияние через API, изменяя параметр GITLAB_TOKEN

WEBLATE_PAGURE_USERNAME

Настраивает имя пользователя Pagure для Pagure’вских запросов на слияние, изменяя параметр PAGURE_USERNAME

WEBLATE_PAGURE_TOKEN

Настраивает Pagure’вский токен персонального доступа для Pagure’вских запросов на слияние через API, изменяя параметр Pagure_TOKEN

WEBLATE_DEFAULT_PULL_MESSAGE

Configures the default title and message for pull requests via API by changing DEFAULT_PULL_MESSAGE

См.также

DEFAULT_PULL_MESSAGE

WEBLATE_SIMPLIFY_LANGUAGES

Настраивает политику упрощения языка, смотрите описание параметра SIMPLIFY_LANGUAGES.

WEBLATE_DEFAULT_ACCESS_CONTROL

Настраивает значение по умолчанию для управления доступом в новых проектах, смотрите описание параметра DEFAULT_ACCESS_CONTROL.

WEBLATE_DEFAULT_RESTRICTED_COMPONENT

Настраивает значение по умолчанию для ограниченного доступа в новых компонентах, смотрите описание параметра DEFAULT_RESTRICTED_COMPONENT.

WEBLATE_DEFAULT_TRANSLATION_PROPAGATION

Настраивает значение по умолчанию для разрешения распространения переводов в новых компонентах, смотрите описание параметра DEFAULT_TRANSLATION_PROPAGATION.

WEBLATE_DEFAULT_COMMITER_EMAIL

Настраивает параметр DEFAULT_COMMITER_EMAIL.

WEBLATE_DEFAULT_COMMITER_NAME

Настраивает параметр DEFAULT_COMMITER_NAME.

WEBLATE_DEFAULT_SHARED_TM

Настраивает параметр DEFAULT_SHARED_TM.

WEBLATE_AKISMET_API_KEY

Настраивает API-ключ Akismet, смотрите описание параметра AKISMET_API_KEY.

WEBLATE_GPG_IDENTITY

Настраивает GPG для подписи коммитов, смотрите описание параметра WEBLATE_GPG_IDENTITY.

WEBLATE_URL_PREFIX

Настраивает префикс URL-адреса, на котором запущен Weblate, смотрите описание параметра URL_PREFIX.

WEBLATE_SILENCED_SYSTEM_CHECKS

Настраивает проверки, которые вы не хотите видеть, смотрите описание параметра SILENCED_SYSTEM_CHECKS.

WEBLATE_CSP_SCRIPT_SRC
WEBLATE_CSP_IMG_SRC
WEBLATE_CSP_CONNECT_SRC
WEBLATE_CSP_STYLE_SRC
WEBLATE_CSP_FONT_SRC

Позволяет настраивать HTTP-заголовок политики безопасности содержимого Content-Security-Policy.

WEBLATE_LICENSE_FILTER

Настраивает параметр LICENSE_FILTER.

WEBLATE_LICENSE_REQUIRED

Настройка LICENSE_FILTER

WEBLATE_WEBSITE_REQUIRED

Настройка DEFAULT_AUTO_WATCH

WEBLATE_HIDE_VERSION

Настраивает параметр HIDE_VERSION.

WEBLATE_BASIC_LANGUAGES

Настраивает параметр BASIC_LANGUAGES.

WEBLATE_DEFAULT_AUTO_WATCH

Настраивает параметр DEFAULT_AUTO_WATCH.

WEBLATE_RATELIMIT_ATTEMPTS
WEBLATE_RATELIMIT_LOCKOUT
WEBLATE_RATELIMIT_WINDOW

Добавлено в версии 4.6.

Настраивает ограничитель скорости.

Подсказка

Вы можете задать конфигурацию для любого диапазона ограничителя скорости. Для этого добавьте префикс WEBLATE_ к любой из настроек, описанных в разделе Ограничение частоты запросов.

WEBLATE_API_RATELIMIT_ANON
WEBLATE_API_RATELIMIT_USER

Добавлено в версии 4.11.

Configures API rate limiting. Defaults to 100/day for anonymous and 5000/hour for authenticated users.

WEBLATE_ENABLE_AVATARS

Добавлено в версии 4.6.1.

Настраивает параметр ENABLE_AVATARS.

WEBLATE_LIMIT_TRANSLATION_LENGTH_BY_SOURCE_LENGTH

Добавлено в версии 4.9.

Настраивает параметр LIMIT_TRANSLATION_LENGTH_BY_SOURCE_LENGTH.

WEBLATE_SSH_EXTRA_ARGS

Добавлено в версии 4.9.

Настраивает параметр SSH_EXTRA_ARGS.

WEBLATE_BORG_EXTRA_ARGS

Добавлено в версии 4.9.

Настраивает параметр BORG_EXTRA_ARGS.

Параметры машинного перевода

Подсказка

Настройка ключа API для сервиса автоматически настраивает его в MT_SERVICES.

WEBLATE_MT_APERTIUM_APY

Включает машинный перевод от Apertium и устанавливает параметр MT_APERTIUM_APY

WEBLATE_MT_AWS_REGION
WEBLATE_MT_AWS_ACCESS_KEY_ID
WEBLATE_MT_AWS_SECRET_ACCESS_KEY

Настраивает машинный перевод от AWS.

environment:
  WEBLATE_MT_AWS_REGION: us-east-1
  WEBLATE_MT_AWS_ACCESS_KEY_ID: AKIAIOSFODNN7EXAMPLE
  WEBLATE_MT_AWS_SECRET_ACCESS_KEY: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
WEBLATE_MT_DEEPL_KEY

Включает машинный перевод от DeepL и устанавливает параметр MT_DEEPL_KEY

WEBLATE_MT_DEEPL_API_URL

Настраивает используемую версию API DeepL, смотрите описание параметра MT_DEEPL_API_URL.

WEBLATE_MT_LIBRETRANSLATE_KEY

Включает машинный перевод LibreTranslate и устанавливает MT_LIBRETRANSLATE_KEY

WEBLATE_MT_LIBRETRANSLATE_API_URL

Настраивает экземпляр API LibreTranslate для использования, см. MT_LIBRETRANSLATE_API_URL.

WEBLATE_MT_GOOGLE_KEY

Включает машинный перевод от Google Переводчик и устанавливает параметр MT_GOOGLE_KEY

WEBLATE_MT_GOOGLE_CREDENTIALS

Включает машинный перевод от Google Translate API V3 (расширенный) и устанавливает параметр MT_GOOGLE_CREDENTIALS

WEBLATE_MT_GOOGLE_PROJECT

Включает машинный перевод от Google Translate API V3 (расширенный) и устанавливает параметр MT_GOOGLE_PROJECT

WEBLATE_MT_GOOGLE_LOCATION

Включает машинный перевод от Google Translate API V3 (расширенный) и устанавливает параметр MT_GOOGLE_LOCATION

WEBLATE_MT_MICROSOFT_COGNITIVE_KEY

Включает машинный перевод от Переводчика Microsoft Cognitive Services и устанавливает параметр MT_MICROSOFT_COGNITIVE_KEY

WEBLATE_MT_MICROSOFT_ENDPOINT_URL

Устанавливает параметр MT_MICROSOFT_ENDPOINT_URL, обратите внимание, что он должен содержать только доменное имя.

WEBLATE_MT_MICROSOFT_REGION

Устанавливает параметр MT_MICROSOFT_REGION

WEBLATE_MT_MICROSOFT_BASE_URL

Устанавливает параметр MT_MICROSOFT_BASE_URL

WEBLATE_MT_MODERNMT_KEY

Включает машинный перевод от ModernMT и устанавливает параметр MT_MODERNMT_KEY.

WEBLATE_MT_MYMEMORY_ENABLED

Включает машинный перевод от MyMemory и устанавливает параметр MT_MYMEMORY_EMAIL в значение переменной окружения WEBLATE_ADMIN_EMAIL.

Пример:

environment:
  WEBLATE_MT_MYMEMORY_ENABLED: 1
WEBLATE_MT_GLOSBE_ENABLED

Включает машинный перевод от Glosbe.

environment:
  WEBLATE_MT_GLOSBE_ENABLED: 1
WEBLATE_MT_MICROSOFT_TERMINOLOGY_ENABLED

Включает машинный перевод от терминологической службы Майкрософт.

environment:
  WEBLATE_MT_MICROSOFT_TERMINOLOGY_ENABLED: 1
WEBLATE_MT_SAP_BASE_URL
WEBLATE_MT_SAP_SANDBOX_APIKEY
WEBLATE_MT_SAP_USERNAME
WEBLATE_MT_SAP_PASSWORD
WEBLATE_MT_SAP_USE_MT

Настраивает машинный перевод от SAP Translation Hub.

environment:
    WEBLATE_MT_SAP_BASE_URL: "https://example.hana.ondemand.com/translationhub/api/v1/"
    WEBLATE_MT_SAP_USERNAME: "user"
    WEBLATE_MT_SAP_PASSWORD: "password"
    WEBLATE_MT_SAP_USE_MT: 1
Параметры аутентификации
LDAP
WEBLATE_AUTH_LDAP_SERVER_URI
WEBLATE_AUTH_LDAP_USER_DN_TEMPLATE
WEBLATE_AUTH_LDAP_USER_ATTR_MAP
WEBLATE_AUTH_LDAP_BIND_DN
WEBLATE_AUTH_LDAP_BIND_PASSWORD
WEBLATE_AUTH_LDAP_CONNECTION_OPTION_REFERRALS
WEBLATE_AUTH_LDAP_USER_SEARCH_FILTER
WEBLATE_AUTH_LDAP_USER_SEARCH_UNION
WEBLATE_AUTH_LDAP_USER_SEARCH_UNION_DELIMITER

Настройка аутентификации через LDAP.

Пример прямой привязки:

environment:
  WEBLATE_AUTH_LDAP_SERVER_URI: ldap://ldap.example.org
  WEBLATE_AUTH_LDAP_USER_DN_TEMPLATE: uid=%(user)s,ou=People,dc=example,dc=net
  # map weblate 'full_name' to ldap 'name' and weblate 'email' attribute to 'mail' ldap attribute.
  # another example that can be used with OpenLDAP: 'full_name:cn,email:mail'
  WEBLATE_AUTH_LDAP_USER_ATTR_MAP: full_name:name,email:mail

Пример поиска и привязки:

environment:
  WEBLATE_AUTH_LDAP_SERVER_URI: ldap://ldap.example.org
  WEBLATE_AUTH_LDAP_BIND_DN: CN=ldap,CN=Users,DC=example,DC=com
  WEBLATE_AUTH_LDAP_BIND_PASSWORD: password
  WEBLATE_AUTH_LDAP_USER_ATTR_MAP: full_name:name,email:mail
  WEBLATE_AUTH_LDAP_USER_SEARCH: CN=Users,DC=example,DC=com

Пример объединения поиска и привязки:

environment:
  WEBLATE_AUTH_LDAP_SERVER_URI: ldap://ldap.example.org
  WEBLATE_AUTH_LDAP_BIND_DN: CN=ldap,CN=Users,DC=example,DC=com
  WEBLATE_AUTH_LDAP_BIND_PASSWORD: password
  WEBLATE_AUTH_LDAP_USER_ATTR_MAP: full_name:name,email:mail
  WEBLATE_AUTH_LDAP_USER_SEARCH_UNION: ou=users,dc=example,dc=com|ou=otherusers,dc=example,dc=com

Пример поиска и привязки в Active Directory:

environment:
  WEBLATE_AUTH_LDAP_BIND_DN: CN=ldap,CN=Users,DC=example,DC=com
  WEBLATE_AUTH_LDAP_BIND_PASSWORD: password
  WEBLATE_AUTH_LDAP_SERVER_URI: ldap://ldap.example.org
  WEBLATE_AUTH_LDAP_CONNECTION_OPTION_REFERRALS: 0
  WEBLATE_AUTH_LDAP_USER_ATTR_MAP: full_name:name,email:mail
  WEBLATE_AUTH_LDAP_USER_SEARCH: CN=Users,DC=example,DC=com
  WEBLATE_AUTH_LDAP_USER_SEARCH_FILTER: (sAMAccountName=%(user)s)
GitHub
WEBLATE_SOCIAL_AUTH_GITHUB_KEY
WEBLATE_SOCIAL_AUTH_GITHUB_SECRET
WEBLATE_SOCIAL_AUTH_GITHUB_ORG_KEY
WEBLATE_SOCIAL_AUTH_GITHUB_ORG_SECRET
WEBLATE_SOCIAL_AUTH_GITHUB_ORG_NAME
WEBLATE_SOCIAL_AUTH_GITHUB_TEAM_KEY
WEBLATE_SOCIAL_AUTH_GITHUB_TEAM_SECRET
WEBLATE_SOCIAL_AUTH_GITHUB_TEAM_ID

Включает аутентификацию через GitHub.

Bitbucket
WEBLATE_SOCIAL_AUTH_BITBUCKET_OAUTH2_KEY
WEBLATE_SOCIAL_AUTH_BITBUCKET_OAUTH2_SECRET
WEBLATE_SOCIAL_AUTH_BITBUCKET_KEY
WEBLATE_SOCIAL_AUTH_BITBUCKET_SECRET

Включает аутентификацию через Bitbucket.

Facebook
WEBLATE_SOCIAL_AUTH_FACEBOOK_KEY
WEBLATE_SOCIAL_AUTH_FACEBOOK_SECRET

Включает Facebook OAuth 2.

Google
WEBLATE_SOCIAL_AUTH_GOOGLE_OAUTH2_KEY
WEBLATE_SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET
WEBLATE_SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS
WEBLATE_SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_EMAILS

Включает Google OAuth 2.

GitLab
WEBLATE_SOCIAL_AUTH_GITLAB_KEY
WEBLATE_SOCIAL_AUTH_GITLAB_SECRET
WEBLATE_SOCIAL_AUTH_GITLAB_API_URL

Включает GitLab OAuth 2.

Azure Active Directory
WEBLATE_SOCIAL_AUTH_AZUREAD_OAUTH2_KEY
WEBLATE_SOCIAL_AUTH_AZUREAD_OAUTH2_SECRET

Включает аутентификацию через Azure Active Directory, смотрите раздел Microsoft Azure Active Directory.

Azure Active Directory с поддержкой Tenant
WEBLATE_SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_KEY
WEBLATE_SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_SECRET
WEBLATE_SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_TENANT_ID

Включает аутентификацию через Azure Active Directory с поддержкой Tenant, смотрите раздел Microsoft Azure Active Directory.

Keycloak
WEBLATE_SOCIAL_AUTH_KEYCLOAK_KEY
WEBLATE_SOCIAL_AUTH_KEYCLOAK_SECRET
WEBLATE_SOCIAL_AUTH_KEYCLOAK_PUBLIC_KEY
WEBLATE_SOCIAL_AUTH_KEYCLOAK_ALGORITHM
WEBLATE_SOCIAL_AUTH_KEYCLOAK_AUTHORIZATION_URL
WEBLATE_SOCIAL_AUTH_KEYCLOAK_ACCESS_TOKEN_URL

Включает аутентификацию через Keycloak, смотрите документацию.

Поставщики Linux

Вы можете включить аутентификацию с помощью сервисов аутентификации поставщиков Linux, установив следующие переменные в любое значение.

WEBLATE_SOCIAL_AUTH_FEDORA
WEBLATE_SOCIAL_AUTH_OPENSUSE
WEBLATE_SOCIAL_AUTH_UBUNTU
Slack
WEBLATE_SOCIAL_AUTH_SLACK_KEY
SOCIAL_AUTH_SLACK_SECRET

Включает аутентификацию через Slack, смотрите раздел Slack.

SAML

Самоподписанные ключи SAML генерируются автоматически при первом запуске контейнера. Если вы хотите использовать собственные ключи, поместите сертификат и закрытый ключ в файлы /app/data/ssl/saml.crt и /app/data/ssl/saml.key.

WEBLATE_SAML_IDP_ENTITY_ID
WEBLATE_SAML_IDP_URL
WEBLATE_SAML_IDP_X509CERT

Настройки провайдера идентификационных данных SAML, смотрите раздел Аутентификация через SAML.

Другие параметры аутентификации
WEBLATE_NO_EMAIL_AUTH

Disables e-mail authentication when set to any value. See Отключение аутентификации по паролю.

Настройки базы данных PostgreSQL

База данных создается в файле docker-compose.yml, поэтому эти настройки влияют как на контейнер Weblate, так и на контейнер PostgreSQL.

POSTGRES_PASSWORD

Пароль PostgreSQL.

POSTGRES_PASSWORD_FILE

Путь к файлу, содержащему пароль PostgreSQL. Используйте в качестве альтернативы POSTGRES_PASSWORD.

POSTGRES_USER

Имя пользователя PostgreSQL.

POSTGRES_DATABASE

Имя базы данных PostgreSQL.

POSTGRES_HOST

Имя хоста или IP-адрес сервера PostgreSQL. По умолчанию равен database.

POSTGRES_PORT

Порт сервера PostgreSQL. По умолчанию не установлен (используется значение по умолчанию).

POSTGRES_SSL_MODE

Настраивает обработку SSL сервером PostgreSQL при соединении с сервером, возможные варианты настройки смотрите документе Описания режимов SSL

POSTGRES_ALTER_ROLE

Устанавливает имя роли, которую Weblate будет настраивать во время миграции, смотреть раздел Настройка Weblate для использования PostgreSQL.

POSTGRES_CONN_MAX_AGE

Добавлено в версии 4.8.1.

Время соединения с базой данных, как целое число секунд. Используйте 0, чтобы закрывать соединения с базой данных в конце каждого запроса (это поведение по умолчанию).

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

Пример настроек:

environment:
    POSTGRES_CONN_MAX_AGE: 3600
POSTGRES_DISABLE_SERVER_SIDE_CURSORS

Добавлено в версии 4.9.1.

Отключите курсоры на стороне сервера в базе данных. Это необходимо в некоторых настройках pgbouncer.

Пример настроек:

environment:
    POSTGRES_DISABLE_SERVER_SIDE_CURSORS: 1
Параметры резервного копирования базы данных
WEBLATE_DATABASE_BACKUP

Настраивает ежедневный дамп базы данных с помощью параметра DATABASE_BACKUP. По умолчанию установлен в plain.

Настройка сервера кэширования

Weblate настоятельно рекомендует использовать Redis и при запуске Weblate’а в Docker’е вы должны предоставить экземпляр Redis’а.

REDIS_HOST

Имя хоста или IP-адрес сервера Redis. По умолчанию установлен в cache.

REDIS_PORT

Порт сервера Redis. По умолчанию установлен в 6379.

REDIS_DB

Номер базы данных Redis, по умолчанию установлен в 1.

REDIS_PASSWORD

Пароль сервера Redis, по умолчанию не используется.

REDIS_TLS

Включает использование SSL для соединения с Redis.

REDIS_VERIFY_SSL

Может использоваться для отключения проверки SSL-сертификата для соединениий с Redis.

Настройка почтового сервера

Чтобы работала отправка писем электронной почты, необходимо предоставить почтовый сервер.

Пример конфигурации TLS:

environment:
    WEBLATE_EMAIL_HOST: smtp.example.com
    WEBLATE_EMAIL_HOST_USER: user
    WEBLATE_EMAIL_HOST_PASSWORD: pass

Пример конфигурации SSL:

environment:
    WEBLATE_EMAIL_HOST: smtp.example.com
    WEBLATE_EMAIL_PORT: 465
    WEBLATE_EMAIL_HOST_USER: user
    WEBLATE_EMAIL_HOST_PASSWORD: pass
    WEBLATE_EMAIL_USE_TLS: 0
    WEBLATE_EMAIL_USE_SSL: 1
WEBLATE_EMAIL_HOST

Имя хоста или IP-адрес почтового сервера.

WEBLATE_EMAIL_PORT

Порт почтового сервера, по умолчанию установлен в 25.

См.также

EMAIL_PORT

WEBLATE_EMAIL_HOST_USER

Пользователь для аутентификации по электронной почте.

См.также

EMAIL_HOST_USER

WEBLATE_EMAIL_HOST_PASSWORD

Пароль для аутентификации по электронной почте.

См.также

EMAIL_HOST_PASSWORD

WEBLATE_EMAIL_HOST_PASSWORD_FILE

Пароль для аутентификации по электронной почте.

См.также

WEBLATE_EMAIL_HOST_PASSWORD

WEBLATE_EMAIL_USE_SSL

Использовать ли неявное TLS (безопасное) соединение при общении с сервером SMTP. В большей части документации по электронной почте этот тип TLS-соединения называется SSL. Он обычно используется на 465-м порту. Если у вас возникли проблемы, попробуйте включить явный TLS параметром WEBLATE_EMAIL_USE_TLS.

Изменено в версии 4.11: The SSL/TLS support is automatically enabled based on the WEBLATE_EMAIL_PORT.

WEBLATE_EMAIL_USE_TLS

Использовать ли TLS (безопасное) соединение при общении с сервером SMTP. Он используется для явных TLS-соединений, обычно на портах 587 или 25. Если ваши соединения зависают, попробуйте включить неявный TLS параметром WEBLATE_EMAIL_USE_SSL.

Изменено в версии 4.11: The SSL/TLS support is automatically enabled based on the WEBLATE_EMAIL_PORT.

WEBLATE_EMAIL_BACKEND

Настраивает бэкенд Django, используемый для отправки сообщений электронной почты.

WEBLATE_AUTO_UPDATE

Настраивает, должен ли Weblate обновлять репозитории и каким образом.

См.также

AUTO_UPDATE

Примечание

Это логическое значение параметра (используйте "true" или "false").

Интеграция с сайтом
WEBLATE_GET_HELP_URL

Настраивает параметр GET_HELP_URL.

WEBLATE_STATUS_URL

Настраивает параметр STATUS_URL.

Настраивает параметр LEGAL_URL.

WEBLATE_PRIVACY_URL

Настраивает параметр PRIVACY_URL.

Отчёты об ошибках

Рекомендуется систематически собирать ошибки от установки, смотрите раздел Сбор отчетов об ошибках.

Для включения поддержки Rollbar установите следующие переменные:

ROLLBAR_KEY

Ваш токен доступа к серверу Rollbar.

ROLLBAR_ENVIRONMENT

Ваше окружение Rollbar, по умолчанию установлена в production.

Для включения поддержки Sentry установите следующие переменные:

SENTRY_DSN

Ваш DSN Sentry.

SENTRY_ENVIRONMENT

Ваше окружение Sentry (необязательная).

CDN локализации
WEBLATE_LOCALIZE_CDN_URL
WEBLATE_LOCALIZE_CDN_PATH

Добавлено в версии 4.2.1.

Настройки для CDN локализации JavaScript’а.

Переменная WEBLATE_LOCALIZE_CDN_PATH указывает путь внутри контейнера. Он должен указывать на постоянный том, а не на временное хранилище.

Одной из возможных настроек является направление пути внутрь каталога данных Weblate:

environment:
  WEBLATE_LOCALIZE_CDN_URL: https://cdn.example.com/
  WEBLATE_LOCALIZE_CDN_PATH: /app/data/l10n-cdn

Примечание

За раздачу файлов, генерируемых Weblate, отвечаете вы, эта переменная только указывает местоположение, куда их надо сохранять.

Изменение включённых приложений, проверок, надстроек или автоматических исправлений

Добавлено в версии 3.8-5.

Встроенную конфигурация включённых проверок, надстроек или автоматических исправлений можно изменить с помощью следующих переменных:

WEBLATE_ADD_APPS
WEBLATE_REMOVE_APPS
WEBLATE_ADD_CHECK
WEBLATE_REMOVE_CHECK
WEBLATE_ADD_AUTOFIX
WEBLATE_REMOVE_AUTOFIX
WEBLATE_ADD_ADDONS
WEBLATE_REMOVE_ADDONS

Пример:

environment:
  WEBLATE_REMOVE_AUTOFIX: weblate.trans.autofixes.whitespace.SameBookendingWhitespace
  WEBLATE_ADD_ADDONS: customize.addons.MyAddon,customize.addons.OtherAddon
Параметры контейнера
WEBLATE_WORKERS

Добавлено в версии 4.6.1.

Базовое количество рабочих процессов, запущенных в контейнере. Если оно не задано, то определяется автоматически при запуске контейнера на основе количества доступных ядер процессора.

Используется для определения CELERY_MAIN_OPTIONS, CELERY_NOTIFY_OPTIONS, CELERY_MEMORY_OPTIONS, CELERY_TRANSLATE_OPTIONS, CELERY_BACKUP_OPTIONS, CELERY_BEAT_OPTIONS, и WEB_WORKERS. Вы можете использовать эти настройки для точной регулировки.

CELERY_MAIN_OPTIONS
CELERY_NOTIFY_OPTIONS
CELERY_MEMORY_OPTIONS
CELERY_TRANSLATE_OPTIONS
CELERY_BACKUP_OPTIONS
CELERY_BEAT_OPTIONS

Эти переменные позволяют настроить параметры рабочего Celery. Может быть полезно подправить степень параллелизма (--concurrency 16) или включить использование другой реализации пула (--pool=gevent).

По умолчанию количество одновременно обработчиков основано на WEBLATE_WORKERS.

Пример:

environment:
  CELERY_MAIN_OPTIONS: --concurrency 16
WEB_WORKERS

Настраивает количество выполняемых рабочих процессов uWSGI.

По умолчанию это означает WEBLATE_WORKERS.

Пример:

environment:
  WEB_WORKERS: 32
WEBLATE_SERVICE

Определяет, какие службы должны выполняться внутри контейнера. Используйте это для Масштабирование горизонтально.

Определены следующие услуги:

celery-beat

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

celery-backup

Обработчик Celery для резервного копирования, должен быть запущен только один.

celery-celery

Общий обработчик Celery.

celery-memory

Память переводов обработчиков Celery.

celery-notify

Обработчики уведомлений Celery.

celery-translate

Тип фильтра автоматического перевода обработчика Celery.

web

Веб-сервер.

Тома контейнеров Docker’а

Контейнер Weblate экспортирует только два тома (данные и кэш). Контейнеры других сервисов (PostgreSQL или Redis) имеют свои собственные тома данных, которые в настоящем документе не рассматриваются.

Том данных используется для хранения таких постоянных данных Weblate, как склонированные репозитории, или для настройки установки Weblate.

Непосредственное размещение этого тома в хост-системе зависит от настроек самого Docker’а, но обычно он хранится в каталоге /var/lib/docker/volumes/weblate-docker_weblate-data/_data/ (путь состоит из имени вашего каталога docker-compose, имён контейнеров и томов). В контейнере он монтируется под именем /app/data.

Том кэша монтируется как /app/cache и используется для хранения статических файлов. Его содержимое воссоздаётся при запуске контейнера, и том может быть смонтирован с использованием эфемерной файловой системы, такой как tmpfs.

При создании томов вручную, каталоги должны принадлежать UID 1000, так как именно этот пользователь используется внутри контейнера.

Дальнейшая настройка

Вы можете и дальше настраивать установку Weblate в томе данных, смотрите раздел Тома контейнеров Docker’а.

Пользовательские файлы конфигурации

В дополнение ко всему вы можете переопределить параметры в файле /app/data/settings-override.py (смотреть раздел Тома контейнеров Docker’а). Этот файл выполняется в самом конце встроенных настроек, после загрузки всех настроек из переменных окружения, так что вы можете подстроить или переопределить их.

Замена логотипа и других статических файлов

Добавлено в версии 3.8-5.

Статические файлы, поставляемые с Weblate, можно переопределить, поместив их в каталог /app/data/python/customize/static (смотрите раздел Тома контейнеров Docker’а). Например, создав файл /app/data/python/customize/static/favicon.ico, вы замените им иконку сайта.

Подсказка

При запуске контейнера файлы копируются в соответствующее место, поэтому после изменения содержимого тома Weblate требуется перезапустить.

Этот подход также можно использовать для переопределения шаблонов Weblate. Например, документы Правовые вопросы могут быть помещены в /app/data/python/customize/templates/legal/documents.

В качестве альтернативы вы также можете включить свой собственный модуль (смотрите раздел Настройка Weblate) и добавить его в контейнер Docker’а отдельным томом, например:

weblate:
  volumes:
    - weblate-data:/app/data
    - ./weblate_customization/weblate_customization:/app/data/python/weblate_customization
  environment:
    WEBLATE_ADD_APPS: weblate_customization
Добавление собственных модулей Python

Добавлено в версии 3.8-5.

Собственные модули Python вы можете разместить в каталоге /app/data/python/ (смотрите раздел Тома контейнеров Docker’а) — в дальнейшем они могут быть загружены в Weblate, скорее всего, через пользовательские файлы настроек.

См.также

Настройка Weblate

Configuring PostgreSQL server

The PostgtreSQL container uses default PostgreSQL configuration and it won’t effectively utilize your CPU cores or memory. It is recommended to customize the configuration to improve the performance.

The configuration can be adjusted as described in Database Configuration at https://hub.docker.com/_/postgres. The configuration matching your environment can be generated using https://pgtune.leopard.in.ua/.

Установка на Debian и Ubuntu

Требования к оборудованию

Weblate должен без проблем работать на любом современном оборудовании, ниже приведена минимальная конфигурация, необходимая для запуска Weblate на одном сервере (сам Weblate, база данных и веб-сервер):

  • 2 ГБ оперативной памяти

  • 2-х ядерный процессор

  • 1 ГБ дискового пространства

Чем больше памяти, тем лучше — она используется для кэширования на всех уровнях (на уровне файловой системы, уровне базы данных и уровне Weblate).

Множество одновременно работающих пользователей увеличивают количество необходимых ядер процессора. Для сотен компонентов перевода рекомендуется не менее 4 Гб оперативной памяти.

Типовое использование дискового пространства базой данной находится в районе 300MB на 1 миллион хранимых слов. Пространство необходимое для клонирования репозиториев разнится, хотя Weblate и пытается поддерживать их размер минимальным, делая поверхностные (shallow) копии.

Примечание

Фактические требования к вашей установке Weblate сильно зависят от размера управляемых ею переводов.

Установка
Системные требования

Установите зависимости, необходимые для сборки модулей Python (смотрите раздел Требования к программному обеспечению):

apt install \
   libxml2-dev libxslt-dev libfreetype6-dev libjpeg-dev libz-dev libyaml-dev \
   libffi-dev libcairo-dev gir1.2-pango-1.0 libgirepository1.0-dev \
   libacl1-dev libssl-dev libpq-dev libjpeg62-turbo-dev build-essential \
   python3-gdbm python3-dev python3-pip python3-virtualenv virtualenv git

Установите желаемые необязательные зависимости в зависимости от функций, которые вы собираетесь использовать (смотрите раздел Необязательные зависимости):

apt install tesseract-ocr libtesseract-dev libleptonica-dev
apt install libldap2-dev libldap-common libsasl2-dev
apt install libxmlsec1-dev

При желании установите программное обеспечение для запуска рабочего сервера, смотрите разделы Запуск сервера, Настройка базы данных для Weblate и Фоновые задачи с использованием Celery. В зависимости от размера вашей установки вы можете захотеть запустить эти компоненты на выделенных серверах.

Инструкции по установке на местах:

# Web server option 1: NGINX and uWSGI
apt install nginx uwsgi uwsgi-plugin-python3

# Web server option 2: Apache with ``mod_wsgi``
apt install apache2 libapache2-mod-wsgi-py3

# Caching backend: Redis
apt install redis-server

# Database server: PostgreSQL
apt install postgresql postgresql-contrib

# SMTP server
apt install exim4
Модули Python

Подсказка

Для установки Weblate мы используем виртуальное окружение, предоставляемое пакетом virtualenv, чтобы отделить Weblate от вашей системы. Если вы не знакомы с этим понятием, обратитесь к документации пакета.

  1. Создайте виртуальное окружение для Weblate:

    virtualenv --python=python3 ~/weblate-env
    
  2. Активируйте виртуальное окружение для Weblate:

    . ~/weblate-env/bin/activate
    
  3. Установите Weblate, включая все его необязательные зависимости:

    # pkgconfig is needed to install borgbackup 1.2
    pip install pkgconfig
    # Install Weblate with all optional dependencies
    pip install "Weblate[all]"
    

    Пожалуйста, проверьте Необязательные зависимости для тонкой настройки необязательных зависимостей.

    Примечание

    On some Linux distributions running Weblate fails with libffi error:

    ffi_prep_closure(): bad user_data (it seems that the version of the libffi library seen at runtime is different from the 'ffi.h' file seen at compile-time)
    

    Это вызвано несовместимостью бинарных пакетов, распространяемых через PyPI, с дистрибутивом. Для решения этой проблемы необходимо пересобрать пакет в вашей системе:

    pip install --force-reinstall --no-binary :all: cffi
    
Настройка Weblate

Примечание

Следующие шаги подразумевают, что виртуальное окружение, используемое Weblate’ом, активно (активировать его можно командой . ~/weblate-env/bin/activate). В случае, если это не так, вам придется указывать полный путь к команде weblate: ~/weblate-env/bin/weblate.

  1. Скопируйте файл ~/weblate-env/lib/python3.7/site-packages/weblate/settings_example.py в ~/weblate-env/lib/python3.7/site-packages/weblate/settings.py.

  2. По своему усмотрению подкорректируйте значения в новом файле settings.py. Вам нужно будет предоставить как минимум учётные данные базы данных и секретный ключ Django, но для установки на рабочей системе вам понадобится больше изменений, смотрите больше в разделе Изменение конфигурации под свои нужды.

  3. Создайте базу данных и ее структуру для Weblate (пример настройки использует PostgreSQL, для установки в рабочую среду ознакомьтесь разделом Настройка базы данных для Weblate):

    weblate migrate
    
  4. Создайте учетную запись администратора и скопируйте сгенерированный ей пароль в буфер обмена, также сохраните его для дальнейшего использования:

    weblate createadmin
    
  5. Соберите статические файлы для веб-сервера (смотрите разделы Запуск сервера и Обслуживание статических файлов):

    weblate collectstatic
    
  6. Сожмите файлы JavaScript и CSS (необязательно, смотрите раздел Сжатие клиентских ресурсов):

    weblate compress
    
  7. Запустите рабочие процессы Celery. Для целей разработки это делать не обязательно, но настоятельно рекомендуется. Дополнительную информацию смотрите в разделе Фоновые задачи с использованием Celery:

    ~/weblate-env/lib/python3.7/site-packages/weblate/examples/celery start
    
  8. Запустите сервер разработки (шаги для запуска рабочего сервера смотрите в разделе Запуск сервера):

    weblate runserver
    
После установки

Поздравляем, теперь ваш сервер Weblate запущен и вы можете начать его использовать.

  • Теперь вы можете получить доступ к Weblate по адресу http://localhost:8000/.

  • Sign in with admin credentials obtained during installation or register with new users.

  • Теперь при помощи команды weblate и когда активно виртуальное окружение Weblate вы можете запускать его команды, смотрите раздел Команды управления.

  • Остановить тестовый сервер можно комбинацией Ctrl+C.

  • Просмотрите список вероятных проблем с вашей установкой или по адресу /manage/performance/ в URL (смотреть раздел Интерфейс управления), или с помощью команды weblate check --deploy; смотреть также раздел Рабочая среда.

Добавление перевода
  1. Откройте интерфейс администратора (http://localhost:8000/create/project/) и создайте проект, который вы хотите перевести. Подробнее смотрите в разделе Настройки проекта.

    Всё, что вам нужно здесь указать — это название проекта и его веб-сайт.

  2. Создайте компонент, который является реальным объектом для перевода — он указывает на репозиторий системы контроля версий и задаёт файлы для перевода. Подробнее смотрите в разделе Настройки компонента.

    The important fields here are: Название компонента, Репозиторий исходного кода, and Маска файла for finding translatable files. Weblate supports a wide range of formats including GNU gettext, Строковые ресурсы Android, Строки Apple iOS, Файлы свойств Java, Формат Stringsdict or Формат Fluent, see Поддерживаемые форматы файлов for more details.

  3. После того, как вышеперечисленные действия будут завершены (это может быть довольно длительный процесс в зависимости от размера вашего репозитория системы контроля версий и количества сообщений для перевода), вы сможете начать перевод.

Установка на SUSE и openSUSE

Требования к оборудованию

Weblate должен без проблем работать на любом современном оборудовании, ниже приведена минимальная конфигурация, необходимая для запуска Weblate на одном сервере (сам Weblate, база данных и веб-сервер):

  • 2 ГБ оперативной памяти

  • 2-х ядерный процессор

  • 1 ГБ дискового пространства

Чем больше памяти, тем лучше — она используется для кэширования на всех уровнях (на уровне файловой системы, уровне базы данных и уровне Weblate).

Множество одновременно работающих пользователей увеличивают количество необходимых ядер процессора. Для сотен компонентов перевода рекомендуется не менее 4 Гб оперативной памяти.

Типовое использование дискового пространства базой данной находится в районе 300MB на 1 миллион хранимых слов. Пространство необходимое для клонирования репозиториев разнится, хотя Weblate и пытается поддерживать их размер минимальным, делая поверхностные (shallow) копии.

Примечание

Фактические требования к вашей установке Weblate сильно зависят от размера управляемых ею переводов.

Установка
Системные требования

Установите зависимости, необходимые для сборки модулей Python (смотрите раздел Требования к программному обеспечению):

zypper install \
   libxslt-devel libxml2-devel freetype-devel libjpeg-devel zlib-devel \
   libyaml-devel libffi-devel cairo-devel pango-devel \
   gobject-introspection-devel libacl-devel python3-pip python3-virtualenv \
   python3-devel git

Установите желаемые необязательные зависимости в зависимости от функций, которые вы собираетесь использовать (смотрите раздел Необязательные зависимости):

zypper install tesseract-ocr tesseract-devel leptonica-devel
zypper install libldap2-devel libsasl2-devel
zypper install libxmlsec1-devel

При желании установите программное обеспечение для запуска рабочего сервера, смотрите разделы Запуск сервера, Настройка базы данных для Weblate и Фоновые задачи с использованием Celery. В зависимости от размера вашей установки вы можете захотеть запустить эти компоненты на выделенных серверах.

Инструкции по установке на местах:

# Web server option 1: NGINX and uWSGI
zypper install nginx uwsgi uwsgi-plugin-python3

# Web server option 2: Apache with ``mod_wsgi``
zypper install apache2 apache2-mod_wsgi

# Caching backend: Redis
zypper install redis-server

# Database server: PostgreSQL
zypper install postgresql postgresql-contrib

# SMTP server
zypper install postfix
Модули Python

Подсказка

Для установки Weblate мы используем виртуальное окружение, предоставляемое пакетом virtualenv, чтобы отделить Weblate от вашей системы. Если вы не знакомы с этим понятием, обратитесь к документации пакета.

  1. Создайте виртуальное окружение для Weblate:

    virtualenv --python=python3 ~/weblate-env
    
  2. Активируйте виртуальное окружение для Weblate:

    . ~/weblate-env/bin/activate
    
  3. Установите Weblate, включая все его необязательные зависимости:

    # pkgconfig is needed to install borgbackup 1.2
    pip install pkgconfig
    # Install Weblate with all optional dependencies
    pip install "Weblate[all]"
    

    Пожалуйста, проверьте Необязательные зависимости для тонкой настройки необязательных зависимостей.

    Примечание

    On some Linux distributions running Weblate fails with libffi error:

    ffi_prep_closure(): bad user_data (it seems that the version of the libffi library seen at runtime is different from the 'ffi.h' file seen at compile-time)
    

    Это вызвано несовместимостью бинарных пакетов, распространяемых через PyPI, с дистрибутивом. Для решения этой проблемы необходимо пересобрать пакет в вашей системе:

    pip install --force-reinstall --no-binary :all: cffi
    
Настройка Weblate

Примечание

Следующие шаги подразумевают, что виртуальное окружение, используемое Weblate’ом, активно (активировать его можно командой . ~/weblate-env/bin/activate). В случае, если это не так, вам придется указывать полный путь к команде weblate: ~/weblate-env/bin/weblate.

  1. Скопируйте файл ~/weblate-env/lib/python3.7/site-packages/weblate/settings_example.py в ~/weblate-env/lib/python3.7/site-packages/weblate/settings.py.

  2. По своему усмотрению подкорректируйте значения в новом файле settings.py. Вам нужно будет предоставить как минимум учётные данные базы данных и секретный ключ Django, но для установки на рабочей системе вам понадобится больше изменений, смотрите больше в разделе Изменение конфигурации под свои нужды.

  3. Создайте базу данных и ее структуру для Weblate (пример настройки использует PostgreSQL, для установки в рабочую среду ознакомьтесь разделом Настройка базы данных для Weblate):

    weblate migrate
    
  4. Создайте учетную запись администратора и скопируйте сгенерированный ей пароль в буфер обмена, также сохраните его для дальнейшего использования:

    weblate createadmin
    
  5. Соберите статические файлы для веб-сервера (смотрите разделы Запуск сервера и Обслуживание статических файлов):

    weblate collectstatic
    
  6. Сожмите файлы JavaScript и CSS (необязательно, смотрите раздел Сжатие клиентских ресурсов):

    weblate compress
    
  7. Запустите рабочие процессы Celery. Для целей разработки это делать не обязательно, но настоятельно рекомендуется. Дополнительную информацию смотрите в разделе Фоновые задачи с использованием Celery:

    ~/weblate-env/lib/python3.7/site-packages/weblate/examples/celery start
    
  8. Запустите сервер разработки (шаги для запуска рабочего сервера смотрите в разделе Запуск сервера):

    weblate runserver
    
После установки

Поздравляем, теперь ваш сервер Weblate запущен и вы можете начать его использовать.

  • Теперь вы можете получить доступ к Weblate по адресу http://localhost:8000/.

  • Sign in with admin credentials obtained during installation or register with new users.

  • Теперь при помощи команды weblate и когда активно виртуальное окружение Weblate вы можете запускать его команды, смотрите раздел Команды управления.

  • Остановить тестовый сервер можно комбинацией Ctrl+C.

  • Просмотрите список вероятных проблем с вашей установкой или по адресу /manage/performance/ в URL (смотреть раздел Интерфейс управления), или с помощью команды weblate check --deploy; смотреть также раздел Рабочая среда.

Добавление перевода
  1. Откройте интерфейс администратора (http://localhost:8000/create/project/) и создайте проект, который вы хотите перевести. Подробнее смотрите в разделе Настройки проекта.

    Всё, что вам нужно здесь указать — это название проекта и его веб-сайт.

  2. Создайте компонент, который является реальным объектом для перевода — он указывает на репозиторий системы контроля версий и задаёт файлы для перевода. Подробнее смотрите в разделе Настройки компонента.

    The important fields here are: Название компонента, Репозиторий исходного кода, and Маска файла for finding translatable files. Weblate supports a wide range of formats including GNU gettext, Строковые ресурсы Android, Строки Apple iOS, Файлы свойств Java, Формат Stringsdict or Формат Fluent, see Поддерживаемые форматы файлов for more details.

  3. После того, как вышеперечисленные действия будут завершены (это может быть довольно длительный процесс в зависимости от размера вашего репозитория системы контроля версий и количества сообщений для перевода), вы сможете начать перевод.

Установка на RedHat, Fedora и CentOS

Требования к оборудованию

Weblate должен без проблем работать на любом современном оборудовании, ниже приведена минимальная конфигурация, необходимая для запуска Weblate на одном сервере (сам Weblate, база данных и веб-сервер):

  • 2 ГБ оперативной памяти

  • 2-х ядерный процессор

  • 1 ГБ дискового пространства

Чем больше памяти, тем лучше — она используется для кэширования на всех уровнях (на уровне файловой системы, уровне базы данных и уровне Weblate).

Множество одновременно работающих пользователей увеличивают количество необходимых ядер процессора. Для сотен компонентов перевода рекомендуется не менее 4 Гб оперативной памяти.

Типовое использование дискового пространства базой данной находится в районе 300MB на 1 миллион хранимых слов. Пространство необходимое для клонирования репозиториев разнится, хотя Weblate и пытается поддерживать их размер минимальным, делая поверхностные (shallow) копии.

Примечание

Фактические требования к вашей установке Weblate сильно зависят от размера управляемых ею переводов.

Установка
Системные требования

Установите зависимости, необходимые для сборки модулей Python (смотрите раздел Требования к программному обеспечению):

dnf install \
   libxslt-devel libxml2-devel freetype-devel libjpeg-devel zlib-devel \
   libyaml-devel libffi-devel cairo-devel pango-devel \
   gobject-introspection-devel libacl-devel python3-pip python3-virtualenv \
   python3-devel git

Установите желаемые необязательные зависимости в зависимости от функций, которые вы собираетесь использовать (смотрите раздел Необязательные зависимости):

dnf install tesseract-langpack-eng tesseract-devel leptonica-devel
dnf install libldap2-devel libsasl2-devel
dnf install libxmlsec1-devel

При желании установите программное обеспечение для запуска рабочего сервера, смотрите разделы Запуск сервера, Настройка базы данных для Weblate и Фоновые задачи с использованием Celery. В зависимости от размера вашей установки вы можете захотеть запустить эти компоненты на выделенных серверах.

Инструкции по установке на местах:

# Web server option 1: NGINX and uWSGI
dnf install nginx uwsgi uwsgi-plugin-python3

# Web server option 2: Apache with ``mod_wsgi``
dnf install apache2 apache2-mod_wsgi

# Caching backend: Redis
dnf install redis

# Database server: PostgreSQL
dnf install postgresql postgresql-contrib

# SMTP server
dnf install postfix
Модули Python

Подсказка

Для установки Weblate мы используем виртуальное окружение, предоставляемое пакетом virtualenv, чтобы отделить Weblate от вашей системы. Если вы не знакомы с этим понятием, обратитесь к документации пакета.

  1. Создайте виртуальное окружение для Weblate:

    virtualenv --python=python3 ~/weblate-env
    
  2. Активируйте виртуальное окружение для Weblate:

    . ~/weblate-env/bin/activate
    
  3. Установите Weblate, включая все его необязательные зависимости:

    # pkgconfig is needed to install borgbackup 1.2
    pip install pkgconfig
    # Install Weblate with all optional dependencies
    pip install "Weblate[all]"
    

    Пожалуйста, проверьте Необязательные зависимости для тонкой настройки необязательных зависимостей.

    Примечание

    On some Linux distributions running Weblate fails with libffi error:

    ffi_prep_closure(): bad user_data (it seems that the version of the libffi library seen at runtime is different from the 'ffi.h' file seen at compile-time)
    

    Это вызвано несовместимостью бинарных пакетов, распространяемых через PyPI, с дистрибутивом. Для решения этой проблемы необходимо пересобрать пакет в вашей системе:

    pip install --force-reinstall --no-binary :all: cffi
    
Настройка Weblate

Примечание

Следующие шаги подразумевают, что виртуальное окружение, используемое Weblate’ом, активно (активировать его можно командой . ~/weblate-env/bin/activate). В случае, если это не так, вам придется указывать полный путь к команде weblate: ~/weblate-env/bin/weblate.

  1. Скопируйте файл ~/weblate-env/lib/python3.7/site-packages/weblate/settings_example.py в ~/weblate-env/lib/python3.7/site-packages/weblate/settings.py.

  2. По своему усмотрению подкорректируйте значения в новом файле settings.py. Вам нужно будет предоставить как минимум учётные данные базы данных и секретный ключ Django, но для установки на рабочей системе вам понадобится больше изменений, смотрите больше в разделе Изменение конфигурации под свои нужды.

  3. Создайте базу данных и ее структуру для Weblate (пример настройки использует PostgreSQL, для установки в рабочую среду ознакомьтесь разделом Настройка базы данных для Weblate):

    weblate migrate
    
  4. Создайте учетную запись администратора и скопируйте сгенерированный ей пароль в буфер обмена, также сохраните его для дальнейшего использования:

    weblate createadmin
    
  5. Соберите статические файлы для веб-сервера (смотрите разделы Запуск сервера и Обслуживание статических файлов):

    weblate collectstatic
    
  6. Сожмите файлы JavaScript и CSS (необязательно, смотрите раздел Сжатие клиентских ресурсов):

    weblate compress
    
  7. Запустите рабочие процессы Celery. Для целей разработки это делать не обязательно, но настоятельно рекомендуется. Дополнительную информацию смотрите в разделе Фоновые задачи с использованием Celery:

    ~/weblate-env/lib/python3.7/site-packages/weblate/examples/celery start
    
  8. Запустите сервер разработки (шаги для запуска рабочего сервера смотрите в разделе Запуск сервера):

    weblate runserver
    
После установки

Поздравляем, теперь ваш сервер Weblate запущен и вы можете начать его использовать.

  • Теперь вы можете получить доступ к Weblate по адресу http://localhost:8000/.

  • Sign in with admin credentials obtained during installation or register with new users.

  • Теперь при помощи команды weblate и когда активно виртуальное окружение Weblate вы можете запускать его команды, смотрите раздел Команды управления.

  • Остановить тестовый сервер можно комбинацией Ctrl+C.

  • Просмотрите список вероятных проблем с вашей установкой или по адресу /manage/performance/ в URL (смотреть раздел Интерфейс управления), или с помощью команды weblate check --deploy; смотреть также раздел Рабочая среда.

Добавление перевода
  1. Откройте интерфейс администратора (http://localhost:8000/create/project/) и создайте проект, который вы хотите перевести. Подробнее смотрите в разделе Настройки проекта.

    Всё, что вам нужно здесь указать — это название проекта и его веб-сайт.

  2. Создайте компонент, который является реальным объектом для перевода — он указывает на репозиторий системы контроля версий и задаёт файлы для перевода. Подробнее смотрите в разделе Настройки компонента.

    The important fields here are: Название компонента, Репозиторий исходного кода, and Маска файла for finding translatable files. Weblate supports a wide range of formats including GNU gettext, Строковые ресурсы Android, Строки Apple iOS, Файлы свойств Java, Формат Stringsdict or Формат Fluent, see Поддерживаемые форматы файлов for more details.

  3. После того, как вышеперечисленные действия будут завершены (это может быть довольно длительный процесс в зависимости от размера вашего репозитория системы контроля версий и количества сообщений для перевода), вы сможете начать перевод.

Установка на macOS

Требования к оборудованию

Weblate должен без проблем работать на любом современном оборудовании, ниже приведена минимальная конфигурация, необходимая для запуска Weblate на одном сервере (сам Weblate, база данных и веб-сервер):

  • 2 ГБ оперативной памяти

  • 2-х ядерный процессор

  • 1 ГБ дискового пространства

Чем больше памяти, тем лучше — она используется для кэширования на всех уровнях (на уровне файловой системы, уровне базы данных и уровне Weblate).

Множество одновременно работающих пользователей увеличивают количество необходимых ядер процессора. Для сотен компонентов перевода рекомендуется не менее 4 Гб оперативной памяти.

Типовое использование дискового пространства базой данной находится в районе 300MB на 1 миллион хранимых слов. Пространство необходимое для клонирования репозиториев разнится, хотя Weblate и пытается поддерживать их размер минимальным, делая поверхностные (shallow) копии.

Примечание

Фактические требования к вашей установке Weblate сильно зависят от размера управляемых ею переводов.

Установка
Системные требования

Установите зависимости, необходимые для сборки модулей Python (смотрите раздел Требования к программному обеспечению):

brew install python pango cairo gobject-introspection libffi glib libyaml
pip3 install virtualenv

Убедитесь, что pip сможет найти версию libffi, предоставляемую homebrew — она понадобится на этапе сборки установки.

export PKG_CONFIG_PATH="/usr/local/opt/libffi/lib/pkgconfig"

Установите желаемые необязательные зависимости в зависимости от функций, которые вы собираетесь использовать (смотрите раздел Необязательные зависимости):

brew install tesseract

При желании установите программное обеспечение для запуска рабочего сервера, смотрите разделы Запуск сервера, Настройка базы данных для Weblate и Фоновые задачи с использованием Celery. В зависимости от размера вашей установки вы можете захотеть запустить эти компоненты на выделенных серверах.

Инструкции по установке на местах:

# Web server option 1: NGINX and uWSGI
brew install nginx uwsgi

# Web server option 2: Apache with ``mod_wsgi``
brew install httpd

# Caching backend: Redis
brew install redis

# Database server: PostgreSQL
brew install postgresql
Модули Python

Подсказка

Для установки Weblate мы используем виртуальное окружение, предоставляемое пакетом virtualenv, чтобы отделить Weblate от вашей системы. Если вы не знакомы с этим понятием, обратитесь к документации пакета.

  1. Создайте виртуальное окружение для Weblate:

    virtualenv --python=python3 ~/weblate-env
    
  2. Активируйте виртуальное окружение для Weblate:

    . ~/weblate-env/bin/activate
    
  3. Установите Weblate, включая все его необязательные зависимости:

    # pkgconfig is needed to install borgbackup 1.2
    pip install pkgconfig
    # Install Weblate with all optional dependencies
    pip install "Weblate[all]"
    

    Пожалуйста, проверьте Необязательные зависимости для тонкой настройки необязательных зависимостей.

    Примечание

    On some Linux distributions running Weblate fails with libffi error:

    ffi_prep_closure(): bad user_data (it seems that the version of the libffi library seen at runtime is different from the 'ffi.h' file seen at compile-time)
    

    Это вызвано несовместимостью бинарных пакетов, распространяемых через PyPI, с дистрибутивом. Для решения этой проблемы необходимо пересобрать пакет в вашей системе:

    pip install --force-reinstall --no-binary :all: cffi
    
Настройка Weblate

Примечание

Следующие шаги подразумевают, что виртуальное окружение, используемое Weblate’ом, активно (активировать его можно командой . ~/weblate-env/bin/activate). В случае, если это не так, вам придется указывать полный путь к команде weblate: ~/weblate-env/bin/weblate.

  1. Скопируйте файл ~/weblate-env/lib/python3.7/site-packages/weblate/settings_example.py в ~/weblate-env/lib/python3.7/site-packages/weblate/settings.py.

  2. По своему усмотрению подкорректируйте значения в новом файле settings.py. Вам нужно будет предоставить как минимум учётные данные базы данных и секретный ключ Django, но для установки на рабочей системе вам понадобится больше изменений, смотрите больше в разделе Изменение конфигурации под свои нужды.

  3. Создайте базу данных и ее структуру для Weblate (пример настройки использует PostgreSQL, для установки в рабочую среду ознакомьтесь разделом Настройка базы данных для Weblate):

    weblate migrate
    
  4. Создайте учетную запись администратора и скопируйте сгенерированный ей пароль в буфер обмена, также сохраните его для дальнейшего использования:

    weblate createadmin
    
  5. Соберите статические файлы для веб-сервера (смотрите разделы Запуск сервера и Обслуживание статических файлов):

    weblate collectstatic
    
  6. Сожмите файлы JavaScript и CSS (необязательно, смотрите раздел Сжатие клиентских ресурсов):

    weblate compress
    
  7. Запустите рабочие процессы Celery. Для целей разработки это делать не обязательно, но настоятельно рекомендуется. Дополнительную информацию смотрите в разделе Фоновые задачи с использованием Celery:

    ~/weblate-env/lib/python3.7/site-packages/weblate/examples/celery start
    
  8. Запустите сервер разработки (шаги для запуска рабочего сервера смотрите в разделе Запуск сервера):

    weblate runserver
    
После установки

Поздравляем, теперь ваш сервер Weblate запущен и вы можете начать его использовать.

  • Теперь вы можете получить доступ к Weblate по адресу http://localhost:8000/.

  • Sign in with admin credentials obtained during installation or register with new users.

  • Теперь при помощи команды weblate и когда активно виртуальное окружение Weblate вы можете запускать его команды, смотрите раздел Команды управления.

  • Остановить тестовый сервер можно комбинацией Ctrl+C.

  • Просмотрите список вероятных проблем с вашей установкой или по адресу /manage/performance/ в URL (смотреть раздел Интерфейс управления), или с помощью команды weblate check --deploy; смотреть также раздел Рабочая среда.

Добавление перевода
  1. Откройте интерфейс администратора (http://localhost:8000/create/project/) и создайте проект, который вы хотите перевести. Подробнее смотрите в разделе Настройки проекта.

    Всё, что вам нужно здесь указать — это название проекта и его веб-сайт.

  2. Создайте компонент, который является реальным объектом для перевода — он указывает на репозиторий системы контроля версий и задаёт файлы для перевода. Подробнее смотрите в разделе Настройки компонента.

    The important fields here are: Название компонента, Репозиторий исходного кода, and Маска файла for finding translatable files. Weblate supports a wide range of formats including GNU gettext, Строковые ресурсы Android, Строки Apple iOS, Файлы свойств Java, Формат Stringsdict or Формат Fluent, see Поддерживаемые форматы файлов for more details.

  3. После того, как вышеперечисленные действия будут завершены (это может быть довольно длительный процесс в зависимости от размера вашего репозитория системы контроля версий и количества сообщений для перевода), вы сможете начать перевод.

Установка из исходников

  1. Пожалуйста, сперва проследуйте инструкциям по установке для вашей системы:

  2. Получите из Git’а последние исходные коды Weblate’а (или скачайте архив и распакуйте его):

    git clone https://github.com/WeblateOrg/weblate.git weblate-src
    

    В качестве альтернативы вы можете использовать архивы выпусков. Вы можете скачать их с нашего сайта <https://weblate.org/>. Эти файлы подписаны криптографической подписью, пожалуйста, смотрите раздел Проверка подписей выпусков.

  3. Установите текущий код Weblate’а в виртуальное окружение:

    . ~/weblate-env/bin/activate
    pip install -e weblate-src
    
  4. Скопируйте файл weblate/settings_example.py в weblate/settings.py.

  5. По своему усмотрению подкорректируйте значения в новом файле settings.py. Вам нужно будет предоставить как минимум учётные данные базы данных и секретный ключ Django, но для установки на рабочей системе вам понадобится больше изменений, смотрите больше в разделе Изменение конфигурации под свои нужды.

  6. Создайте используемую Weblate’ом базу данных, подробности смотрите в разделе Настройка базы данных для Weblate.

  7. Создайте Django’вские таблицы, соберите статические файлы и заполните исходные данные (смотрите разделы Наполнение базы данных и Обслуживание статических файлов):

    weblate migrate
    weblate collectstatic
    weblate compress
    

    Примечание

    Этот шаг следует повторять при обновлении репозитория.

Установка на OpenShift

С помощью OpenShift-шаблона Weblate вы можете обзавестись своим личным экземпляром Weblate за считаные секунды. Все зависимости Weblate уже включены в образ. В качестве базы данных по умолчанию настроена PostgreSQL, а также используются устойчивые заявки на тома (persistent volume claim).

Вы можете найти этот шаблон здесь: <https://github.com/WeblateOrg/openshift/>.

Установка

В следующих примерах предполагается, что у вас есть рабочее окружение OpenShift v3.x, в котором установлена клиентская утилита oc. Для получения конкретных инструкций ознакомьтесь с документацией OpenShift.

Файл template.yml подходит для запуска всех компонентов в OpenShift. Существует также template-external-postgresql.yml, который не запускает сервер PostgreSQL и позволяет настроить внешний сервер PostgreSQL.

Веб-консоль

Скопируйте содержимое из файла template.yml и импортируйте их в свой проект, затем создайте приложение с помощью кнопки Create (Создать) в веб-консоли OpenShift. Веб-консоль предложит вам изменить значения параметров, используемых в шаблоне.

Командная строка

Чтобы загрузить шаблон Weblate в свою текущую библиотеку проектов, передайте файл template.yml следующей команде:

$ oc create -f https://raw.githubusercontent.com/WeblateOrg/openshift/main/template.yml \
   -n <PROJECT>

Теперь шаблон можно выбрать в веб-консоли или через интерфейс командной строки.

Параметры

Список параметров, которые вы можете переопределить приведён в соответствующей секции шаблона. Вы можете посмотреть их из командной строки (указав необходимый файл) следующим образом:

$ oc process --parameters -f https://raw.githubusercontent.com/WeblateOrg/openshift/main/template.yml

# If the template is already uploaded
$ oc process --parameters -n <PROJECT> weblate
Развёртывание

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

$ oc process -f https://raw.githubusercontent.com/WeblateOrg/openshift/main/template.yml \
    -p APPLICATION_NAME=weblate \
    -p WEBLATE_VERSION=4.3.1-1 \
    -p WEBLATE_SITE_DOMAIN=weblate.app-openshift.example.com \
    -p POSTGRESQL_IMAGE=docker-registry.default.svc:5000/openshift/postgresql:9.6 \
    -p REDIS_IMAGE=docker-registry.default.svc:5000/openshift/redis:3.2 \
    | oc create -f

После удачной миграции и развёртывания Weblate должен быть доступен по указанному адресу в параметре WEBLATE_SITE_DOMAIN.

После настройки контейнера вы можете войти в систему под пользователем admin с паролем, указанным в WEBLATE_ADMIN_PASSWORD, или случайным паролем, сгенерированным при первом запуске, если он не был установлен явно.

Для сброса пароля пользователя admin перезапустите контейнер с переменной WEBLATE_ADMIN_PASSWORD, установленной в новое значение пароля в соответствующем хранилище секретов (Secrete).

Удаление
$ oc delete all -l app=<APPLICATION_NAME>
$ oc delete configmap -l app= <APPLICATION_NAME>
$ oc delete secret -l app=<APPLICATION_NAME>
# ATTTENTION! The following command is only optional and will permanently delete all of your data.
$ oc delete pvc -l app=<APPLICATION_NAME>

$ oc delete all -l app=weblate \
    && oc delete secret -l app=weblate \
    && oc delete configmap -l app=weblate \
    && oc delete pvc -l app=weblate
Конфигурация

При обработке шаблона будет создан соответствующий ConfigMap, который можно использовать для настройки образа Weblate. Этот ConfigMap напрямую монтируется в качестве переменных среды. Он вызывает новую развёртку, каждый раз, когда изменяется. Информацию по другим параметрам настройки и полный список переменных среды смотрите в описании настройки Docker.

Установка на Kubernetes

Примечание

Для наполнения данного раздела руководства большим количеством деталей разыскиваются участники, имеющие опыт работы с Kubernetes.

С помощью схемы Kubernetes Helm вы можете обзавестись своим личным экземпляром Weblate за считаные секунды. Все зависимости Weblate уже включены в образ. В качестве базы данных по умолчанию настроена PostgreSQL, а также используются устойчивые заявки на тома (persistent volume claim).

Вы можете найти схему на <https://github.com/WeblateOrg/helm/> , а просмотреть её можно на <https://artifacthub.io/packages/helm/weblate/weblate>.

Установка
helm repo add weblate https://helm.weblate.org
helm install my-release weblate/weblate
Конфигурация

Дополнительные параметры конфигурации, просмотреть docker-compose.override.yml. Полный список переменных окружения приведён в разделе Переменные окружения Docker’а.

В зависимости от ваших настроек и опыта выберите подходящий для вас способ установки:

Требования к программному обеспечению

Операционная система

Weblate работает под Linux, FreeBSD и MacOS. Скорее всего он будет работать и под другими Unix-подобными системами.

Работа Weblate под Windows не поддерживается. Тем не менее, работать под ней он всё ещё может и патчи под неё с радостью принимаются.

Другие сервисы

Для своей работы Weblate использует другие сервисы. Вам понадобятся, по крайней мере, следующие запущенные сервисы:

Зависимости Python

Weblate написан на Python’е и поддерживает Python 3.6 или более новую версию. Вы можете установить зависимости с помощью команды pip или из пакетов вашего дистрибутива, полный список зависимостей находится в файле requirements.txt.

Основные зависимости:

Django

https://www.djangoproject.com/

Celery

https://docs.celeryq.dev/

Translate Toolkit

https://toolkit.translatehouse.org/

translation-finder

https://github.com/WeblateOrg/translation-finder

Python Social Auth

https://python-social-auth.readthedocs.io/

Фреймворк Django REST

https://www.django-rest-framework.org/

Необязательные зависимости

Для работы некоторых функций Weblate необходимы следующие модули. Полный их список можно найти в файле requirements-optional.txt.

Mercurial (необязательная зависимость для поддержки репозиториев Mercurial)

https://www.mercurial-scm.org/

phply (необязательная зависимость для Строки PHP)

https://github.com/viraptor/phply

tesserocr (необязательная зависимость для поддержки оптического распознавания символов на Визуальный контекст для строк)

https://github.com/sirfz/tesserocr

python-akismet (необязательная зависимость для Защита от спама)

https://github.com/Nekmo/python-akismet

ruamel.yaml (необязательная зависимость для поддержки файлов YAML)

https://pypi.org/project/ruamel.yaml/

Zeep (необязательная зависимость для поддержки терминологической службы Майкрософт)

https://docs.python-zeep.org/

aeidon (необязательная зависимость для поддержки файлов субтитров)

https://pypi.org/project/aeidon/

fluent.syntax (необязательная зависимость для Формат Fluent)

https://projectfluent.org/

Подсказка

При установке с помощью pip вы можете напрямую указать желаемые функции при установке:

pip install "Weblate[PHP,Fluent]"

Или вы можете установить Weblate со всеми дополнительными функциями:

pip install "Weblate[all]"

Или вы можете установить Weblate без каких-либо дополнительных функций:

pip install Weblate

Зависимости серверной части базы данных

Weblate поддерживает PostgreSQL, MySQL и MariaDB, подробнее смотрите в разделе Настройка базы данных для Weblate и документации по реализации поддержки соответствующей базы данных.

Другие системные требования

В системе должны быть установлены следующие зависимости:

Git

https://git-scm.com/

Pango, Cairo and related header files and GObject introspection data

https://cairographics.org/, https://pango.gnome.org/, смотрите раздел Pango и Cairo

git-review (необязательная зависимость для поддержки Gerrit)

https://pypi.org/project/git-review/

git-svn (необязательная зависимость для поддержки Subversion)

https://git-scm.com/docs/git-svn

tesseract и его данные (необязательная зависимость для поддержки распознавания текста со снимков экрана)

https://github.com/tesseract-ocr/tesseract

licensee (необязательная зависимость для определения лицензии при создании компонента)

https://github.com/licensee/licensee

Зависимости времени компиляции

Для сборки некоторых зависимостей Python может потребоваться установка также и их зависимостей. Это зависит от того, как именно вы их устанавливаете, так что за справкой по установке обратитесь к документации соответствующих пакетов. Вручную устанавливать зависимости зависимостей вам не понадобятся, если вы, например, устанавливаете их через pip и используете предварительно-собранные «колёса» (Wheels) или устанавливаете их через пакетный менеджер вашего дистрибутива.

Pango и Cairo

Изменено в версии 3.7.

Weblate использует Pango и Cairo для отрисовки растровых виджетов (смотрите раздел Продвижение перевода) и проверки отрисовки текста (смотрите раздел Управление шрифтами). Для правильной установки привязок Python сначала нужно установить системные библиотеки — вам нужны и Cairo, и Pango, которым, в свою очередь, нужна GLib. Все они должны быть установлены с файлами для разработки и данными интроспекции GObject.

Проверка подписей выпусков

Выпуски Weblate подписываются криптографической подписью выпускающего разработчика. В настоящее время им является Михал Чигарж. Отпечаток его PGP-ключа:

63CB 1DF1 EF12 CF2A C0EE 5A32 9C27 B313 42B7 511D

а дополнительную идентификационную информацию вы можете получить по адресу <https://keybase.io/nijel>.

Вы должны удостовериться, что подпись соответствует скачанному вами архиву. Таким образом, вы сможете быть уверены, что используете тот же код, который был выпущен. Также вы должны проверить дату подписания, чтобы удостовериться, что вы скачали последнюю версию.

Каждый архив сопровождается файлами .asc, содержащими его PGP-подпись. После того, как вы разместите оба файла в одном каталоге, вы сможете проверить подпись:

$ gpg --verify Weblate-3.5.tar.xz.asc
gpg: assuming signed data in 'Weblate-3.5.tar.xz'
gpg: Signature made Ne 3. března 2019, 16:43:15 CET
gpg:                using RSA key 87E673AF83F6C3A0C344C8C3F4AA229D4D58C245
gpg: Can't check signature: public key not found

Как видите, GPG жалуется на то, что он не знает открытого ключа. На данный момент вы должны сделать одно из следующего:

  • Использовать wkd для скачивания ключа:

$ gpg --auto-key-locate wkd --locate-keys michal@cihar.com
pub   rsa4096 2009-06-17 [SC]
      63CB1DF1EF12CF2AC0EE5A329C27B31342B7511D
uid           [ultimate] Michal Čihař <michal@cihar.com>
uid           [ultimate] Michal Čihař <nijel@debian.org>
uid           [ultimate] [jpeg image of size 8848]
uid           [ultimate] Michal Čihař (Braiins) <michal.cihar@braiins.cz>
sub   rsa4096 2009-06-17 [E]
sub   rsa4096 2015-09-09 [S]
$ gpg --import wmxth3chu9jfxdxywj1skpmhsj311mzm
  • Скачать и импортировать ключ с одного из серверов ключей:

$ gpg --keyserver hkp://pgp.mit.edu --recv-keys 87E673AF83F6C3A0C344C8C3F4AA229D4D58C245
gpg: key 9C27B31342B7511D: "Michal Čihař <michal@cihar.com>" imported
gpg: Total number processed: 1
gpg:              unchanged: 1

Это немного улучшит ситуацию — на данный момент вы можете проверить правильность подписи с данного ключа, но всё равно не можете доверять используемому в ключе имени:

$ gpg --verify Weblate-3.5.tar.xz.asc
gpg: assuming signed data in 'Weblate-3.5.tar.xz'
gpg: Signature made Ne 3. března 2019, 16:43:15 CET
gpg:                using RSA key 87E673AF83F6C3A0C344C8C3F4AA229D4D58C245
gpg: Good signature from "Michal Čihař <michal@cihar.com>" [ultimate]
gpg:                 aka "Michal Čihař <nijel@debian.org>" [ultimate]
gpg:                 aka "[jpeg image of size 8848]" [ultimate]
gpg:                 aka "Michal Čihař (Braiins) <michal.cihar@braiins.cz>" [ultimate]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 63CB 1DF1 EF12 CF2A C0EE  5A32 9C27 B313 42B7 511D

Проблема в том, что выдать ключ с таким именем может кто угодно. Вам нужно убедиться, что ключ действительно принадлежит указанному лицу. Руководство GNU по обеспечению конфиденциальности раскрывает эту тему в главе Проверка достоверности ключей. Самый надёжный метод — лично встретиться с разработчиком и обменяться отпечатками ключей, однако вы также можете положиться на сеть доверия. Таким образом, вы можете транзитивно доверять ключу через подписи других людей, которые встречались с разработчиком лично.

Когда достоверность ключа будет установлена, предупреждение больше появляться не будет:

$ gpg --verify Weblate-3.5.tar.xz.asc
gpg: assuming signed data in 'Weblate-3.5.tar.xz'
gpg: Signature made Sun Mar  3 16:43:15 2019 CET
gpg:                using RSA key 87E673AF83F6C3A0C344C8C3F4AA229D4D58C245
gpg: Good signature from "Michal Čihař <michal@cihar.com>" [ultimate]
gpg:                 aka "Michal Čihař <nijel@debian.org>" [ultimate]
gpg:                 aka "[jpeg image of size 8848]" [ultimate]
gpg:                 aka "Michal Čihař (Braiins) <michal.cihar@braiins.cz>" [ultimate]

В случае недействительной подписи (архив был изменен), вы получите явную ошибку, независимо от того, доверяете ли вы ключу или нет:

$ gpg --verify Weblate-3.5.tar.xz.asc
gpg: Signature made Sun Mar  3 16:43:15 2019 CET
gpg:                using RSA key 87E673AF83F6C3A0C344C8C3F4AA229D4D58C245
gpg: BAD signature from "Michal Čihař <michal@cihar.com>" [ultimate]

Права доступа к файлам

Процесс Weblate должен мочь читать и писать в каталог, в котором он хранит свои данные — DATA_DIR. Все файлы в этом каталоге должны принадлежать и иметь разрешение на запись для пользователей, от имени которых работают все процессы Weblate (в частности WSGI и Celery, смотреть раздел Запуск сервера и Фоновые задачи с использованием Celery).

В конфигурации по умолчанию они расположены в том же дереве, что и исходный код Weblate, однако вы можете предпочесть переместить их в более подходящее место, например, в /var/lib/weblate.

Weblate попытается автоматически создать эти каталоги, но у него ничего не получится, если у него не будет соответствующих прав доступа.

Также вам следует быть особенно внимательными, когда запускаете команды управления, поскольку они должны выполняться под тем же пользователем, под которым запущен сам Weblate. В противном случае права доступа на некоторые файлы могут быть выставлены неверно.

In the Docker container, all files in the /app/data volume have to be owned by the weblate user inside the container (UID 1000).

Настройка базы данных для Weblate

Рекомендуется запускать Weblate с сервером баз данных PostgreSQL.

PostgreSQL

PostgreSQL, как правило, является лучшим выбором для сайтов, написанных на Django. Это эталонная база данных, используемая для реализации слоя баз данных Django.

Примечание

Weblate использует расширение для триграмм, которое в некоторых случаях должно быть установлено отдельно. Ищите пакет postgresql-contrib или аналогичный.

См.также

PostgreSQL notes

Создание базы данных в PostgreSQL

Обычно рекомендуется запускать Weblate в отдельной базе данных и под отдельной учётной записью:

# If PostgreSQL was not installed before, set the main password
sudo -u postgres psql postgres -c "\password postgres"

# Create a database user called "weblate"
sudo -u postgres createuser --superuser --pwprompt weblate

# Create the database "weblate" owned by "weblate"
sudo -u postgres createdb -E UTF8 -O weblate weblate

Подсказка

Если вы не хотите делать пользователя Weblate суперпользователем в PostgreSQL, вы можете пропустить этот шаг. В этом случае вам придётся выполнить некоторые шаги по миграции вручную, так как суперпользователь PostgreSQL запускает в схеме Weblate следующую команду:

CREATE EXTENSION IF NOT EXISTS pg_trgm WITH SCHEMA weblate;
Настройка Weblate для использования PostgreSQL

Фрагмент настроек settings.py для PostgreSQL:

DATABASES = {
    "default": {
        # Database engine
        "ENGINE": "django.db.backends.postgresql",
        # Database name
        "NAME": "weblate",
        # Database user
        "USER": "weblate",
        # Name of role to alter to set parameters in PostgreSQL,
        # use in case role name is different than user used for authentication.
        # "ALTER_ROLE": "weblate",
        # Database password
        "PASSWORD": "password",
        # Set to empty string for localhost
        "HOST": "database.example.com",
        # Set to empty string for default
        "PORT": "",
    }
}

При миграции базы данных выполняется ALTER ROLE той роли, которую используется Weblate. В большинстве случаев имя роли совпадает с именем пользователя. В более же сложных случаях они могут отличаться и при миграции вы можете получить ошибку о том, что такая роль не существует (psycopg2.errors.UndefinedObject: role "weblate@hostname" does not exist). Известно, что такое случается при использовании базы данных Azure совместно с PostgreSQL, хотя это может происходить и при других обстоятельствах. Установите параметр ALTER_ROLE, чтобы задать ту роль, которую Weblate должен изменить во время миграции базы данных.

MySQL и MariaDB

Подсказка

Некоторые функции Weblate лучше работают с PostgreSQL. Среди них: поиск и память переводов, обе из которых используют функции полнотекстового поиска базы данных, а их реализация в PostgreSQL превосходит все остальные.

Weblate также можно использовать с MySQL или MariaDB, ознакомитесь с предостережениями по их использованию вместе с Django в разделах Замечания по MySQL и Замечания по MariaDB его документации. Из-за ограничений рекомендуется использовать :ref:`postgresql`при новой установке.

Weblate требует MySQL версии 5.7.8 или новее или MariaDB 10.2.7 или новее.

Для Weblate рекомендуется следующая конфигурация:

  • Используйте кодовую таблицу utf8mb4 для представления символов с более высоких плоскостей Юникода (например, эмодзи).

  • Настройте сервер на использование innodb_large_prefix для разрешения более длинных индексов для текстовых полей.

  • Установите уровень изоляции в READ COMMITTED.

  • Режим SQL должен быть установлен в STRICT_TRANS_TABLES.

MySQL 8.x, MariaDB 10.5.x или новее имеют разумную конфигурацию по умолчанию, поэтому не требуется настройка сервера, а всё необходимое можно настроить на стороне клиента.

Ниже приведён пример типового файла настроек /etc/my.cnf.d/server.cnf для сервера с 8ГБ ОЗУ. Таких настроек должно хватить для большинства установок. У MySQL и MariaDB есть и другие параметры, которые могут повысить производительность сервера, но обычно прибегать к ним нет смысла, если только вы не планируете, что достаточно большое количество пользователей будут работать с вашему сервером одновременно. В таком случае смотрите подробности по конфигурации сервера для таких задач в документации своей СУБД.

Дабы при установке Weblate не возникло проблем, абсолютно критично, чтобы параметр innodb_file_per_table был включён; а также после его изменения нужно не забыть перезапустить MySQL/MariaDB.

[mysqld]
character-set-server = utf8mb4
character-set-client = utf8mb4
collation-server = utf8mb4_unicode_ci

datadir=/var/lib/mysql

log-error=/var/log/mariadb/mariadb.log

innodb_large_prefix=1
innodb_file_format=Barracuda
innodb_file_per_table=1
innodb_buffer_pool_size=2G
sql_mode=STRICT_TRANS_TABLES

Подсказка

Если вы получаете ошибку #1071 - Specified key was too long; max key length is 767 bytes (указанный ключ слишком длинный; максимальная длина ключа - 767 байт), то убедитесь, что в конфигурации вашего сервера включены параметры innodb, описанные выше.

Подсказка

В случае, если вы получаете ошибку #2006 - MySQL server has gone away (сервер MySQL более недоступен), то может помочь настройка параметра CONN_MAX_AGE.

Настройка Weblate для работы совместно с MySQL/MariaDB

Фрагмент файла настроек settings.py для MySQL и MariaDB:

DATABASES = {
    "default": {
        # Database engine
        "ENGINE": "django.db.backends.mysql",
        # Database name
        "NAME": "weblate",
        # Database user
        "USER": "weblate",
        # Database password
        "PASSWORD": "password",
        # Set to empty string for localhost
        "HOST": "127.0.0.1",
        # Set to empty string for default
        "PORT": "3306",
        # In case you wish to use additional
        # connection options
        "OPTIONS": {},
    }
}

Также прежде чем начать установку вам нужно будет создать пользователя базы данных с именем weblate. Это можно сделать с помощью следующей команды:

GRANT ALL ON weblate.* to 'weblate'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

Другие настройки

Настройка исходящей почты

Weblate отправляет электронные письма по разным поводам — для активации учетной записи и по различным уведомлениям, настроенным пользователями. Для этого ему необходим доступ к SMTP-серверу.

Настройка почтового сервера производится с помощью следующих параметров: EMAIL_HOST, EMAIL_HOST_PASSWORD, EMAIL_USE_TLS, EMAIL_USE_SSL, EMAIL_HOST_USER и EMAIL_PORT. Их имена говорят сами за себя, а более подробную информацию вы можете найти в документации Django.

Подсказка

Если вы получаете ошибку о том , что аутентификация не поддерживается (например, SMTP AUTH extension not supported by server, «расширение SMTP AUTH не поддерживается сервером»), то скорей всего это вызвано тем, что используется небезопасное соединение и из-за этого сервер отказывается производить аутентификацию. В таком случае попробуйте включить EMAIL_USE_TLS.

Работа за обратным прокси

Некоторые функции Weblate полагаются на возможность получения IP-адреса клиента. Среди этих функций Ограничение частоты запросов, Защита от спама или Журнал аудита.

В стандартной конфигурации Weblate достает IP-адрес из переменной REMOTE_ADDR, которая устанавливается обработчиком WSGI.

Если же вы используете обратный прокси, то это поле, скорее всего, будет содержать его адрес. Вам нужно настроить Weblate на доверие дополнительным HTTP-заголовкам и доставать IP-адрес из них. Эту настройку нельзя включить по умолчанию, поскольку она разрешит подмену IP-адреса для установок, не использующих обратный прокси. Для самых обычных установок будет достаточно включения параметра IP_BEHIND_REVERSE_PROXY, но вам также может понадобиться подправить параметры IP_PROXY_HEADER и IP_PROXY_OFFSET.

Another thing to take care of is the Host header. It should match to whatever is configured as SITE_DOMAIN. Additional configuration might be needed in your reverse proxy (for example use ProxyPreserveHost On for Apache or proxy_set_header Host $host; with nginx).

HTTP-прокси

Weblate запускает команды системы контроля версий, а те берут настройки прокси из переменных окружения. Для их настройки рекомендуемый подход — определить необходимые параметры прокси в файле settings.py:

import os

os.environ["http_proxy"] = "http://proxy.example.com:8080"
os.environ["HTTPS_PROXY"] = "http://proxy.example.com:8080"

Изменение конфигурации под свои нужды

Скопируйте weblate/settings_example.py в weblate/settings.py и подправьте его в соответствии со своими настройками. Скорее всего, вы захотите настроить следующие параметры:

ADMINS

Список администраторов сайтов для получения уведомлений, когда что-то идет не так, например, для получения уведомлений о неудачных слияниях, или об ошибках Django.

ALLOWED_HOSTS

Вы должны установить эту настройку в список хостов, которые должен обслуживать ваш сайт. Например:

ALLOWED_HOSTS = ["demo.weblate.org"]

Или же вы можете указать символ шаблона:

ALLOWED_HOSTS = ["*"]

SESSION_ENGINE

Настраивает то, как будут храниться ваши сессии. В случае, если вы оставили механизм хранения по умолчанию — в базе данных — вы должны настроить расписание для команды weblate clearsessions, удаляющей из базы данных данные об устаревших сессиях.

Если вы используете в качестве кэша Redis (смотрите раздел Включение кэширования), рекомендуется использовать его также и для сессий:

SESSION_ENGINE = "django.contrib.sessions.backends.cache"

DATABASES

Подключение к серверу базы данных, подробнее об этой настройке читайте в документации Django.

DEBUG

Отключите эту настройку для любого рабочего сервера. При включенном режиме отладки Django в случае возникновения ошибки будет показывать трассировки стека пользователям, при его же отключении ошибки будут отправляться на адреса электронной почты из массива ADMINS (смотрите выше).

Кроме того, отладочный режим замедляет работу Weblate, поскольку в этом случае Django сохраняет внутри себя гораздо больше информации.

DEFAULT_FROM_EMAIL

Адрес электронной почты отправителя для исходящих сообщений электронной почты, например, для писем регистрации.

См.также

DEFAULT_FROM_EMAIL

SECRET_KEY

Ключ, используемый Django для подписывания некоторой информации, сохраняемой в куках, подробнее смотрите в разделе Секретный ключ Django.

См.также

SECRET_KEY

SERVER_EMAIL

Адрес электронной почты, используемый в качестве адреса отправителя для отправки сообщений администратору, например, уведомлений о неудачных слияниях.

См.также

SERVER_EMAIL

Наполнение базы данных

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

В случае, если вы хотите запустить установку не в интерактивном режиме, вы можете использовать weblate migrate --noinput, а затем создать пользователя-администратора при помощи команды createadmin.

После того, как вы закончите, вам также стоит проверить Отчёт о производительности в интерфейсе администратора. Информация оттуда может дать вам подсказки по исправлению потенциально не оптимальной конфигурации вашего сайта.

Рабочая среда

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

_images/admin-wrench.png

Также рекомендуется изучить все проверки, произведённые Django (хотя, возможно, исправлять их все нет необходимости):

weblate check --deploy

Вы можете просмотреть этот же список из интерфейса управления.

Отключение отладочного режима

Отключите отладочный режим Django (DEBUG), установив:

DEBUG = False

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

Правильная настройка администраторов

Укажите в настройке ADMINS правильные адреса администраторов, чтобы определить, кто будет получать электронную почту в случае, если на сервере что-то пойдёт не так, например:

ADMINS = (("Your Name", "your_email@example.com"),)

Установка правильного домена сайта

Поправьте имя сайта и домен в интерфейсе администратора, иначе ссылки в RSS или регистрационные письма не будут работать. Эта настройка осуществляется с помощью параметра SITE_DOMAIN, который должен содержать доменное имя сайта.

Изменено в версии 4.2: До выхода версии 4.2 вместо него использовался фреймворк «сайтов» Django, смотрите раздел Фреймворк «сайтов».

Правильная настройка HTTPS

Настоятельно рекомендуется запускать Weblate с использованием шифрующего протокола HTTPS. После его включения в настройках необходимо установить параметр ENABLE_HTTPS:

ENABLE_HTTPS = True

Подсказка

Возможно, вы также захотите настроить HSTS, для получения более подробной информации смотрите документ SSL/HTTPS.

Установка правильного значения SECURE_HSTS_SECONDS

Если ваш сайт обслуживается по SSL, вам необходимо рассмотреть возможность установки значения параметра SECURE_HSTS_SECONDS в файле settings.py, включающего HTTP Strict Transport Security. По умолчанию его значение установлено в 0, как показано ниже.

SECURE_HSTS_SECONDS = 0

Если для него установлено ненулевое целое значение, то django.middleware.security.SecurityMiddleware устанавливает заголовок HTTP Strict Transport Security у всех ответов, которые его ещё не имеют.

Предупреждение

Неправильная настройка этого параметра может привести к необратимому (на некоторое время) выходу из строя вашего сайта. Поэтому сперва ознакомьтесь с документацией по HTTP Strict Transport Security.

Использование мощного движка базы данных

  • Пожалуйста, используйте для рабочего окружения PostgreSQL, для получения более подробной информации смотрите раздел Настройка базы данных для Weblate.

  • Используйте соседнее место для размещения сервера базы данных, иначе производительность или надёжность сети может испортить работу с Weblate.

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

Включение кэширования

Если возможно, используйте Redis из Django, настроив переменную CACHES в файле настроек, например:

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/0",
        # If redis is running on same host as Weblate, you might
        # want to use unix sockets instead:
        # 'LOCATION': 'unix:///var/run/redis/redis.sock?db=0',
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PARSER_CLASS": "redis.connection.HiredisParser",
        },
    }
}

Подсказка

Если вы измените настройки кеширования Redis, то вам также понадобится изменить их и в Celery, смотреть раздел Фоновые задачи с использованием Celery.

Кеширование аватаров

Помимо кэширования силами Django, Weblate выполняет кэширование аватаров. Для этой цели рекомендуется воспользоваться отдельным файловым кэшем:

CACHES = {
    "default": {
        # Default caching backend setup, see above
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "unix:///var/run/redis/redis.sock?db=0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PARSER_CLASS": "redis.connection.HiredisParser",
        },
    },
    "avatar": {
        "BACKEND": "django.core.cache.backends.filebased.FileBasedCache",
        "LOCATION": os.path.join(DATA_DIR, "avatar-cache"),
        "TIMEOUT": 604800,
        "OPTIONS": {
            "MAX_ENTRIES": 1000,
        },
    },
}

Настройка отправки электронной почты

Weblate’у по разным случаям необходимо отправлять электронные письма и эти письма должны иметь правильный адрес отправителя, поэтому настройте параметры SERVER_EMAIL и DEFAULT_FROM_EMAIL так, чтобы они соответствовали вашему окружению, например:

SERVER_EMAIL = "admin@example.org"
DEFAULT_FROM_EMAIL = "weblate@example.org"

Примечание

Для отключения отправки писем Weblate’ом установите переменную EMAIL_BACKEND в значение django.core.mail.backends.dummy.EmailBackend.

При этом доставка сообщений электронной почты будет отключена целиком, включая сообщения для регистрации или сброса пароля.

Настройка разрешенных хостов

Django требует, чтобы в параметре ALLOWED_HOSTS содержался список доменных имен, которые разрешено обслуживать вашему сайту, если его оставить пустым, любые запросы будут заблокированы.

В случае, если он не настроен на соответствие вашему HTTP-серверу, вы будете получать ошибки вида Invalid HTTP_HOST header: '1.1.1.1'. You may need to add '1.1.1.1' to ALLOWED_HOSTS. (Неверный заголовок HTTP_HOST: '1.1.1.1'. Возможно, вам нужно добавить '1.1.1.1' в ALLOWED_HOSTS.)

Подсказка

Внутри контейнера Docker он доступен через переменную окружения WEBLATE_ALLOWED_HOSTS.

Секретный ключ Django

Параметр SECRET_KEY используется Django для подписания файлов кук и вы обязательно должны сгенерировать свое собственное значение, а не использовать приведенное в примере настройки.

Сгенерировать новый ключ вы можете с помощью скрипта weblate/examples/generate-secret-key, поставляемого вместе с Weblate.

См.также

SECRET_KEY

Домашний каталог

Изменено в версии 2.1: Больше он не требуется, теперь Weblate хранит все свои данные в каталоге DATA_DIR.

Домашний каталог для пользователя, запустившего Weblate, должен существовать и быть доступен для записи из под этого пользователя. Особенно он необходим, если вы хотите использовать SSH для доступа к частным репозиториям, но доступ к этому каталогу может понадобиться и Git’у (это зависит от используемой вами версии Git’а).

Изменить используемый Weblate каталог вы можете в файле settings.py, например, установив его в каталог configuration внутри дерева Weblate:

os.environ["HOME"] = os.path.join(BASE_DIR, "configuration")

Примечание

В Linux и других UNIX-подобных системах путь к домашнему каталогу пользователя определяется в файле /etc/passwd. Многие дистрибутивы по умолчанию имеют не записываемый каталог для пользователей, используемый для раздачи веб-содержимого (вроде apache, www-data или ``wwwrun`), так что вам либо придётся запускать Weblate под другим пользователем, либо изменить эту настройку.

Загрузка шаблонов

Рекомендуется использовать кэширующий загрузчик шаблонов для Django. Он кэширует обработанные шаблоны, избавляя фреймворк от необходимости разбирать их каждый запрос. Настроить его вы можете с помощью следующего фрагмента кода (самое важное здесь — это настройка loaders):

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [
            os.path.join(BASE_DIR, "templates"),
        ],
        "OPTIONS": {
            "context_processors": [
                "django.contrib.auth.context_processors.auth",
                "django.template.context_processors.debug",
                "django.template.context_processors.i18n",
                "django.template.context_processors.request",
                "django.template.context_processors.csrf",
                "django.contrib.messages.context_processors.messages",
                "weblate.trans.context_processors.weblate_context",
            ],
            "loaders": [
                (
                    "django.template.loaders.cached.Loader",
                    [
                        "django.template.loaders.filesystem.Loader",
                        "django.template.loaders.app_directories.Loader",
                    ],
                ),
            ],
        },
    },
]

Выполнение задач технического обслуживания

Для оптимальной производительности неплохо бы в фоновом режиме выполнять некоторые задачи по техническому обслуживанию. Теперь это делается автоматически с помощью фоновых задач Celery, которые включают в себя:

  • Проверку работоспособности состояния конфигурации (ежечасно).

  • Фиксацию отложенных изменений (ежечасно), смотрите раздел Отложенные коммиты и команду commit_pending.

  • Обновление предупреждений компонента (ежедневно).

  • Обновление удалённых веток (по ночам), смотрите параметр AUTO_UPDATE.

  • Резервное копирование памяти переводов в JSON (ежедневно), смотрите команду dump_memory.

  • Задачи по обслуживанию полнотекстового индекса и базы данных (ежедневные и еженедельные задачи), смотрите команду cleanuptrans.

Изменено в версии 3.2: Начиная с версии 3.2, по умолчанию эти задачи выполняются через Celery и Weblate уже поставляется с соответствующей конфигурацией, смотрите раздел Фоновые задачи с использованием Celery.

Системные локали и кодировки

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

Например, путём редактирования файла /etc/default/locale и прописывания в нём команды LANG="C.UTF-8".

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

Apache на Ubuntu использует /etc/apache2/envvars:

export LANG='en_US.UTF-8'
export LC_ALL='en_US.UTF-8'

Apache на CentOS использует /etc/sysconfig/httpd (или /opt/rh/httpd24/root/etc/sysconfig/httpd):

LANG='en_US.UTF-8'

Использование пользовательского центра сертификации

Во время HTTP-запросов Weblate проверяет SSL-сертификаты. Если вы используете пользовательский центр сертификации, который цепочке сертификатов по умолчанию не является доверенным, вам придется добавить его сертификат в качестве доверенного.

Предпочтительный подход — сделать это на системном уровне, подробнее смотрите документацию по дистрибутиву (например, в debian это можно сделать, разместив сертификат центра сертификации в каталоге /usr/local/share/ca-certificates/ и запустив команду update-ca-certificates).

Как только это будет сделано, системные инструменты станут доверять сертификату, среди этих инструментов будет и Git.

Для кода Python вам будет необходимо настроить запросы на использование системной цепочки сертификатов вместо использования цепочки, поставляемой с Python’ом. Этого можно добиться, поместив в settings.py следующий фрагмент кода (путь указан для Debian):

import os

os.environ["REQUESTS_CA_BUNDLE"] = "/etc/ssl/certs/ca-certificates.crt"

Сжатие клиентских ресурсов

Weblate поставляется с кучей файлов JavaScript и CSS. Из соображений производительности хорошей практикой будет сжимать их перед отправкой клиенту. В конфигурации по умолчанию это делается на лету ценой небольших накладных расходов. В больших же установках рекомендуется включить режим предварительного сжатия. Это можно сделать в настройках, а повторное сжатие файлов должно запускаться при каждом обновлении Weblate.

Такое переключение режима выполняется простым включением параметра django.conf.settings.COMPRESS_OFFLINE и заданием соответствующих настроек в параметре django.conf.settings.COMPRESS_OFFLINE_CONTEXT (последний уже включён в пример файла настроек):

COMPRESS_OFFLINE = True

При каждом развёртывании вам необходимо сжимать файлы, чтобы они соответствовали текущей версии:

weblate compress

Подсказка

В официальном образе Docker эта функция уже включена.

Запуск сервера

Подсказка

Если у вас нет опыта работы с услугами, описанными ниже, вы можете попробовать Установка с помощью Docker’а.

Чтобы запустить Weblate, вам понадобится несколько сервисов, рекомендуемая конфигурация состоит из:

Примечание

Между некоторыми сервисами существуют зависимости, например, кэш и база данных должны быть запущены до запуска процессов Celery или uwsgi.

В большинстве случаев вы будете запускать все сервисы на одном (виртуальном) сервере, но в случае, если ваша установка испытывает тяжелые нагрузки, вы можете их разделить. Единственным ограничением является то, что серверы Celery и Wsgi должны иметь доступ к каталогу DATA_DIR.

Примечание

Процесс WSGI должен выполняться под тем же пользователем, под которым работает Celery, иначе файлы в каталоге DATA_DIR будут сохраняться с разными владельцами, что приведёт к проблемам во время выполнения.

Смотреть также раздел Права доступа к файлам и Фоновые задачи с использованием Celery.

Запуск веб-сервера

Запуск Weblate ничем не отличается от запуска любой другой программы на базе Django. Как правило, Django выполняется как uWSGI или fcgi (смотрите ниже примеры для различных веб-серверов).

В целях тестирования можно использовать встроенный в Django веб-сервер:

weblate runserver

Предупреждение

НЕ ИСПОЛЬЗУЙТЕ ЭТОТ СЕРВЕР В РАБОЧЕЙ СРЕДЕ. Он не проходил аудиты безопасности или тесты производительности. Также смотрите документацию Django по команде runserver.

Подсказка

Встроенный сервер Django обслуживает статические файлы только с включённым параметром DEBUG, поскольку он предназначен только для разработки. Для использования в рабочей среде смотрите установки wsgi в разделах Примеры файлов настроек NGINX и uWSGI, Пример файла настроек Apache, Пример файла настроек Apache и Gunicorn и Обслуживание статических файлов.

Обслуживание статических файлов

Изменено в версии 2.4: До версии 2.4 Weblate некорректно использовал фреймворк статических файлов Django, поэтому его настройка была более сложной.

Django необходимо собрать свои статические файлы в одном каталоге. Для этого необходимо выполнить команду weblate collectstatic --noinput. Она скопирует статические файлы в каталог, указанный в параметре STATIC_ROOT (по умолчанию это каталог static внутри каталога DATA_DIR).

Статические файлы рекомендуется раздавать непосредственно с вашего веб-сервера, это следует делать для следующих путей:

/static/

Обслуживает статические файлы для Weblate и административного интерфейса (из каталога, определенного параметром STATIC_ROOT).

/media/

Используется для загрузки пользовательских мультимедийных данных (например, снимков экрана).

/favicon.ico

Должен быть переписан, чтобы переписать правило для раздачи /static/favicon.ico.

Политика безопасности содержимого

В конфигурации Weblate по умолчанию уже включено использование промежуточного ПО weblate.middleware.SecurityMiddleware, которое устанавливает связанные с безопасностью заголовки HTTP, такие как Content-Security-Policy или X-XSS-Protection. По умолчанию они настроены для работы с Weblate и его конфигурацией, но для этого может потребоваться настройка вашего окружения.

Примеры файлов настроек NGINX и uWSGI

Для запуска рабочего веб-сервера используйте обертку wsgi, устанавливаемую вместе с Weblate (в виртуальном окружении она устанавливается в ~/weblate-env/lib/python3.7/site-packages/weblate/wsgi.py). Не забудьте также поместить ваше виртуальное окружение в пути поиска Python’а (например, используя установку virtualenv = /home/user/weblate-env в uWSGI).

Со следующими файлами настроек Weblate будет запускаться как uWSGI-приложение под веб-сервером NGINX.

Файл настроек NGINX (этот же пример есть в weblate/examples/weblate.nginx.conf):

# This example assumes Weblate is installed in virtualenv in /home/weblate/weblate-env
# and DATA_DIR is set to /home/weblate/data, please adjust paths to match your setup.
server {
    listen 80;
    server_name weblate;
    # Not used
    root /var/www/html;

    location ~ ^/favicon.ico$ {
        # DATA_DIR/static/favicon.ico
        alias /home/weblate/data/static/favicon.ico;
        expires 30d;
    }

    location /static/ {
        # DATA_DIR/static/
        alias /home/weblate/data/static/;
        expires 30d;
    }

    location /media/ {
        # DATA_DIR/media/
        alias /home/weblate/data/media/;
        expires 30d;
    }

    location / {
        include uwsgi_params;
        # Needed for long running operations in admin interface
        uwsgi_read_timeout 3600;
        # Adjust based to uwsgi configuration:
        uwsgi_pass unix:///run/uwsgi/app/weblate/socket;
        # uwsgi_pass 127.0.0.1:8080;
    }
}

Файл настроек uWSGI (этот же пример есть в weblate/examples/weblate.uwsgi.ini):

# This example assumes Weblate is installed in virtualenv in /home/weblate/weblate-env
# and DATA_DIR is set to /home/weblate/data, please adjust paths to match your setup.
[uwsgi]
plugins       = python3
master        = true
protocol      = uwsgi
socket        = 127.0.0.1:8080
wsgi-file     = /home/weblate/weblate-env/lib/python3.9/site-packages/weblate/wsgi.py

# Add path to Weblate checkout if you did not install
# Weblate by pip
# python-path   = /path/to/weblate

# In case you're using virtualenv uncomment this:
virtualenv = /home/weblate/weblate-env

# Needed for OAuth/OpenID
buffer-size   = 8192

# Reload when consuming too much of memory
reload-on-rss = 250

# Increase number of workers for heavily loaded sites
workers       = 8

# Enable threads for Sentry error submission
enable-threads = true

# Child processes do not need file descriptors
close-on-exec = true

# Avoid default 0000 umask
umask = 0022

# Run as weblate user
uid = weblate
gid = weblate

# Enable harakiri mode (kill requests after some time)
# harakiri = 3600
# harakiri-verbose = true

# Enable uWSGI stats server
# stats = :1717
# stats-http = true

# Do not log some errors caused by client disconnects
ignore-sigpipe = true
ignore-write-errors = true
disable-write-exception = true

Пример файла настроек Apache

Когда Weblate используется с WSGI, то рекомендуется использовать модуль мультипроцессовой обработки (MPM) prefork.

Со следующим файлом настроек Weblate будет запускаться как WSGI-приложение, вам нужно включить модуль mod_wsgi (этот же пример есть в weblate/examples/apache.conf):

#
# VirtualHost for Weblate
#
# This example assumes Weblate is installed in virtualenv in /home/weblate/weblate-env
# and DATA_DIR is set to /home/weblate/data, please adjust paths to match your setup.
#
<VirtualHost *:80>
    ServerAdmin admin@weblate.example.org
    ServerName weblate.example.org

    # DATA_DIR/static/favicon.ico
    Alias /favicon.ico /home/weblate/data/static/favicon.ico

    # DATA_DIR/static/
    Alias /static/ /home/weblate/data/static/
    <Directory /home/weblate/data/static/>
        Require all granted
    </Directory>

    # DATA_DIR/media/
    Alias /media/ /home/weblate/data/media/
    <Directory /home/weblate/data/media/>
        Require all granted
    </Directory>

    # Path to your Weblate virtualenv
    WSGIDaemonProcess weblate python-home=/home/weblate/weblate-env user=weblate request-timeout=600
    WSGIProcessGroup weblate
    WSGIApplicationGroup %{GLOBAL}

    WSGIScriptAlias / /home/weblate/weblate-env/lib/python3.7/site-packages/weblate/wsgi.py process-group=weblate
    WSGIPassAuthorization On

    <Directory /home/weblate/weblate-env/lib/python3.7/site-packages/weblate/>
        <Files wsgi.py>
        Require all granted
        </Files>
    </Directory>

</VirtualHost>

Примечание

Weblate требует Python 3, поэтому, пожалуйста, убедитесь, что вы используете вариант modwsgi, собранный с третьим Python’ом. Обычно он доступен в виде отдельного пакета, например libapache2-mod-wsgi-py3.

Пример файла настроек Apache и Gunicorn

Со следующим файлом настроек Weblate будет запускаться в Gunicorn и Apache 2.4 (этот же пример есть в weblate/examples/apache.gunicorn.conf):

#
# VirtualHost for Weblate using gunicorn on localhost:8000
#
# This example assumes Weblate is installed in virtualenv in /home/weblate/weblate-env
# and DATA_DIR is set to /home/weblate/data, please adjust paths to match your setup.
#
<VirtualHost *:443>
    ServerAdmin admin@weblate.example.org
    ServerName weblate.example.org

    # DATA_DIR/static/favicon.ico
    Alias /favicon.ico /home/weblate/data/static/favicon.ico

    # DATA_DIR/static/
    Alias /static/ /home/weblate/data/static/
    <Directory /home/weblate/data/static/>
        Require all granted
    </Directory>

    # DATA_DIR/media/
    Alias /media/ /home/weblate/data/media/
    <Directory /home/weblate/data/media/>
        Require all granted
    </Directory>

    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/https_cert.cert
    SSLCertificateKeyFile /etc/apache2/ssl/https_key.pem
    SSLProxyEngine On

    ProxyPass /favicon.ico !
    ProxyPass /static/ !
    ProxyPass /media/ !

    ProxyPass / http://localhost:8000/
    ProxyPassReverse / http://localhost:8000/
    ProxyPreserveHost On
</VirtualHost>

Запуск Weblate по определённому пути в URL

Добавлено в версии 1.3.

Когда Weblate используется с WSGI, то рекомендуется использовать модуль мультипроцессовой обработки (MPM) prefork.

Пример файла настроек Apache для предоставления доступу к Weblate по пути /weblate. Снова используя модуль mod_wsgi (этот же пример есть в weblate/examples/apache-path.conf):

#
# VirtualHost for Weblate, running under /weblate path
#
# This example assumes Weblate is installed in virtualenv in /home/weblate/weblate-env
# and DATA_DIR is set to /home/weblate/data, please adjust paths to match your setup.
#
<VirtualHost *:80>
    ServerAdmin admin@weblate.example.org
    ServerName weblate.example.org

    # DATA_DIR/static/favicon.ico
    Alias /weblate/favicon.ico /home/weblate/data/static/favicon.ico

    # DATA_DIR/static/
    Alias /weblate/static/ /home/weblate/data/static/
    <Directory /home/weblate/data/static/>
        Require all granted
    </Directory>

    # DATA_DIR/media/
    Alias /weblate/media/ /home/weblate/data/media/
    <Directory /home/weblate/data/media/>
        Require all granted
    </Directory>

    # Path to your Weblate virtualenv
    WSGIDaemonProcess weblate python-home=/home/weblate/weblate-env user=weblate request-timeout=600
    WSGIProcessGroup weblate
    WSGIApplicationGroup %{GLOBAL}

    WSGIScriptAlias /weblate /home/weblate/weblate-env/lib/python3.7/site-packages/weblate/wsgi.py process-group=weblate
    WSGIPassAuthorization On

    <Directory /home/weblate/weblate-env/lib/python3.7/site-packages/weblate/>
        <Files wsgi.py>
        Require all granted
        </Files>
    </Directory>

</VirtualHost>

Кроме того, вам нужно будет подправить weblate/settings.py:

URL_PREFIX = "/weblate"

Фоновые задачи с использованием Celery

Добавлено в версии 3.2.

Weblate использует Celery для выполнения обычных и фоновых задач. Вы должны запустить службу Celery, которая будет их выполнять. Например, он отвечает за выполнение следующих операций (этот список не является полным):

Типовая конфигурация, основанная на Redis, выглядит как-то так:

CELERY_TASK_ALWAYS_EAGER = False
CELERY_BROKER_URL = "redis://localhost:6379"
CELERY_RESULT_BACKEND = CELERY_BROKER_URL

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

./weblate/examples/celery start
./weblate/examples/celery stop

Примечание

Процесс Celery должен выполняться под тем же пользователем, под которым работает процесс WSGI, иначе файлы в каталоге DATA_DIR будут сохраняться с разными владельцами, что приведёт к проблемам во время выполнения.

Смотреть также раздел Права доступа к файлам и Запуск сервера.

Выполнение задач Celery в wsgi с использованием режима eager mode

Примечание

Это сильно повлияет на производительность веб-интерфейса и приведёт к поломке функций, зависящих от регулярного срабатывания (например, коммитинг ожидающих изменений, уведомления о сводке или резервное копирование).

При разработке Weblate или модулей для него вы можете использовать «нетерпеливую» конфигурацию, тогда все задачи будут выполнятся непосредственно при их вызове:

CELERY_TASK_ALWAYS_EAGER = True
CELERY_BROKER_URL = "memory://"
CELERY_TASK_EAGER_PROPAGATES = True

Запуск Celery в качестве системного сервиса

Скорее всего вы захотите запустить Celery в качестве демона, и как выполнить ваше желание описывается в разделе Демонизация документации Celery. Для наиболее распространённой установки Linux с использованием systemd вы можете воспользоваться примерами перечисленных ниже файлов, поставляемых в каталоге examples.

Модуль systemd, размещаемый по пути /etc/systemd/system/celery-weblate.service:

[Unit]
Description=Celery Service (Weblate)
After=network.target

[Service]
Type=forking
User=weblate
Group=weblate
EnvironmentFile=/etc/default/celery-weblate
WorkingDirectory=/home/weblate
RuntimeDirectory=celery
RuntimeDirectoryPreserve=restart
LogsDirectory=celery
ExecStart=/bin/sh -c '${CELERY_BIN} multi start ${CELERYD_NODES} \
  -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \
  --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
ExecStop=/bin/sh -c '${CELERY_BIN} multi stopwait ${CELERYD_NODES} \
  --pidfile=${CELERYD_PID_FILE}'
ExecReload=/bin/sh -c '${CELERY_BIN} multi restart ${CELERYD_NODES} \
  -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \
  --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'

[Install]
WantedBy=multi-user.target

Файл настроек переменных окружения должен быть размещён в /etc/default/celery-weblate:

# Name of nodes to start
CELERYD_NODES="celery notify memory backup translate"

# Absolute or relative path to the 'celery' command:
CELERY_BIN="/home/weblate/weblate-env/bin/celery"

# App instance to use
# comment out this line if you don't use an app
CELERY_APP="weblate.utils"

# Extra command-line arguments to the worker,
# increase concurrency if you get weblate.E019
CELERYD_OPTS="--beat:celery --queues:celery=celery --prefetch-multiplier:celery=4 \
    --queues:notify=notify --prefetch-multiplier:notify=10 \
    --queues:memory=memory --prefetch-multiplier:memory=10 \
    --queues:translate=translate --prefetch-multiplier:translate=4 \
    --concurrency:backup=1 --queues:backup=backup  --prefetch-multiplier:backup=2"

# Logging configuration
# - %n will be replaced with the first part of the nodename.
# - %I will be replaced with the current child process index
#   and is important when using the prefork pool to avoid race conditions.
CELERYD_PID_FILE="/run/celery/weblate-%n.pid"
CELERYD_LOG_FILE="/var/log/celery/weblate-%n%I.log"
CELERYD_LOG_LEVEL="INFO"

Для ротации журналов Celery файл настроек logrotate должен быть размещён в /etc/logrotate.d/celery:

/var/log/celery/*.log {
        weekly
        missingok
        rotate 12
        compress
        notifempty
}

Периодические задачи при помощи Celery beat

Weblate поставляется со встроенной конфигурацией планировщика задач. Вы, однако, можете определить в settings.py дополнительные задачи, для примера смотрите раздел Отложенные коммиты.

Предполагается, что задачи будут выполняться демоном Celery beat. В случае, если он не работает должным образом, он может быть не запущен или его база данных была повреждена. В этом случае проверьте журналы запуска Celery, чтобы выяснить первопричину проблемы.

Мониторинг состояния Celery

Текущую длину очередей задач Celery можно узнать в Интерфейс управления или использовать celery_queues в командной строке. В случае если очередь будет слишком длинной, вы также получите ошибку конфигурации в интерфейсе администратора.

Предупреждение

Ошибки Celery по умолчанию записываются только в журнал Celery и пользователю не видны. В случае, если вы хотите видеть сводку по таким ошибкам, рекомендуется настроить сбор отчетов об ошибках.

Мониторинг Weblate

Weblate предоставляет URL-адрес /healthz/, который можно использоваться для простой проверки его работоспособности, например, при использовании Kubernetes. Docker container имеет встроенную проверку работоспособности с помощью этого URL-адреса.

Для мониторинга метрик Weblate’а вы можете использовать конечную точку API GET /api/metrics/.

Сбор отчетов об ошибках

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

Sentry

В Weblate встроена поддержка Sentry. Для его использования достаточно установить параметр SENTRY_DSN в settings.py:

SENTRY_DSN = "https://id@your.sentry.example.com/"

Rollbar

Weblate имеет встроенную поддержку Rollbar. Для его использования достаточно следовать инструкциям из документа`Уведомления Rollbar для Python’а <https://docs.rollbar.com/docs/python/>`_.

Вкратце, вам необходимо дописать в settings.py:

# Add rollbar as last middleware:
MIDDLEWARE = [
    # … other middleware classes …
    "rollbar.contrib.django.middleware.RollbarNotifierMiddleware",
]

# Configure client access
ROLLBAR = {
    "access_token": "POST_SERVER_ITEM_ACCESS_TOKEN",
    "client_token": "POST_CLIENT_ITEM_ACCESS_TOKEN",
    "environment": "development" if DEBUG else "production",
    "branch": "main",
    "root": "/absolute/path/to/code/root",
}

Все остальное интегрируется автоматически, теперь у вас будут собираться ошибки как со стороны сервера, так и со стороны клиента.

Перенос Weblate на другой сервер

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

Перенос базы данных

В зависимости от серверной части вашей базы данных, у вас может быть несколько вариантов переноса базы данных. Самый простой из них — это сделать дамп базы на старом сервере и импортировать его на новый. В качестве альтернативы вы можете использовать репликацию, если ваша база данных ее поддерживает.

Наилучшим подходом будет использование родных инструментов для работы с базами данных, так как они обычно наиболее эффективны (например, mysqldump или pg_dump). Если вы выполнить перенос между разными базами данных, то единственным вариантом может оказаться использование команд управления Django для создания дампа и импорта базы данных:

# Export current data
weblate dumpdata > /tmp/weblate.dump
# Import dump
weblate loaddata /tmp/weblate.dump

Перенос репозиториев системы контроля версий

Также необходимо перенести репозитории системы контроля версий, хранящиеся в каталоге DATA_DIR. Вы можете просто скопировать их, либо воспользоваться командой rsync для более эффективного выполнения переноса.

Прочие заметки

Не забудьте переместить и другие сервисы, которые Weblate мог использовать, например, Redis, задачи Cron или модули пользовательской аутентификации.

Развёртывание Weblate

Weblate легко устанавливается в вашем облаке. Пожалуйста, изучите подробное руководство по вашей платформе:

Сторонние методы развёртывания Weblate

Примечание

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

Стек Bitnami Weblate

Bitnami предоставляет стек Weblate для многих платформ по адресу <https://bitnami.com/stack/weblate>. Во время установки настройки будут скорректированы, дополнительную документацию смотрите в <https://bitnami.com/stack/weblate/README.txt>.

Пакет Cloudron Weblate

Cloudron — это платформа для собственного хостинга web-приложений. Weblate установленный через Cloudron будет автоматически обновляться. Этот пакет поддерживается командой Cloudron в их репозитории пакетов Weblate.

Установка Weblate с Cloudron

Weblate в YunoHost

Проект самостоятельного хостинга YunoHost предоставляет пакет для Weblate. После установки YunoHost вы сможете установить Weblate как любое другое приложение. Он предоставит вам полностью рабочий стек с резервным копированием и восстановлением, но вам всё равно может понадобиться отредактировать файл настроек для определённых целей использования.

Вы можете воспользоваться интерфейсом администрирования или этой кнопкой (она приведёт вас на ваш сервер):

Установка Weblate с YunoHost

Также можно использовать интерфейс командной строки:

yunohost app install https://github.com/YunoHost-Apps/weblate_ynh

Обновление Weblate

Обновления образа Docker’а

В официальный образ Docker’а (смотрите раздел Установка с помощью Docker’а) уже интегрированы все шаги для обновления Weblate. Обычно вручную делать ничего не надо, за исключением извлечения последней версии.

Общие инструкции по обновлению

Перед обновлением, пожалуйста, проверьте текущие зависимости программного обеспечения, поскольку они могли измениться. После того, как все зависимости будут установлены или обновлены, пожалуйста, приведите свой файл настроек settings.py в соответствие с изменениями в конфигурации (правильные значения смотрите в settings_example.py).

Перед обновлением всегда проверяйте инструкции для конкретных версий. Если вы пропустили какие-то версии, пожалуйста, при обновлении проследуйте инструкциям для всех версий, которые вы пропустили. Иногда, чтобы обеспечить плавный переход, лучше сперва обновиться до какой-нибудь промежуточной версии. Обновление через несколько версий должно работать, но оно протестировано не так хорошо, как обновление на одну версию.

Примечание

Перед обновлением рекомендуется выполнить полное резервное копирование базы данных, чтобы её можно было откатить в случае неудачи обновления, смотрите раздел Резервное копирование и перенос Weblate.

  1. Остановите процессы wsgi и Celery. Обновление может выполнять несовместимые изменения в базе данных, поэтому во время обновления всегда безопаснее избегать выполнения старых процессов.

  2. Обновите код Weblate.

    При установке через pip это можно сделать следующим образом:

    pip install -U "Weblate[all]"
    

    Если вы не хотите устанавливать все необязательные зависимости, сделайте это:

    pip install -U Weblate
    

    При использовании кода из Git’а вам нужно будет извлечь новый исходный код и обновить вашу установку:

    cd weblate-src
    git pull
    # Update Weblate inside your virtualenv
    . ~/weblate-env/bin/pip install -e .
    # Install dependencies directly when not using virtualenv
    pip install --upgrade -r requirements.txt
    # Install optional dependencies directly when not using virtualenv
    pip install --upgrade -r requirements-optional.txt
    
  3. Новый выпуск Weblate может содержать новые Необязательные зависимости, пожалуйста, проверьте, покрывают ли они нужные вам функции.

  4. Обновите файл настроек, пример смотрите в settings_example.py или обратитесь к разделу Инструкции для конкретных версий для получения информации о необходимых шагах.

  5. Обновите структуру базы данных:

    weblate migrate --noinput
    
  6. Соберите обновленные статические файлы (смотрите разделы Запуск сервера и Обслуживание статических файлов):

    weblate collectstatic --noinput --clear
    
  7. Сожмите файлы JavaScript и CSS (необязательно, смотрите раздел Сжатие клиентских ресурсов):

    weblate compress
    
  8. Если вы используете версию из Git’а, вам также при каждом обновлении следует заново сгенерировать файлы локалей. Вы можете сделать это, выполнив следующую команду:

    weblate compilemessages
    
  9. Убедитесь, что ваша установка в порядке (также смотрите раздел Рабочая среда):

    weblate check --deploy
    
  10. Перезапустите рабочий процесс celery (смотрите раздел Фоновые задачи с использованием Celery).

Инструкции для конкретных версий

Обновление с ветки 2.x

При обновлении с выпусков ветки 2.x всегда сначала выполняйте обновление до версии 3.0.1, а затем продолжайте обновление в ветке 3.x. Обновления, пропустившие этот этап, не поддерживаются и будут работать неправильно.

Обновление с ветки 3.x

При обновлении с выпусков ветки 3.x всегда сначала выполняйте обновление до версии 4.0.4 или 4.1.1, а затем продолжайте обновление в ветке 4.x. Обновления, пропустившие этот этап, не поддерживаются и будут работать неправильно.

Обновление с версии 4.0 до версии 4.1

Для выполнения обновления, пожалуйста, следуйте общим инструкциям по обновлению.

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

  • В файл settings_example.py внесено несколько изменений, наиболее заметные из которых касаются промежуточного программного обеспечения, пожалуйста, соответствующим образом подправьте свой файл настроек.

  • Появилась поддержка нескольких новых форматов файлов, возможно, вы захотите включить их обработку в случае, если вы изменяли значение параметра WEBLATE_FORMATS.

  • Появились новые проверки качества, возможно, вы захотите включить их, если вы изменяли параметр CHECK_LIST.

  • Параметр DEFAULT_THROTTLE_CLASSES был изменён, чтобы разрешать сообщать об ограничении частоты запросов к API.

  • Появились новые зависимости и обновились старые.

  • Произошло изменение параметра INSTALLED_APPS.

  • Параметр MT_DEEPL_API_VERSION был удалён в версии 4.7. Машинный перевод DeepL теперь использует новый MT_DEEPL_API_URL вместо этого. Возможно, вам потребуется настроить MT_DEEPL_API_URL для соответствия вашей подписке.

Обновление с версии 4.1 до версии 4.2

Для выполнения обновления, пожалуйста, следуйте общим инструкциям по обновлению.

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

  • Обновление с выпусков ветки 3.x больше не поддерживается, пожалуйста, сначала обновитесь до версии 4.0 или 4.1.

  • Появились новые зависимости и обновились старые.

  • В файл settings_example.py внесено несколько изменений, наиболее заметные из которых касаются нового промежуточного программного обеспечения и изменения порядка приложений.

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

  • Настройки Celery были изменены: очередь memory более не используется. Пожалуйста, подправьте свои скрипты запуска и значение параметра CELERY_TASK_ROUTES.

  • Домен Weblate’а теперь настраивается через параметры, смотрите описание параметра SITE_DOMAIN (или переменной окружения WEBLATE_SITE_DOMAIN). Перед запуском Weblate их необходимо настроить.

  • Имена пользователей и адреса электронной почты в базе данных теперь уникальны независимо от регистра. Ранее из-за ошибки и особенностей PostgreSQL имена и адреса с разным регистром символов считались одинаковыми.

Обновление с версии 4.2 до версии 4.3

Для выполнения обновления, пожалуйста, следуйте общим инструкциям по обновлению.

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

  • В проверках качества произошли некоторые изменения, возможно, вы захотите включить их, если вы изменяли параметр CHECK_LIST.

  • Атрибут «исходный язык» перемещён из проекта в компонент, что также затронуло API. Вам нужно будет обновить клиента Weblate, если вы используете оный.

  • Миграция базы данных на версию 4.3 также может занять значительное количество времени (в зависимость от количества строк, которые вы переводите). Стоит ожидать, что миграция будет занимать примерно один час на каждые 100 000 исходных строк.

  • Произошло изменение параметра INSTALLED_APPS.

  • Появился новый параметр SESSION_COOKIE_AGE_AUTHENTICATED, который дополняет SESSION_COOKIE_AGE.

  • Если вы пользовались командами hub или lab для интеграции с GitHub или GitLab, то вам нужно будет настроить их заново, смотреть параметр GITHUB_CREDENTIALS и GITLAB_CREDENTIALS.

Изменено в версии 4.3.1:

  • Настройки Celery были изменены: добавлена очередь memory. Пожалуйста, подправьте свои скрипты запуска и значение параметра CELERY_TASK_ROUTES.

Изменено в версии 4.3.2:

  • Метод надстроек post_update теперь принимает дополнительный параметр skip_push.

Обновление с версии 4.3 до версии 4.4

Для выполнения обновления, пожалуйста, следуйте общим инструкциям по обновлению.

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

  • Произошло изменение параметра INSTALLED_APPS, к нему надо добавить weblate.configuration.

  • Теперь требуется Django 3.1.

  • Если вы используете MySQL или MariaDB, то требуемая минимальная версия увеличилась, смотреть раздел MySQL и MariaDB.

Изменено в версии 4.4.1:

  • Одноязычный gettext now uses both msgid and msgctxt when present. This will change identification of translation strings in such files breaking links to Weblate extended data such as screenshots or review states. Please make sure you commit pending changes in such files prior upgrading and it is recommended to force loading of affected component using loadpo.

  • Увеличена минимальная требуемая версия translate-toolkit, чтобы решить некоторые проблемы с форматами файлов.

Обновление с версии 4.4 до версии 4.5

Для выполнения обновления, пожалуйста, следуйте общим инструкциям по обновлению.

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

  • Если у вас есть большие глоссарии, миграция может занять значительное время.

  • Глоссарии теперь хранятся как обычные компоненты.

  • API глоссария удалён, для доступа к глоссариям используйте стандартный API перевода.

  • Параметр INSTALLED_APPS измененён: к нему надо добавить weblate.metrics.

Изменено в версии 4.5.1:

  • Появилась новая зависимость от модуля pyahocorasick.

Обновление с версии 4.5 до версии 4.6

Для выполнения обновления, пожалуйста, следуйте общим инструкциям по обновлению.

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

  • Появилась поддержка нескольких новых форматов файлов, возможно, вы захотите включить их обработку в случае, если вы изменяли значение параметра WEBLATE_FORMATS.

  • API для создания компонентов теперь автоматически использует Внутренние URL-адреса Weblate, смотрите описание POST /api/projects/(string:project)/components/.

  • Изменены зависимости и PASSWORD_HASHERS для предпочтения Argon2 для хэширования паролей.

Обновление с версии 4.6 до версии 4.7

Для выполнения обновления, пожалуйста, следуйте общим инструкциям по обновлению.

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

  • В файл settings_example.py внесено несколько изменений (MIDDLEWARE), наиболее заметные из которых касаются промежуточного программного обеспечения, пожалуйста, соответствующим образом подправьте свой файл настроек.

  • Машинный перевод DeepL теперь имеет общий параметр MT_DEEPL_API_URL для более гибкой адаптации к различным моделям подписки. Параметр MT_DEEPL_API_VERSION больше не используется.

  • Теперь требуется Django 3.2.

Обновление с версии 4.7 до версии 4.8

Для выполнения обновления, пожалуйста, следуйте общим инструкциям по обновлению.

В этом выпуске не требуется никаких дополнительных действий по обновлению.

Обновление с версии 4.8 до версии 4.9

Для выполнения обновления, пожалуйста, следуйте общим инструкциям по обновлению.

  • Произошли изменение в хранении метрик, обновление может занять много времени на больших сайтах.

Обновление с версии 4.9 до версии 4.10

Для выполнения обновления, пожалуйста, следуйте общим инструкциям по обновлению.

  • Изменены группы по проектам, обновление может занять много времени на сайтах с тысячами проектов.

  • В Django 4.0 были внесены некоторые несовместимые изменения, смотрите раздел Backwards incompatible changes in 4.0. Weblate пока поддерживает Django 3.2, на случай, если что-то из этого окажется проблематичным. Наиболее заметные изменения, которые могут повлиять на Weblate:

    • Прекращена поддержка PostgreSQL 9.6, Django 4.0 поддерживает PostgreSQL 10 и выше.

    • Формат CSRF_TRUSTED_ORIGINS был изменён.

  • Контейнер Docker теперь использует Django 4.0, изменения смотреть выше.

Upgrade from 4.10 to 4.11

Для выполнения обновления, пожалуйста, следуйте общим инструкциям по обновлению.

  • Weblate now requires Python 3.7 or newer.

  • The implementation of По-проектная настройка доступа has changed, removing the project prefix from the group names. This affects API users.

  • Weblate now uses charset-normalizer instead of chardet module for character set detection.

  • Changed in 4.11.1: There is a change in REST_FRAMEWORK setting (removal of one of the backends in DEFAULT_AUTHENTICATION_CLASSES).

Обновление с Python’а 2 на Python 3

Weblate больше не поддерживает Python старше версии 3.6. В случае, если вы всё ещё работаете на более старой версии, пожалуйста, сначала выполните миграцию на Python 3 на существующей версии и обновите её только после перехода. Смотрите раздел Обновление с Python’а 2 на Python 3 в документации к Weblate 3.11.1.

Переход с других баз данных на PostgreSQL

Если вы используете Weblate не на PostgreSQL, а на другой базе данных, вам следует рассмотреть возможность перехода на PostgreSQL, поскольку Weblate работает лучше всего именно с ней. Следующие шаги помогут вам перенести данные между базами данных. Пожалуйста, не забудьте остановить веб-сервер и сервер Celery перед миграцией, иначе вы можете получить несовместимые данные.

Создание базы данных в PostgreSQL

Обычно рекомендуется запускать Weblate в отдельной базе данных и под отдельной учётной записью:

# If PostgreSQL was not installed before, set the main password
sudo -u postgres psql postgres -c "\password postgres"

# Create a database user called "weblate"
sudo -u postgres createuser -D -P weblate

# Create the database "weblate" owned by "weblate"
sudo -u postgres createdb -E UTF8 -O weblate weblate

Переход с использованием JSON-дампов Django

Простейшим способом перехода является использование JSON-дампов Django. Они хорошо работают для небольших установок. На больших сайтах вы вместо него можете использовать утилиту pgloader, смотрите раздел Переход на PostgreSQL с помощью pgloader.

  1. Добавьте PostgreSQL в файл settings.py в качестве дополнительного подключения к базе данных:

DATABASES = {
    "default": {
        # Database engine
        "ENGINE": "django.db.backends.mysql",
        # Database name
        "NAME": "weblate",
        # Database user
        "USER": "weblate",
        # Database password
        "PASSWORD": "password",
        # Set to empty string for localhost
        "HOST": "database.example.com",
        # Set to empty string for default
        "PORT": "",
        # Additional database options
        "OPTIONS": {
            # In case of using an older MySQL server, which has MyISAM as a default storage
            # 'init_command': 'SET storage_engine=INNODB',
            # Uncomment for MySQL older than 5.7:
            # 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
            # If your server supports it, see the Unicode issues above
            "charset": "utf8mb4",
            # Change connection timeout in case you get MySQL gone away error:
            "connect_timeout": 28800,
        },
    },
    "postgresql": {
        # Database engine
        "ENGINE": "django.db.backends.postgresql",
        # Database name
        "NAME": "weblate",
        # Database user
        "USER": "weblate",
        # Database password
        "PASSWORD": "password",
        # Set to empty string for localhost
        "HOST": "database.example.com",
        # Set to empty string for default
        "PORT": "",
    },
}
  1. Запустите миграции и удалите все данные, вставленные в таблицы:

weblate migrate --database=postgresql
weblate sqlflush --database=postgresql | weblate dbshell --database=postgresql
  1. Сделайте дамп прежней базы данных и импортируйте его в PostgreSQL

weblate dumpdata --all --output weblate.json
weblate loaddata weblate.json --database=postgresql
  1. Подправьте параметр DATABASES, задав в нём использование по умолчанию только базы данных PostgreSQL и удалив старое соединение.

Теперь Weblate должен быть готов к запуску из базы данных PostgreSQL.

Переход на PostgreSQL с помощью pgloader

pgloader — это универсальный инструмент миграции для переноса данных на PostgreSQL. Вы можете использовать его для переноса базы данных Weblate.

  1. Подправьте свой файл settings.py, задав в нём использование базы данных PostgreSQL.

  2. Перенесите схему в базу данных PostgreSQL:

    weblate migrate
    weblate sqlflush | weblate dbshell
    
  3. Запустите pgloader для переноса данных. Для переноса базы данных можно использовать следующий скрипт, но вы, возможно, захотите побольше узнать о pgloader’е, чтобы понять, что он делает, и подстроить его для соответствия вашим настройкам:

    LOAD DATABASE
         FROM      mysql://weblate:password@localhost/weblate
         INTO postgresql://weblate:password@localhost/weblate
    
    WITH include no drop, truncate, create no tables, create no indexes, no foreign keys, disable triggers, reset sequences, data only
    
    ALTER SCHEMA 'weblate' RENAME TO 'public'
    ;
    

Переход с Pootle

Поскольку изначально Weblate был написан как замена для Pootle, он поддерживает перенос учётных записей пользователей из Pootle. Вы можете создать дамп пользователей Pootle, а затем импортировать его, используя команду Django importusers.

Резервное копирование и перенос Weblate

Автоматическое резервное копирование с помощью BorgBackup

Добавлено в версии 3.9.

В Weblate встроена поддержка создания сервисных резервных копий с помощью BorgBackup. Borg создаёт компактные зашифрованные резервные копии, которые можно безопасно хранить в облаке. Управлять резервными копиями можно через интерфейс управления на вкладке Резервные копии.

Изменено в версии 4.4.1: Теперь обе поддерживаемые базы данных: и PostgreSQL, и MySQL/MariaDB, включаются в автоматические резервные копии.

Резервные копии, которые делает Borg, являются инкрементальными, и Weblate настроен на хранение следующих ревизий резервных копий:

  • Ежедневных, за последние 14 дней

  • Еженедельных, за последние 8 недель

  • Ежемесячных, за последние 6 месяцев

_images/backups.png

Ключ шифрования Borg

BorgBackup создаёт зашифрованные резервные копии и восстановить из без кодовой фразы у вас не получится. Парольная фраза генерируется при добавлении новой службы резервного копирования. Вы должны скопировать её и сохранить в безопасном месте.

Если же вы используете хранилище резервных копий на Weblate.org, то сохраните также резервную копию вашего закрытого SSH-ключа — он понадобится для доступа к вашим резервным копиям.

См.также

borg init

Настройка резервного копирования

  • Резервное копирование базы данных может быть настроено через параметр DATABASE_BACKUP.

  • Создание резервной копии может быть настроено с помощью параметра BORG_EXTRA_ARGS.

Предоставляемое Weblate’ом хранилище резервных копий

Самый простой способ резервного копирования вашего экземпляра Weblate — приобрести сервис резервного копирования на weblate.org. Его можно будет активировать следующим образом:

  1. Покупка сервиса резервного копирования на https://weblate.org/support/#backup.

  2. Ввод полученного ключа в интерфейсе управления, смотрите раздел Интегрированная поддержка.

  3. Weblate подключается к облачному сервису и получает информацию для доступа к резервным копиям.

  4. Включение новой конфигурации резервного копирования на вкладке Резервные копии.

  5. Создайте резервную копию своих учётных данных Borg, чтобы иметь возможность восстанавливать резервные копии; смотрите раздел «Ключ шифрования Borg».

Подсказка

Шаг ручного включения предусмотрен для вашей безопасности. Без вашего согласия никакие данные в репозитории резервных копий, полученные в процессе регистрации, не отправляются.

Использование собственного хранилища резервных копий

Также вы можете использовать своё собственное хранилище для резервного копирования. Загрузка резервных копий на удалённый сервер может осуществляться через SSH, на целевом сервере должен быть установлен BorgBackup.

См.также

Раздел Общие сведения в документации Borg

Локальная файловая система

Для локальной резервной копии рекомендуется указывать абсолютный путь, например /путь/к/резервной_копии. Каталог должен быть доступен на запись для пользователя, под которым запущен Weblate (смотрите раздел Права доступа к файлам). В случае, если каталог не существует, Weblate попытается его создать, но для этого понадобятся соответствующие права доступа.

Подсказка

Если Weblate запущен в Docker’е, убедитесь, что местоположение резервных копий в контейнере Weblate отображается на какой-либо том. В противном случае при перезагрузке контейнера Docker все резервные копии будут потеряны.

Одним из вариантов является размещение резервных копий в существующем томе. Подойдёт, к примеру, /app/data/borgbackup. Это один из томов уже существующих в контейнере.

Также вы можете добавить в файл Docker Compose новый контейнер для резервных копий и использовать, например, путь /borgbackup:

services:
  weblate:
    volumes:
      - /home/weblate/data:/app/data
      - /home/weblate/borgbackup:/borgbackup

Владельцем каталога, в котором будут хранится резервные копии, должен быть пользователь с UID 1000, Иначе Weblate не сможет сохранять в него оные.

Удалённые резервные копии

Для создания удалённых резервных копий вам также понадобится установить BorgBackup на другой сервер, доступный для Weblate по SSH с использованием SSH-ключа Weblate:

  1. Подготовить сервер, на котором будут храниться резервные копии.

  2. Установить на него SSH-сервер (вы получите его по умолчанию в большинстве дистрибутивов Linux).

  3. Установите BorgBackup на этот сервер; большинство дистрибутивов Linux имеют доступные пакеты (смотреть Installation).

  4. Выберите существующего или создайте нового пользователя, который будет использоваться для резервного копирования.

  5. Добавить SSH-ключ Weblate к пользователю, чтобы Weblate мог подключаться к серверу по SSH без пароля (смотреть раздел SSH-ключ Weblate).

  6. Настройте местоположение резервного копирования в Weblate как пользователь@хост:/путь/к/резервным копиям или ssh://пользователь@хост:порт/путь/к/резервным копиям.

Подсказка

Предоставляемое Weblate’ом хранилище резервных копий предоставляет вам автоматическое удалённое резервное копирование без каких-либо усилий.

См.также

SSH-ключ Weblate, General

Восстановление из резервной копии Borg

  1. Восстановите доступ к своему репозиторию резервных копий и подготовьте свою парольную фразу для резервного копирования.

  2. Получите список всех резервных копий на сервере с помощью команды borg list РЕПОЗИТОРИЙ.

  3. Восстановите нужную резервную копию в текущий каталог с помощью команды borg extract РЕПОЗИТОРИЙ::АРХИВ.

  4. Восстановите базу данных из SQL-дампа, размещённого в каталоге backup каталога данных Weblate (смотрите раздел Дампы данных для резервного копирования).

  5. Скопируйте файл настроек Weblate (backups/settings.py, смотрите раздел Дампы данных для резервного копирования) в нужное место, смотрите раздел Изменение конфигурации под свои нужды.

    При использовании контейнера Docker файл настроек уже включен в контейнер, и вам следует восстановить исходные переменные окружения. В этом вам может помочь файл environment.yml (смотреть раздел Дампы данных для резервного копирования).

  6. Скопируйте весь восстановленный каталог данных в место, заданное параметром DATA_DIR.

    При использовании контейнера Docker поместите данные в том данных, смотреть раздел Тома контейнеров Docker’а.

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

Сеанс Borg может выглядеть как-то так:

$ borg list /tmp/xxx
Enter passphrase for key /tmp/xxx:
2019-09-26T14:56:08                  Thu, 2019-09-26 14:56:08 [de0e0f13643635d5090e9896bdaceb92a023050749ad3f3350e788f1a65576a5]
$ borg extract /tmp/xxx::2019-09-26T14:56:08
Enter passphrase for key /tmp/xxx:

См.также

borg list, borg extract

Ручное резервное копирование

В зависимости от того, что именно вы хотите сохранить, создайте резервную копию тех типов данных, которые Weblate сохраняет в каждом соответствующем месте.

Подсказка

Если вы выполняете резервное копирование вручную, вы можете подавить предупреждение Weblate об отсутствии резервного копирования, добавив проверку weblate.I028 к параметру SILENCED_SYSTEM_CHECKS в settings.py или к переменной окружения WEBLATE_SILENCED_SYSTEM_CHECKS Docker’а.

SILENCED_SYSTEM_CHECKS.append("weblate.I028")

База данных

Фактическое расположение хранилища зависит от настроек вашей базы данных.

Подсказка

База данных является самым важным хранилищем. Настройте регулярное резервное копирование своей БД. Без неё все переводы попросту пропадут.

Встроенные средства базы данных для резервного копирования

Рекомендуемый подход заключается в создании дампа базы данных с помощью родных для конкретной СУБД инструментов, таких как pg_dump или mysqldump. Обычно они работают лучше, чем резервные копии Django, и восстанавливают полные таблицы со всеми данными.

Эту резервную копию вы можете восстановить и на болле новом выпуске Weblate, при запуске через migrate он выполнит все необходимые миграции. За более подробной информацией о том, как выполнять обновление между версиями обратитесь к разделу «Обновление Weblate».

Резервное копирование базы данных средствами Django

В качестве альтернативы вы можете создать резервную копию базы данных при помощи Django’вской команды dumpdata. Резервное копирование этим способом не зависит от базы данных и может быть использовано в случае, если вы захотите сменить СУБД.

Перед восстановлением вам следует убедиться, что у вас запущена в точности та же самая версия Weblate, с которой была сделана резервная копия. Это необходимо, так как структура базы данных меняется от выпуска к выпуску, и если вы не выполните это условие, то, в конечном итоге, повредите данные тем или иным образом. После установке этой версии запустите все миграции базы данных с помощью команды migrate.

После этого некоторые записи уже будут созданы в базе данных, и они также попадут в резервную копию базы данных. Такие записи рекомендуется удалять вручную в оболочке управления (смотрите раздел Вызов команд управления):

weblate shell
>>> from weblate.auth.models import User
>>> User.objects.get(username='anonymous').delete()

Файлы

Если у вас достаточно места для резервного копирования, просто создайте резервную копию всего каталога DATA_DIR. Это беспроигрышный вариант, даже если он включает в себя некоторые файлы, которые вам не нужны. В следующих разделах подробно описано, для каких файлов нужно создавать резервные копии, а какие можно и пропустить.

Дампы данных для резервного копирования

Изменено в версии 4.7: Дамп окружения был добавлен как environment.yml для помощи в восстановлении в окружениях Docker.

Хранятся в DATA_DIR /backups.

Weblate сбрасывает сюда различные данные, и для создания более полных резервных копий вы можете включить эти файлы. Файлы обновляются ежедневно (требуется отдельный запущенный сервер Celery beat, смотрите раздел Фоновые задачи с использованием Celery). В настоящее время здесь хранятся:

  • Настройки Weblate в виде файла settings.py (также здесь под именем settings-expanded.py лежит обработанная версия этого файла).

  • Резервная копия базы данных PostgreSQL в виде файла database.sql.

  • Дамп окружения как environment.yml.

Резервные копии базы данных по умолчанию сохраняются в виде простого текста, но их также можно сжать или полностью выключить, устанавив параметр DATABASE_BACKUP.

To restore the database backup load it using database tools, for example:

psql --file=database.sql weblate
Репозитории системы контроля версий

Хранятся в DATA_DIR /vcs.

Репозитории системы контроля версий содержат копии ваших вышестоящих репозиториев с изменениями из Weblate’а. Если вы включили для всех ваших компонентов перевода Отправлять при коммите в вышестоящий репозиторий при коммите (Отправлять при коммите), в этот репозиторий включаются все изменения из Weblate’а. Так что на стороне Weblate’а вам уже не нужно создавать резервные копии репозиториев. Они могут быть повторно склонированы из вышестоящих репозиториев без потери данных.

Ключи SSH и GPG

Хранятся в DATA_DIR /ssh и DATA_DIR /home.

Если вы используете сгенерированные Weblate’ом ключи SSH или GPG, вы должны создать резервные копии этих каталогов. Иначе вы потеряете закрытые ключи и вам придётся заново сгенерировать новые.

Загруженные пользователем файлы

Хранятся в DATA_DIR /media.

Вы должны сделать резервные копии всех загруженных пользователями файлов (например, снимков экрана).

Задачи Celery

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

Командная строка для ручного резервного копирования

Используя задание в cron’е, вы можете задать команду bash’а, которая будет выполняться каждый день, например:

$ XZ_OPT="-9" tar -Jcf ~/backup/weblate-backup-$(date -u +%Y-%m-%d_%H%M%S).xz backups vcs ssh home media fonts secret

Строка между кавычками после XZ_OPT позволяет вам выбрать параметры для запуска xz, например, объём памяти, используемый для сжатия; смотрите руководство на странице https://linux.die.net/man/1/xz

Вы можете настроить список папок и файлов в соответствии со своими потребностями. Например, чтобы избежать сохранения памяти переводов (в папке резервных копий), вы можете использовать следующую команду:

$ XZ_OPT="-9" tar -Jcf ~/backup/weblate-backup-$(date -u +%Y-%m-%d_%H%M%S).xz backups/database.sql backups/settings.py vcs ssh home media fonts secret

Восстановление ручных резервных копий

  1. Восстановите все данные, сохранённые вами в резервной копии.

  2. Обновите все репозитории с помощью команды updategit.

    weblate updategit --all
    

Перенос установки Weblate

Переместите свою установку на другую систему, следуя приведённым выше инструкциям по резервному копированию и восстановлению из резервной копии.

Аутентификация

Регистрация пользователя

В установке по умолчанию Weblate использует python-social-auth, форму на сайте для обработки регистраций новых пользователей. После подтверждения своей электронной почты новый пользователь может вносить свой вклад в переводы или пройти аутентификацию, воспользовавшись одним из сторонних сервисов.

Также вы можете отключить регистрацию новых пользователей с помощью установки параметра REGISTRATION_OPEN.

Попытки аутентификации учитываются при применении ограничений на частоту запросов.

Способы аутентификации

Для аутентификации используется встроенное решение Django, включающее в себя для этого аутентификацию от различных социальных сетей. Использование этого решения означает, что вы сможете импортировать себе базу данных пользователей других проектов, написанных на Django (смотрите раздел Переход с Pootle).

Кроме того, аутентификация в Django может быть настроена и с использованием других способов.

См.также

В разделе Параметры аутентификации описано, как настроить аутентификацию в официальном образе Docker’а.

Социальная аутентификация

Благодаря пакету Python Social Auth, Weblate поддерживает аутентификацию с использованием множества сторонних сервисов, таких как GitLab, Ubuntu, Fedora и другие.

Для получения общих инструкций по настройке ознакомьтесь с их документацией в разделе Фреймворк Django.

Примечание

По умолчанию Weblate полагается на сторонние сервисы аутентификации для предоставления подтверждённого адреса электронной почты. Если некоторые сервисы, которые вы хотите использовать, это не поддерживают, включите принудительную проверку адреса электронной почты на стороне Weblate, настроив их параметр FORCE_EMAIL_VALIDATION. Например:

SOCIAL_AUTH_OPENSUSE_FORCE_EMAIL_VALIDATION = True

См.также

Конвейер

Включить конкретный способ аутентификации довольно просто: нужно всего-навсего добавить его имя в параметр AUTHENTICATION_BACKENDS, а также, по необходимости, задать необходимые ему ключи доступа. Обратите внимание, что некоторые способы по умолчанию не предоставляют адрес электронной почты пользователя, в этом случае вы должны запросить его явно, иначе Weblate не сможет правильно указать авторство выполненных пользователями переводов.

Подсказка

Большинство бэкендов аутентификации требуют HTTPS. Как только HTTPS включен на вашем веб-сервере, пожалуйста, настройте Weblate, чтобы он сообщал об этом должным образом, используя ENABLE_HTTPS, или WEBLATE_ENABLE_HTTPS в контейнере Docker.

Аутентификация OpenID

Для сервисов, основанных на OpenID, обычно это просто вопрос её включения. Следующий блок кода включает аутентификацию OpenID для OpenSUSE, Fedora и Ubuntu:

# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.email.EmailAuth",
    "social_core.backends.suse.OpenSUSEOpenId",
    "social_core.backends.ubuntu.UbuntuOpenId",
    "social_core.backends.fedora.FedoraOpenId",
    "weblate.accounts.auth.WeblateUserBackend",
)

См.также

OpenID

Аутентификация GitHub

Вам нужно будет зарегистрировать приложение OAuth в GitHub’е, а затем передать Weblate’у все его секреты:

# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.github.GithubOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Social auth backends setup
SOCIAL_AUTH_GITHUB_KEY = "GitHub Client ID"
SOCIAL_AUTH_GITHUB_SECRET = "GitHub Client Secret"
SOCIAL_AUTH_GITHUB_SCOPE = ["user:email"]

На GitHub нужно задать URL-адрес обратного вызова, указывающий на https://example.com/accounts/complete/github/.

There are similar authentication backends for GitHub for Organizations and GitHub for Teams. Their settings are named SOCIAL_AUTH_GITHUB_ORG_* and SOCIAL_AUTH_GITHUB_TEAM_*, and they require additional setting of the scope - SOCIAL_AUTH_GITHUB_ORG_NAME or SOCIAL_AUTH_GITHUB_TEAM_ID. Their callback URLs are https://example.com/accounts/complete/github-org/ and https://example.com/accounts/complete/github-teams/.

Примечание

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

См.также

GitHub

Аутентификация Bitbucket

Вам нужно будет зарегистрировать приложение в Bitbucket’е, а затем рассказать Weblate’у все его секреты:

# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.bitbucket.BitbucketOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Social auth backends setup
SOCIAL_AUTH_BITBUCKET_OAUTH2_KEY = "Bitbucket Client ID"
SOCIAL_AUTH_BITBUCKET_OAUTH2_SECRET = "Bitbucket Client Secret"
SOCIAL_AUTH_BITBUCKET_OAUTH2_VERIFIED_EMAILS_ONLY = True

Примечание

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

См.также

Bitbucket

Google OAuth 2

Для использования Google OAuth 2 необходимо зарегистрировать приложение на <https://console.developers.google.com/> и включить Google+ API.

URL-адрес перенаправления — https://СЕРВЕР WEBLATE/accounts/complete/google-oauth2/

# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.google.GoogleOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Social auth backends setup
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = "Client ID"
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = "Client secret"

Примечание

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

См.также

Google

Facebook OAuth 2

Как обычно с сервисами OAuth 2, вам необходимо зарегистрировать ваше приложение в Facebook. После этого вы сможете настроить Weblate на его использование:

URL-адрес перенаправления — https://СЕРВЕР WEBLATE/accounts/complete/facebook/

# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.facebook.FacebookOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Social auth backends setup
SOCIAL_AUTH_FACEBOOK_KEY = "key"
SOCIAL_AUTH_FACEBOOK_SECRET = "secret"
SOCIAL_AUTH_FACEBOOK_SCOPE = ["email", "public_profile"]

Примечание

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

См.также

Facebook

GitLab OAuth 2

Для использования GitLab OAuth 2 необходимо зарегистрировать приложение на <https://gitlab.com/profile/applications>.

URL-адрес перенаправления — https://СЕРВЕР WEBLATE/accounts/complete/gitlab/ и убедитесь, что вы отметили область видимости read_user.

# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.gitlab.GitLabOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Social auth backends setup
SOCIAL_AUTH_GITLAB_KEY = "Application ID"
SOCIAL_AUTH_GITLAB_SECRET = "Secret"
SOCIAL_AUTH_GITLAB_SCOPE = ["read_user"]

# If you are using your own GitLab
# SOCIAL_AUTH_GITLAB_API_URL = 'https://gitlab.example.com/'

Примечание

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

См.также

GitLab

Microsoft Azure Active Directory

Weblate можно настроить на использование общих или конкретных арендаторов для аутентификации.

URL-адрес перенаправления — https://СЕРВЕР WEBLATE/accounts/complete/azuread-oauth2/ для общей и https://СЕРВЕР WEBLATE/accounts/complete/azuread-tenant-oauth2/ для конкретной для арендатора аутентификации.

# Azure AD common

# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.azuread.AzureADOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# OAuth2 keys
SOCIAL_AUTH_AZUREAD_OAUTH2_KEY = ""
SOCIAL_AUTH_AZUREAD_OAUTH2_SECRET = ""
# Azure AD Tenant

# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.azuread_tenant.AzureADTenantOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# OAuth2 keys
SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_KEY = ""
SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_SECRET = ""
# Tenant ID
SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_TENANT_ID = ""

Примечание

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

Slack

Для использования Slack OAuth 2 необходимо зарегистрировать приложение на <https://api.slack.com/apps>.

URL-адрес перенаправления — https://СЕРВЕР WEBLATE/accounts/complete/slack/.

# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.slack.SlackOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Social auth backends setup
SOCIAL_AUTH_SLACK_KEY = ""
SOCIAL_AUTH_SLACK_SECRET = ""

Примечание

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

См.также

Slack

Переопределение имён и значков методов аутентификации

Вы можете переопределить отображаемое имя метода аутентификации и иконку, используя параметры SOCIAL_AUTH_<NAME>_IMAGE и SOCIAL_AUTH_<NAME>_TITLE. Например, переопределение именования для Auth0 будет выглядеть следующим образом:

SOCIAL_AUTH_AUTH0_IMAGE = "custom.svg"
SOCIAL_AUTH_AUTH0_TITLE = "Custom auth"

Отключение аутентификации по паролю

Аутентификацию по электронной почте и паролю можно отключить, удалив social_core.backends.email.EmailAuth из параметра AUTHENTICATION_BACKENDS. Никогда не удаляйте оттуда weblate.accounts.auth.WeblateUserBackend, он необходим для работы основных функций Weblate.

Disabling e-mail authentication will disable all e-mail related functionality – user invitation or password reset feature.

Совет

Вы всё ещё можете использовать аутентификацию по паролю для интерфейса администратора и для пользователей, которых вы создаёте там вручную. Просто зайдите на /admin/login/.

Например, аутентификация с использованием только провайдера openSUSE Open ID может быть достигнута при помощи следующего кода:

# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.suse.OpenSUSEOpenId",
    "weblate.accounts.auth.WeblateUserBackend",
)

Аутентификация по паролю

По умолчанию settings.py поставляется с разумным набором проверок в параметре AUTH_PASSWORD_VALIDATORS:

  • Пароли не могут быть слишком похожи на другие ваши личные данные.

  • Пароли должны содержать минимум 10 символов.

  • Пароли не могут быть широко распространёнными паролями.

  • Пароли не могут быть полностью цифровыми.

  • Пароли не могут состоять из одного символа или только из пробелов.

  • Пароли не могут совпадать с предыдущими вашими паролями.

Вы можете настроить этот параметр в соответствии с вашей политикой паролей.

Дополнительно можно установить пакет django-zxcvbn-password, который вычисляет вполне реалистичные оценки сложности пароля и позволяет отклонять пароли с оценкой ниже определённого порога.

Аутентификация через SAML

Добавлено в версии 4.1.1.

Пожалуйста, следуйте инструкциям по настройке Python Social Auth. Значимые отличия:

  • Weblate поддерживает один IDP, который в SOCIAL_AUTH_SAML_ENABLED_IDPS должен называться weblate.

  • URL-адрес XML с метаданными SAML — /accounts/metadata/saml/.

  • Следующие параметры заполняются автоматически: SOCIAL_AUTH_SAML_SP_ENTITY_ID, SOCIAL_AUTH_SAML_TECHNICAL_CONTACT и SOCIAL_AUTH_SAML_SUPPORT_CONTACT

Пример настроек:

# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.email.EmailAuth",
    "social_core.backends.saml.SAMLAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Social auth backends setup
SOCIAL_AUTH_SAML_SP_ENTITY_ID = f"https://{SITE_DOMAIN}/accounts/metadata/saml/"
SOCIAL_AUTH_SAML_SP_PUBLIC_CERT = "-----BEGIN CERTIFICATE-----"
SOCIAL_AUTH_SAML_SP_PRIVATE_KEY = "-----BEGIN PRIVATE KEY-----"
SOCIAL_AUTH_SAML_ENABLED_IDPS = {
    "weblate": {
        "entity_id": "https://idp.testshib.org/idp/shibboleth",
        "url": "https://idp.testshib.org/idp/profile/SAML2/Redirect/SSO",
        "x509cert": "MIIEDjCCAvagAwIBAgIBADA ... 8Bbnl+ev0peYzxFyF5sQA==",
        "attr_name": "full_name",
        "attr_username": "username",
        "attr_email": "email",
    }
}
SOCIAL_AUTH_SAML_ORG_INFO = {
    "en-US": {
        "name": "example",
        "displayname": "Example Inc.",
        "url": "http://example.com"
    }
}
SOCIAL_AUTH_SAML_TECHNICAL_CONTACT = {
    "givenName": "Tech Gal",
    "emailAddress": "technical@example.com"
}
SOCIAL_AUTH_SAML_SUPPORT_CONTACT = {
    "givenName": "Support Guy",
    "emailAddress": "support@example.com"
}

Конфигурация по умолчанию извлекает информацию о пользователе из следующих атрибутов, настраивает вашу IDP для их предоставления:

Атрибут

Ссылка на URL-адрес SAML

Полное имя

urn:oid:2.5.4.3

Имя

urn:oid:2.5.4.42

Фамилия

urn:oid:2.5.4.4

Электронная почта

urn:oid:0.9.2342.19200300.100.1.3

Имя пользователя

urn:oid:0.9.2342.19200300.100.1.1

Подсказка

Приведённый выше пример и образ Docker определяют IDP с меткой weblate. Вам может понадобиться настроить эту строку в качестве Relay в вашем IDP.

Аутентификация через LDAP

Аутентификацию через LDAP лучше всего реализовать с помощью пакета django-auth-ldap. Установить его вы можете как обычно:

# Using PyPI
pip install django-auth-ldap>=1.3.0

# Using apt-get
apt-get install python-django-auth-ldap

Подсказка

Этот пакет включён в Docker-контейнер, смотреть Установка с помощью Docker’а.

Примечание

У Python’ьего модуля LDAP версии 3.1.0 есть некоторые несовместимости, которые могут помешать вам использовать эту версию. Если вы получили ошибку AttributeError: „module“ object has no attribute „_trace_level“, то может помочь понижение версии python-ldap до 3.0.0.

После установки пакета вы сможете подключить его к системе аутентификации Django:

# Add LDAP backed, keep Django one if you want to be able to sign in
# even without LDAP for admin account
AUTHENTICATION_BACKENDS = (
    "django_auth_ldap.backend.LDAPBackend",
    "weblate.accounts.auth.WeblateUserBackend",
)

# LDAP server address
AUTH_LDAP_SERVER_URI = "ldaps://ldap.example.net"

# DN to use for authentication
AUTH_LDAP_USER_DN_TEMPLATE = "cn=%(user)s,o=Example"
# Depending on your LDAP server, you might use a different DN
# like:
# AUTH_LDAP_USER_DN_TEMPLATE = 'ou=users,dc=example,dc=com'

# List of attributes to import from LDAP upon sign in
# Weblate stores full name of the user in the full_name attribute
AUTH_LDAP_USER_ATTR_MAP = {
    "full_name": "name",
    # Use the following if your LDAP server does not have full name
    # Weblate will merge them later
    # 'first_name': 'givenName',
    # 'last_name': 'sn',
    # Email is required for Weblate (used in VCS commits)
    "email": "mail",
}

# Hide the registration form
REGISTRATION_OPEN = False

Примечание

Вы должны удалить значение 'social_core.backends.email.EmailAuth' из параметра AUTHENTICATION_BACKENDS, в противном случае пользователи смогут установить в Weblate свой пароль и пройти аутентификацию, используя его. Оставление 'weblate.accounts.auth.WeblateUserBackend' необходимо для того, чтобы работали разрешения и анонимные пользователи. Также он позволит вам войти в систему, используя учётную запись локального администратора, если вы его создали (например, с помощью команды createadmin).

Использование пароля привязки

Если вы не можете использовать для аутентификации прямую привязку, вам нужно будет использовать поиск, и предоставить для поиска привязываемого пользователя. Например:

import ldap
from django_auth_ldap.config import LDAPSearch

AUTH_LDAP_BIND_DN = ""
AUTH_LDAP_BIND_PASSWORD = ""
AUTH_LDAP_USER_SEARCH = LDAPSearch(
    "ou=users,dc=example,dc=com", ldap.SCOPE_SUBTREE, "(uid=%(user)s)"
)

Интеграция с Active Directory

import ldap
from django_auth_ldap.config import LDAPSearch, NestedActiveDirectoryGroupType

AUTH_LDAP_BIND_DN = "CN=ldap,CN=Users,DC=example,DC=com"
AUTH_LDAP_BIND_PASSWORD = "password"

# User and group search objects and types
AUTH_LDAP_USER_SEARCH = LDAPSearch(
    "CN=Users,DC=example,DC=com", ldap.SCOPE_SUBTREE, "(sAMAccountName=%(user)s)"
)

# Make selected group a superuser in Weblate
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
    # is_superuser means user has all permissions
    "is_superuser": "CN=weblate_AdminUsers,OU=Groups,DC=example,DC=com",
}

# Map groups from AD to Weblate
AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
    "OU=Groups,DC=example,DC=com", ldap.SCOPE_SUBTREE, "(objectClass=group)"
)
AUTH_LDAP_GROUP_TYPE = NestedActiveDirectoryGroupType()
AUTH_LDAP_FIND_GROUP_PERMS = True

# Optionally enable group mirroring from LDAP to Weblate
# AUTH_LDAP_MIRROR_GROUPS = True

Аутентификация через CAS

Аутентификация через CAS может быть выполнена с помощью такого пакета, как django-cas-ng.

Первый шаг — раскрытие поля электронной почты пользователя через CAS. Раскрытие нужно настроить на самом сервере CAS, и оно требует, чтобы у вас был запущен CAS как минимум версии v2, поскольку CAS версии v1 вообще не поддерживает атрибуты.

Второй шаг — обновление Weblate’а для использования вашего сервера CAS и атрибутов.

Для установки django-cas-ng выполните команду:

pip install django-cas-ng

После установки пакета вы сможете подключить его к системе аутентификации Django, изменив файл settings.py:

# Add CAS backed, keep the Django one if you want to be able to sign in
# even without LDAP for the admin account
AUTHENTICATION_BACKENDS = (
    "django_cas_ng.backends.CASBackend",
    "weblate.accounts.auth.WeblateUserBackend",
)

# CAS server address
CAS_SERVER_URL = "https://cas.example.net/cas/"

# Add django_cas_ng somewhere in the list of INSTALLED_APPS
INSTALLED_APPS = (..., "django_cas_ng")

Наконец, для связывания поля электронной почты с объектом пользователя может быть использован сигнал. Для этого необходимо импортировать сигнал из пакета django-cas-ng и подключить к этому сигналу свой код. Выполнение этого действия в файле настроек может вызвать проблемы, поэтому его код предлагается поместить:

  • В метод django.apps.AppConfig.ready() конфигурации вашего приложения

  • В проектовый файл urls.py (если у вас нет моделей)

from django_cas_ng.signals import cas_user_authenticated
from django.dispatch import receiver


@receiver(cas_user_authenticated)
def update_user_email_address(sender, user=None, attributes=None, **kwargs):
    # If your CAS server does not always include the email attribute
    # you can wrap the next two lines of code in a try/catch block.
    user.email = attributes["email"]
    user.save()

См.также

Django CAS NG

Настройка сторонней аутентификации Django

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

Обычно установка заключается в том, чтобы добавить способ аутентификации в список AUTHENTICATION_BACKENDS и установить соответствующее приложение аутентификации (если таковое имеется) и добавить его в список INSTALLED_APPS:

AUTHENTICATION_BACKENDS = (
    # Add authentication backend here
    "weblate.accounts.auth.WeblateUserBackend",
)

INSTALLED_APPS += (
    # Install authentication app here
)

Управление доступом

Weblate поставляется с тонко настраиваемой системой привилегий для назначения пользователям прав как в рамках всего экземпляра приложения, так и в рамках отдельных его частей.

Изменено в версии 3.0: До версии Weblate 3.0 система привилегий базировалась только на системе привилегий Django, но теперь построена специально для Weblate. Если вы используете что-то более старое, пожалуйста, обратитесь к документации по конкретной версии, которую вы используете.

Простой контроль доступа

Если вы не администрируете всю установку Weblate и просто имеете доступ к управлению определёнными проектами (например, на Hosted Weblate), ваши возможности управления доступом ограничены следующими настройками. Их достаточно, если вам не нужны сложные настройки.

Управление доступом к проекту

Примечание

Эта функция недоступна на тарифном плане проектов, работающих по плану свободного ПО на облачном хостинге Weblate.

Вы можете ограничить доступ пользователя к отдельным проектам, сменив параметр Управления доступом. Доступные варианты:

Публичный

Publicly visible, translatable for all signed-in users.

Защищённый

Проект видят все, но переводить могут только отдельные пользователи.

Приватный

Видеть и переводить проект могут только отдельные пользователи.

Настраиваемый

Возможность управление записями пользователей будет отключена. По умолчанию всем пользователям будет запрещено выполнять какие-либо действия над проектом. Вам придется настроить все права доступа с помощью нетипичных правил доступа.

Управление доступом можно изменить на вкладке Доступ параметров (УправлениеПараметры) каждого соответствующего проекта.

_images/project-access.png

Значение по умолчанию можно изменить с помощью DEFAULT_ACCESS_CONTROL.

Примечание

Даже для частных проектов, некоторая информация о вашем проекте будет раскрыта: статистика и языковая сводка для всего экземпляра будет включать подсчёты для всех проектов, несмотря на настройки контроля доступа. Имя вашего проекта и другая информация не могут быть раскрыты через это.

Примечание

Фактический набор разрешений, доступных пользователям по умолчанию в публичных, защищённых и частных проектах, может быть пересмотрен администратором экземпляра Weblate с помощью пользовательских настроек.

Предупреждение

При включённом контроле доступа Custom, Weblate удалит все special groups, которые он создал для выбранного проекта. Если вы делаете это без прав администратора для всего экземпляра Weblate, вы мгновенно потеряете доступ к управлению проектом.

По-проектная настройка доступа

Пользователи с правами доступа Управление доступом к проекту (см. Список привилегий и встроенных ролей) могут управлять записями пользователей в проектах добавлением записей в команды. Начальный набор команд предоставляется самим Weblate, а дополнительные можно определить подстройкой управления доступом. Вы можете ограничить команды определёнными условиями и назначить им созданные вами роли доступа (см. Список привилегий и встроенных ролей).

Следующие команды автоматически создаются для всех проектов:

Для`публичных`, защищённых и частных проектов:

Администрирование

Включает все разрешения, доступные для проекта.

Рецензирование (только если включено рецензирование)

Может одобрять переводы во время рецензирования.

Только для проектов защищённых и частных:

Перевести

Может переводить проект и загружать переводы, сделанные в автономном режиме.

Источники

Может редактировать исходные строки (если это разрешено в настройках проекта) и информацию об исходной строке.

Языки

Может управлять языками перевода (добавлять или удалять переводы).

Глоссарий

Может управлять глоссарием (добавлять, удалять или загружать записи в глоссарий).

Накопитель

Может управлять памятью переводов.

Снимки экрана

Может управлять снимками экрана (добавлять или удалять их, а также связывать их с исходными строками).

Автоматический перевод

Возможно использовать автоматический перевод.

СКВ (VCS)

Может управлять системой контроля версий и имеет доступ к экспортированному репозиторию.

Выставление счетов

Имеет доступ к выставлению счетов и его настройкам (смотреть раздел Выставление счетов).

_images/manage-users.png

Эти возможности доступны на странице Управление доступом, которую можно открыть из меню проекта УправлениеПользователи.

Новое приглашение пользователя

Also, besides adding an existing user to the project, it is possible to invite new ones. Any new user will be created immediately, but the account will remain inactive until signing in with a link in the invitation sent via an e-mail. It is not required to have any site-wide privileges in order to do so, access management permission on the project’s scope (e.g. a membership in the Administration team) would be sufficient.

Подсказка

Если приглашённый пользователь пропустил срок действия приглашения, он может установить свой пароль, используя приглашённый адрес электронной почты в форме сброса пароля, поскольку учётная запись уже создана.

Добавлено в версии 3.11: Есть возможность повторной отправки email с пользовательскими приглашениями (аннулирование любого ранее отправленного приглашения).

Такие же приглашения доступны для всего сайта из management interface на вкладке Пользователи.

Блокирование пользователей

Добавлено в версии 4.7.

Если некоторые пользователи плохо ведут себя в вашем проекте, у вас есть возможность заблокировать их вклад. Заблокированный пользователь по-прежнему сможет видеть проект, если у него есть соответствующие разрешения, но он не сможет вносить свой вклад.

Управление разрешениями для каждого проекта

Установите Защищённый или Частный тип доступа к вашим проектам и управляйте пользователями отдельно для каждого проекта через интерфейс Weblate.

По умолчанию это не позволяет Weblate предоставлять доступ, предоставляемый Пользователям и Просматривающим default groups из-за собственной настройки этих групп. Это не мешает вам предоставлять права доступа к этим проектам в масштабах всего сайта, изменив группы по умолчанию, создав новую или создав дополнительные пользовательские настройки для отдельного компонента, как описано ниже в Настраиваемый контроль доступа.

One of the main benefits of managing permissions through the Weblate user interface is that you can delegate it to other users without giving them the superuser privilege. In order to do so, add them to the Administration team of the project.

Настраиваемый контроль доступа

Примечание

Эта функция недоступна на тарифном плане проектов, работающих по плану свободного ПО на облачном хостинге Weblate.

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

Самые мощные возможности системы контроля доступа Weblate пока доступны только через Django admin interface. Вы можете использовать его для управления разрешениями любого проекта. Вам не обязательно переключать на Пользовательский access control, чтобы использовать его. Однако для его использования у вас должны быть привилегии суперпользователя.

Если вас не интересуют детали реализации, и вы просто хотите создать достаточно простую конфигурацию на основе настроек по умолчанию, или у вас нет доступа ко всей установке Weblate (как на Hosted Weblate), обратитесь к разделу Простой контроль доступа.

Распространённые варианты конфигурации

В этом разделе содержится обзор некоторых распространённых настроек, которые могут вас заинтересовать.

Управление разрешениями по всему сайту

Чтобы управлять разрешениями сразу для всего экземпляра, добавьте пользователей в соответствующие группы default groups:

  • Пользователи (это делается по умолчанию с помощью automatic group assignment).

  • Рецензенты (если вы используете review workflow с выделенными рецензентами).

  • Управляющие (если вы хотите делегировать большую часть операций по управлению кому-то другому).

Вы должны держать все проекты настроенными как Публичные (смотреть раздел Управление доступом к проекту), иначе разрешения, предоставляемые членством в группах Пользователи и Рецензенты, не будут иметь никакого эффекта.

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

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

Особые разрешения для определённых языков, компонентов или проектов

Вы можете создавать собственные специальные группы для управления разрешениями для отдельных объектов, таких как языки, компоненты и проекты. Хотя эти группы могут предоставлять только дополнительные привилегии, вы не можете отменить разрешение, предоставленное группами для всего сайта или проекта, добавив другую пользовательскую группу.

Пример:

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

  1. Снимите разрешение на перевод чешского со всех пользователей. В настройках по умолчанию это можно сделать, изменив Пользователей default group.

    Группа Пользователи

    Выбор языка

    Как определено

    Языки

    Все, кроме чешского

  1. Добавлена специальная группа для чешских переводчиков.

    Группа Чешские переводчики

    Роли

    Опытные пользователи

    Выбор проекта

    Все публичные проекты

    Выбор языка

    Как определено

    Языки

    Чешский

  1. Добавьте пользователей, которым вы хотите предоставить разрешения, в эту группу.

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

Пользователи, роли, группы и разрешения

Модели аутентификации состоят из нескольких объектов:

Разрешение

Индивидуальное разрешение, определённое в самом Weblate. Разрешения нельзя назначать непосредственно пользователям: это можно сделать только через назначение ролей.

Роль

Роль определяет набор разрешений. Она позволяет использовать эти наборы повторно в разных местах, что упрощает их администрирование.

Пользователь

Пользователь может состоять в нескольких группах.

Группа

Группу соединяют роли, пользователей, и объекты аутентификации (проекты, языки, и списки компонентов).

graph auth { "User" -- "Group"; "Group" -- "Role"; "Role" -- "Permission"; "Group" -- "Project"; "Group" -- "Language"; "Group" -- "Components"; "Group" -- "Component list"; }

Примечание

Группа может не иметь назначенных ей ролей, в этом случае предполагается доступ к просмотру проекта любым желающим (смотреть ниже).

Доступ для просмотра проекта

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

Доступ для просмотра компонента

Доступ к не ограниченным компонентам пользователь может получить сразу, как только получит доступ к компонентам проекта (и будет иметь все разрешения, которые пользователь получил для проекта). Если включён ограниченный доступ, для доступа к компоненту потребуется явное разрешение на компонент (или на содержащий его список компонентов).

Область действия групп

Область действия разрешений, назначенных ролями в группах, применяется по следующим правилам:

  • Если группа указывает какой-либо Список компонентов, то все разрешения, предоставленные членам этой группы, предоставляются для всех компонентов в списках компонентов, прикреплённых к группе, и доступ без дополнительных разрешений предоставляется для всех проектов, в которых находятся эти компоненты. Компоненты и Проекты игнорируются.

  • Если в группе указаны какие-либо Компоненты, то все разрешения, данные членам этой группы, предоставляются для всех компонентов, присоединённых к группе, и доступ без дополнительных разрешений предоставляется для всех проектов, в которых находятся эти компоненты. Проекты игнорируются.

  • В противном случае, если группа указывает какие-либо Проекты, либо прямо перечислив их, либо установив Выбор проекта в значение типа Все публичные проекты, все эти разрешения применяются ко всем проектам, что фактически предоставляет одинаковые разрешения на доступ ко всем проектам unrestricted components.

  • Ограничения, накладываемые группой Языки, применяются отдельно, когда проверяется, имеет ли пользователь доступ к выполнению определённых действий. А именно, они применяются только к действиям, непосредственно связанным с самим процессом перевода, таким как рецензирование, сохранение переводов, добавление предложений и т.д.

Подсказка

Для автоматического включения всех языков или проектов используйте переключатели Выбор языка или Выбор проекта.

Пример:

Допустим, есть проект foo с компонентами: foo/bar и foo/baz и следующей группой:

Группа Испанские администраторы-рецензенты

Роли

Рецензирование строк, Управление репозиторием

Компоненты

foo/bar

Языки

Испанский

Члены этой группы будут иметь следующие разрешения (при условии использования ролей по умолчанию):

  • Общий (просмотровый) доступ ко всему проекту foo, включая оба компонента в нём: foo/bar и foo/baz.

  • Рецензирование строк в испанском переводе foo/bar (не в других местах).

  • Управление VCS для всего репозитория foo/bar, например, коммит ожидающий изменений, сделанных переводчиками для всех языков.

Автоматические прикрепления группы

В нижней части страницы редактирования Группа в Django admin interface, вы можете указать Автоматическое назначение групп, которое представляет собой список регулярных выражений, используемых для автоматического назначения вновь созданных пользователей в группу на основе их адресов электронной почты. Это назначение происходит только при создании учётной записи.

Наиболее распространённым вариантом использования этой функции является назначение всех новых пользователей в какую-либо группу по умолчанию. Для этого вы, вероятно, захотите сохранить значение по умолчанию (^.*$) в поле регулярного выражения. Другим вариантом использования этой опции может быть предоставление некоторых дополнительных привилегий сотрудникам вашей компании по умолчанию. Если предположить, что все они используют корпоративные адреса электронной почты в вашем домене, это можно сделать с помощью выражения вида ^.*@mycompany.com.

Примечание

При выполнении миграций автоматическое назначение для групп Пользователи и Просматривающие всегда пересоздаётся при переходе с одной версии Weblate на другую. В случае, если вы хотите его отключить, просто задайте для него регулярное выражение ^$ (которому не будет соответствовать ничего).

Примечание

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

Группы и роли по умолчанию

После установки создаётся набор групп по умолчанию (смотреть раздел Список групп).

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

Список привилегий и встроенных ролей

Область

Разрешение

Роли

Тарифный план (смотрите раздел Выставление счетов)

Просмотр платёжной информации

Administration, Billing

Изменения

Скачивание изменений

Administration

Комментарии

Публикация комментариев

Administration, Edit source, Power user, Review strings, Translate

Удаление комментариев

Administration

Компонент

Правка параметров компонентов

Administration

Блокировка компонента от перевода

Administration

Глоссарий

Добавление записей в глоссарий

Administration, Manage glossary, Power user

Правка записей глоссария

Administration, Manage glossary, Power user

Удаление записей из глоссария

Administration, Manage glossary, Power user

Загрузка записей в глоссарий

Administration, Manage glossary, Power user

Автоматические предложения

Использовать автоматические предложения

Administration, Edit source, Power user, Review strings, Translate

Память переводов

Правка памяти переводов

Administration, Manage translation memory

Удаление памяти переводов

Administration, Manage translation memory

Проекты

Правка параметров проекта

Administration

Управление доступом к проекту

Administration

Отчёты

Скачивание отчётов

Administration

Снимки экрана

Добавление снимков экрана

Administration, Manage screenshots

Править снимок экрана

Administration, Manage screenshots

Удалить снимок экрана

Administration, Manage screenshots

Исходные строки

Правка дополнительных свойств строки

Administration, Edit source

Строки

Добавление новой строки

Administration

Удаление строки

Administration

Отказ от проверки

Administration, Edit source, Power user, Review strings, Translate

Правка строк

Administration, Edit source, Power user, Review strings, Translate

Рецензирование строк

Administration, Review strings

Правка строк, когда предложения являются обязательными

Administration, Review strings

Правка исходных строк

Administration, Edit source, Power user

Предложения

Принятие предложения

Administration, Edit source, Power user, Review strings, Translate

Добавление предложения

Administration, Edit source, Add suggestion, Power user, Review strings, Translate

Удаление предложения

Administration, Power user

Голосование за предложения

Administration, Edit source, Power user, Review strings, Translate

Переводы

Добавление языка для перевода

Administration, Power user, Manage languages

Производство автоматического перевода

Administration, Automatic translation

Удаление существующего перевода

Administration, Manage languages

Скачать файл перевода

Administration, Edit source, Access repository, Power user, Review strings, Translate, Manage languages

Добавление нескольких языков для перевода

Administration, Manage languages

Загрузки

Задание автора загружаемого перевода

Administration

Перезапись существующих строк при загрузке новых

Administration, Edit source, Power user, Review strings, Translate

Загрузка переводов

Administration, Edit source, Power user, Review strings, Translate

СКВ (VCS)

Доступ к внутреннему репозиторию

Administration, Access repository, Power user, Manage repository

Коммит изменений во внутренний репозиторий

Administration, Manage repository

Отправка изменений из внутреннего репозитория

Administration, Manage repository

Сброс изменений во внутреннем репозитории

Administration, Manage repository

Просмотр расположения вышестоящего репозитория

Administration, Access repository, Power user, Manage repository

Обновление внутреннего репозитория

Administration, Manage repository

Привилегии для всего сайта

Использование интерфейса управления

Добавление новых проектов

Добавление определений языка

Управление определениями языков

Управление группами

Управление пользователями

Управление ролями

Управление объявлениями

Управление памятью переводов

Управление списками компонентов

Примечание

Привилегии для всего сайта не предоставляются никаким умолчательным ролям. Они мощны и достаточно близки к статусу суперпользователя. Большинство из них влияют на все проекты вашей установки Weblate.

Список групп

Следующие группы будут созданы после установки (или после выполнения команды setupgroups) и вы можете их изменять. Однако, если вы удалите или переименуете их, то они могут быть воссозданы в процессе миграции на новую версию.

Гости

Определяет разрешения для неаутентифицированных пользователей.

Эта группа содержит только анонимных пользователей (смотрите параметр ANONYMOUS_USER_NAME).

Вы можете удалить роли из этой группы, чтобы ограничить разрешения для неаутентифицированных пользователей.

Роли по умолчанию: Добавление предложений, Доступ к репозиторию

Просматривающие

Эта роль обеспечивает видимость публичных проектов для всех пользователей. По умолчанию, членами этой группы являются все пользователи.

По умолчанию, automatic group assignment делает так, что все новые учётные записи при регистрации становятся членами этой группы.

Роли по умолчанию: нет

Пользователи

Стандартная группа для всех пользователей.

По умолчанию, automatic group assignment делает так, что все новые учётные записи при регистрации становятся членами этой группы.

Роли по умолчанию: Опытный пользователь

Рецензенты

Группа для рецензентов (смотрите раздел Рабочие процессы перевода).

Роли по умолчанию: Рецензирование строк

Управляющие

Группа для администраторов.

Роли по умолчанию: Администрирование

Предупреждение

Никогда не удаляйте предопределённые в Weblate группы и пользователей, поскольку это может привести к неожиданным проблемам! Если они вам не нужны, вы можете просто удалить из них все привилегии.

Дополнительные ограничения доступа

Если вы хотите использовать вашу установку Weblate менее публично, т.е. допускать новых пользователей только по приглашениям, это можно сделать, настроив Weblate таким образом, чтобы доступ к нему имели только известные пользователи. Для этого вы можете установить REGISTRATION_OPEN в False, чтобы предотвратить регистрацию любых новых пользователей, и установить REQUIRE_LOGIN в /.*, чтобы требовать входа в систему для доступа ко всем страницам сайта. В принципе, это способ заблокировать установку Weblate.

Подсказка

Вы можете использовать встроенные :ref:`invitations <manage-acl>`для добавления новых пользователей.

Проекты перевода

Организация переводов

Weblate организует переводимое содержимое проектов/компонентов из системы контроля версий в древовидную структуру.

  • Объектом нижнего уровня является проект, который должен содержать все связанные переводы (например, перевод приложения различных версий и/или сопроводительную документацию).

  • На уровне выше располагается компонент, который фактически и является компонентом для перевода, для которого вы определяете используемый репозиторий системы контроля версий и маску файлов для перевода.

  • Ещё выше компонента находятся отдельные переводы, которые Weblate обрабатывает автоматически, как только файлы перевода (соответствующие маске файлов, определённой в конфигурации компонента), появляются в репозитории системы контроля версий.

Weblate поддерживает широкий набор форматов перевода (как двуязычных, так и одноязычных), поддерживаемых набором инструментов Translate Toolkit, смотрите раздел Поддерживаемые форматы файлов.

Примечание

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

Добавление проектов и компонентов перевода

Изменено в версии 3.2: В Weblate’е появился интерфейс для добавления проектов и компонентов, так что вам больше не нужно использовать для этого административный интерфейс Django.

Изменено в версии 3.4: Теперь процесс добавления компонентов состоит из нескольких шагов, с автоматическим обнаружением большинства параметров.

В зависимости от ваших разрешений вы можете создавать новые проекты и компоненты перевода. Для пользователей с разрешением Добавление новых проектов их создание всегда разрешено, а если ваш экземпляр использует тарифные планы (как, например, https://hosted.weblate.org/, смотрите раздел Выставление счетов), вы также можете создавать их на основе разрешений из вашего плана, установленных учётной записью пользователя, управляющего тарификацией.

Вы можете просмотреть свой текущий тарифный план на отдельной странице:

_images/user-billing.png

Создание проекта можно инициировать оттуда или из меню на панели навигации. Чтобы завершить добавление проекта перевода, заполните основную информацию о нем:

_images/user-add-project.png

После создания проекта вы попадаете непосредственно на страницу проекта:

_images/user-add-project-done.png

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

Из системы контроля версий

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

Из уже существующего компонента

Создать дополнительный компонент на основе уже существующего, только с другими файлами.

Дополнительная ветка

Создать дополнительный компонент на основе уже существующего, только для другой ветки.

Загрузить файлы перевода

Загрузить файлы перевода в Weblate в случае, если у вас нет системы контроля версий или вы не хотите интегрировать её с Weblate. Позже вы сможете обновить содержимое через веб-интерфейс или REST API Weblate’а.

Перевести документ

Загрузите отдельный документ или файл перевода и переведите его.

Начать с нуля

Создать пустой проект перевода и добавить строки вручную.

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

Сначала вам нужно указать наименование и расположение репозитория:

_images/user-add-component-init.png

На следующей странице вам будет представлен список обнаруженных переводимых ресурсов:

_images/user-add-component-discovery.png

На последнем этапе просмотрите информацию о компоненте перевода и укажите дополнительные сведения:

_images/user-add-component.png

Настройки проекта

Создайте проект перевода, а затем добавьте в него новый компонент, в котором вы и будете непосредственно делать перевод. Проект здесь похож на полку, на которую укладываются реальные переводы. Все компоненты одного проекта разделяют между собой общие предложения и глоссарий; переводы также автоматически распространяются во все компоненты одного проекта (если только оно не отключено в настройках компонентов), смотрите раздел Память переводов.

Это основные атрибуты для настройки, они предоставляют переводчикам информацию о проекте:

Название проекта

Более подробное наименование проекта для отображения.

URL-плашка

Название проекта, подходящее для указания его в URL-адресе.

Веб-сайт проекта

URL-адрес, по которому переводчики могут найти дополнительную информацию о проекте.

Это обязательный параметр, если он не отключён с помощью WEBSITE_REQUIRED.

Инструкции для переводчиков

Текст, описывающий процесс локализации в проекте, и любая другая информация, полезная для переводчиков. Для форматирования текста или вставки ссылок можно использовать Markdown.

Задать заголовок «Language-Team»

Должен ли Weblate управлять заголовком Language-Team (сейчас это единственная особая возможность для GNU gettext).

Использовать совместную память переводов

Использовать ли совместно используемую память переводов, подробнее смотрите в разделе Совместная память переводов.

Значение по умолчанию можно установить параметром DEFAULT_SHARED_TM.

Вносить вклад в совместную память переводов

Помещать ли переводы в совместно используемую память переводов, подробнее смотрите в разделе Совместная память переводов.

Значение по умолчанию можно установить параметром DEFAULT_SHARED_TM.

Управление доступом

Настройка контроля доступа для каждого проекта, подробнее смотрите в разделе Управление доступом к проекту.

Значение по умолчанию можно изменить установкой параметра DEFAULT_ACCESS_CONTROL.

Включить рецензии

Включение процесса рецензирования переводов, смотрите раздел Выделенные рецензенты.

Включить рецензии исходных строк

Включение процесса рецензирования исходных строк, смотрите раздел Рецензирование исходных строк.

Включить обработчики

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

Псевдонимы языка

Определяет отображение кодов языков при импорте переводов в Weblate. Используйте этот параметр, если коды языков в ваших репозиториях не согласуются друг с другом, а вы хотите, чтобы в Weblate они были представлены единообразно; или если вы хотите использовать нестандартные имена файлов перевода.

Типовым случаем использования псевдонимов, например, является отображение американского английского языка на английский: en_US:en

Несколько отображений должны разделяться запятой: en_GB:en,en_US:en

Использование нестандартного кода: ru_FOO:ru

Подсказка

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

Настройки компонента

Компонент — это группировка каких-то сущностей для перевода. Вы вводите расположение репозитория системы контроля версий и маску файлов, определяющую, какие файлы вы хотите переводить, а Weblate автоматически извлекает код из этого репозитория и находит все соответствующие файлы для перевода.

Некоторые примеры типовых конфигураций можно найти в разделе Поддерживаемые форматы файлов.

Примечание

Рекомендуется держать размер компонентов перевода в разумных пределах — разбивайте перевод по любому критерию, который в вашем случае имеет смысл (по отдельным приложениям или дополнениям, по главам книг или по веб-сайтам).

Weblate легко справляется с переводами с 10000 строк, но с такими объёмами труднее разделять работу между несколькими переводчиками и координировать их действия.

Если определение языка для перевода отсутствует, создаётся пустое определение с именем вида «ru_RU (generated)». Вы должны скорректировать определение и сообщить об этом авторам Weblate, чтобы недостающие языки могли быть включены в следующий выпуск.

Компонент содержит все важные параметры для работы с системой контроля версий, а также для получения из неё переводов:

Название компонента

Подробное наименование компонента, используемое для его отображения.

Плашка компонента

Название компонента, подходящее для указания его в URL-адресе.

Проект компонента

Настройки проекта, которому принадлежит компонент.

Система контроля версий

Используемая система контроля версий, подробнее смотрите в разделе Интеграция с системой контроля версий.

Репозиторий исходного кода

Репозиторий системы контроля версий, из которого извлекаются изменения.

См.также

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

Подсказка

Это может быть либо реальный URL-адрес системы контроля версий, либо адрес вида weblate://проект/компонент, указывающий на то, что репозиторий должен совместно использоваться с другим компонентом. Для получения более подробной информации обратитесь к разделу Внутренние URL-адреса Weblate.

URL для отправки в репозиторий

URL-адрес репозитория, используемый для отправки изменений. Этот параметр используется только для систем контроля версий Git и Mercurial и если он пуст, поддержка отправки в них отключается.

Это не используется для связанных репозиториев, будут применены параметры из связанного компонента.

См.также

Для получения более подробной информации о том, как указывать URL-адрес репозитория, смотрите раздел Доступ к репозиториям, а для получения более подробной информации об отправке изменений из Weblate’а обратитесь к разделу Отправка изменений из Weblate’а.

Просмотрщик репозитория

URL-адрес браузера репозитория, используемый для отображения исходных файлов (местоположения используемых сообщений). Если пустой, такие ссылки генерироваться не будут. Вы можете использовать шаблонную разметку.

Например, для ссылок на GitHub, используйте что-то наподобие: https://github.com/WeblateOrg/hello/blob/{{branch}}/{{filename}}#L{{line}}

В случае, если ваши пути указываются относительно другого каталога (путь содержит ..), вы можете удалить ведущий каталог фильтром parentdir (смотрите раздел Шаблонная разметка): https://github.com/WeblateOrg/hello/blob/{{branch}}/{{filename|parentdir}}#L{{line}}

URL экспортированного репозитория

URL-адрес, куда экспортируются изменения, сделанные в Weblate. Он имеет значение, если не используется непрерывная локализация или в том случае, когда есть необходимость ручного слияния изменений. Для автоматизации этого процесса для Git-репозиториев вы можете использовать экспортер Git.

Ветка репозитория

Какую ветку извлекать из системы контроля версий и где искать переводы.

Это не используется для связанных репозиториев, будут применены параметры из связанного компонента.

Ветка для отправки

Ветка, в которую отправлять изменения, оставьте пустой для использования параметра Ветка репозитория.

Это не используется для связанных репозиториев, будут применены параметры из связанного компонента.

Примечание

В настоящее время параметр поддерживается только для Git’а, GitLab’а и GitHub’а, для интеграций с другими системами контроля версий он игнорируется.

Маска файла

Маска файлов для перевода, включая путь. Она должна включать в себя один символ *, который заменяется на код языка (для получения информации о том, как он обрабатывается, смотрите раздел Определение языков). В случае, если в вашем репозитории содержится более одного файла перевода (например, несколько доменов gettext), вам необходимо создать компонент для каждого из них.

Например, po/*.po или locale/*/LC_MESSAGES/django.po.

В случае, если имя вашего файла содержит такие специальные символы, как [ или ], они должны быть экранированы как [[] и []].

Одноязычный базовый файл

Базовый файл, содержащий определения строк для одноязычных компонентов.

Правка базового файла

Разрешать ли редактирование базового файла для одноязычных компонентов.

Файл промежуточного языка

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

When set, the source strings are based on this file, but all other languages are based on Одноязычный базовый файл. In case the string is not translated into the source language, translating to other languages is prohibited. This provides Контроль качества исходных строк.

Шаблон для новых переводов

Базовый файл, используемый для генерирования новых переводов, например, .pot файл для gettext.

Подсказка

In many monolingual formats Weblate starts with empty file by default. Use this in case you want to have all strings present with empty value when creating new translation.

Формат файла

Формат файла перевода, смотрите также поддерживаемые форматы файлов.

Адрес для сообщения об ошибке в исходной строке

Адрес электронной почты, используемый для отправки сообщений об ошибках в исходных строках. На этот адрес также будут отсылаться уведомления о любых сделанных в Weblate комментариях к исходной строке.

Разрешить распространение перевода

Вы можете отключить распространение переводов на этот компонент из других компонентов этого же проекта. Это сильно зависит от того, что вы переводите, иногда желательно использовать разные переводы для одинаковых строк.

Обычно для одноязычных переводов рекомендуется отключать этот параметр, если только вы не используете во всем проекте одни и те же идентификаторы для одинаковых строк.

Значение по умолчанию может быть изменено параметром DEFAULT_TRANSLATION_PROPAGATION.

Включить предложения

Принимать ли предложения по переводу этого компонента.

Голосование по предложению

Включает голосование за предложения, смотрите раздел Голосование по предложению.

Автоматическое принятие предложений

Автоматически принимать предложения, за которые проголосовали, смотрите раздел Голосование по предложению.

Флаги перевода

Настройка проверок качества и другого поведения Weblate’а, смотрите раздел Настройка поведения с помощью флагов.

Принудительные проверки

Список проверок, которые нельзя проигнорировать, смотрите раздел Принудительные проверки.

Примечание

Добавление проверки в качестве принудительной не включает её автоматически; вам всё равно придётся включить её с помощью настроек поведения во флагах перевода или дополнительной информации об исходных строках.

Лицензия перевода

Лицензия на перевод (не обязательно должна совпадать с лицензией на исходный код).

Соглашение участника

Пользовательское соглашение, которое должно быть одобрено, прежде чем пользователь сможет переводить этот компонент.

Добавление нового перевода

Как обрабатывать запросы на создание новых языков. Доступные варианты:

Связаться с кураторами

Пользователь может выбрать желаемый язык, а кураторы проекта получат об этом уведомление. Добавление (или не добавление) языка в репозиторий зависит от них.

Указать URL на инструкции по переводу

Пользователю предоставляется ссылка на страницу, которая описывает процесс начала новых переводов. Используйте этот вариант в случае, если вам требуется более формальный процесс (например, формирование команды людей перед началом фактического перевода).

Создать новый язык

Пользователь может выбрать язык и Weblate автоматически создаст для него файл, так что можно сразу начинать переводить.

Запретить добавление новых переводов

У пользователя не будет возможности начать новый перевод.

Подсказка

Администраторы проекта могут добавлять новые переводы, даже если это отключено здесь, когда это возможно (либо Шаблон для новых переводов, или же формат файла поддерживает запуск с пустого файла).

Управление строками

Добавлено в версии 4.5.

Настраивает, смогут ли пользователи добавлять новые и удалять существующие строки из Weblate. В зависимости от вашего рабочего процесса (как именно должны добавляться новые строки) вы можете включить этот параметр или оставить отключённым.

В двуязычных форматах строки обычно извлекаются из исходного кода (например, с помощью xgettext) и добавление новых строк через Weblate должно быть отключено (они всё равно удалятся, когда вы в следующий раз будете обновлять свои файлы перевода). В Weblate вы можете управлять строками для каждого перевода отдельно, это не будет принудительно поддерживать набор исходных строк для всех языков одинаковым.

Для одноязычных форматов управление строками происходит только на исходном языке, в переводах они добавляются и удаляются автоматически. В файлах перевода строки появляются только после их фактического перевода.

Стиль кода языка

Настройте код языка, используемый для генерации имени файла для переводов, созданных Weblate.

Стиль слияния

Вы можете настроить обработку обновлений из вышестоящего репозитория. Реализация зависит от системы управления версиями, см. Интеграция с системой контроля версий.

Сменить базу

Перебазирует коммиты Weblate поверх вышестоящего репозитория при обновлении. Это обеспечивает чистую историю без дополнительных коммитов слияния.

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

Возможно, вам потребуется включить принудительную отправку, выбрав: ref: vcs-git-force-push как: ref:` component-vcs`, особенно при отправке в другую ветку.

Объединить

Upstream repository changes are merged into Weblate one. This setting utilizes fast-forward when possible. This is the safest way, but might produce a lot of merge commits.

Слияние без fast-forward

Upstream repository changes are merged into Weblate one with doing a merge commit every time (even when fast-forward would be possible). Every Weblate change will appear as a merge commit in Weblate repository.

Значение по умолчанию можно изменить установкой параметра DEFAULT_MERGE_STYLE.

Commit, add, delete, merge, add-on, and merge request messages

Сообщение, используемое при коммите перевода, смотрите раздел Шаблонная разметка.

Default value can be changed by DEFAULT_ADD_MESSAGE, DEFAULT_ADDON_MESSAGE, DEFAULT_COMMIT_MESSAGE, DEFAULT_DELETE_MESSAGE, DEFAULT_MERGE_MESSAGE, DEFAULT_PULL_MESSAGE.

Отправлять при коммите

Должны ли закоммиченные изменения автоматически отправляться в вышестоящий репозиторий. Когда этот параметр включён, отправка инициируется после того, как Weblate закоммитит изменения в свой базовом репозиторий (смотрите отложенные коммиты). Для реального включения функции отправки также должен быть настроен URL для отправки в репозиторий.

Возраст изменений для коммита

Устанавливает, сколько времени (в часах) должно пройти с момента коммита изменений фоновым заданием или commit_pending. Все изменения в компоненте коммитятся, если есть хотя бы одно изменение старше этого периода.

Значение по умолчанию можно изменить установкой параметра COMMIT_PENDING_HOURS.

Подсказка

Существуют и другие ситуации, когда незавершённые изменения могут быть зафиксированы, см Отложенные коммиты.

Блокировать при ошибке

Блокирует компонент (и связанные компоненты, смотреть раздел Внутренние URL-адреса Weblate) при первой неудачной отправке или слиянии в его вышестоящий репозиторий или извлечения из него. Это позволяет избежать добавления новых конфликтов, которые пришлось бы разрешать вручную.

Компонент будет автоматически разблокирован, как только в репозитории не останется ошибок.

Исходный язык

Язык, используемый для исходных строк. Изменяйте этот параметр, если вы переводите не с английского.

Подсказка

В случае, если вы переводите двуязычные файлы с английского языка, но хотите иметь возможность делать исправления также и в английском переводе, выберите Английский (разработчик), чтобы избежать конфликта между названием исходного языка и существующим переводом.

Для одноязычных переводов в данном случае можно использовать промежуточный перевод, смотрите раздел Файл промежуточного языка.

Языковой фильтр

Регулярное выражение, используемое для фильтрации перевода при поиске файлов по маске. Это можно использовать для ограничения списка управляемых Weblate’ом языков.

Примечание

Вам необходимо перечислить коды языков в том же виде, в котором они встречаются в именах файлов.

Несколько примеров фильтров:

Описание фильтра

Регулярное выражение

Только выбранные языки

^(cs|de|es)$

Исключить языки

^(?!(it|fr)$).+$

Выбрать только двубуквенные языковые коды

^..$

Исключить неязыковые файлы

^(?!(blank)$).+$

Включить все файлы (по умолчанию)

^[^.]+$

Регулярное выражение вариантов

Регулярное выражение, используемое для определения вариантов строки, смотрите раздел Варианты строк.

Примечание

Most of the fields can be edited by project owners or administrators, in the Weblate interface.

Приоритет

Переводчикам вначале предлагаются компоненты с большим приоритетом.

Ограниченный доступ

По умолчанию компонент виден любому, кто имеет доступ к проекту, даже если этот человек не может выполнить в компоненте никаких изменений. Это облегчает поддержание согласованности перевода в рамках проекта.

Ограничение доступа на уровне компонента или списка компонентов накладывает разрешение на доступ к компоненту, независимо от разрешений на уровне проекта. Вам придётся явно предоставить доступ к нему. Это можно сделать, предоставив доступ новой группе пользователей и включив в неё пользователей, или используя стандартные группы управления доступом настраиваемый или частный.

Значение по умолчанию можно изменить установкой параметра в DEFAULT_RESTRICTED_COMPONENT.

Подсказка

Это также относится и к администраторам проектов — пожалуйста, убедитесь, что после переключения статуса вы не потеряете доступ к компоненту.

Разделяемые компоненты

Вы можете выбрать дополнительные проекты в которых какой-либо компонент будет отображаться. Полезно для разделяемых библиотек, которые используются в нескольких проектах.

Примечание

Такое разделение компонентов между проектами не влияет на контроль доступа к ним. Оно только делает их видимыми при просмотре других проектов. Пользователям по-прежнему необходим доступ к компоненту, чтобы просмотреть или перевести его.

Использовать в качестве глоссария

Добавлено в версии 4.5.

Позволяет использовать данный компонент в качестве глоссария. Вы можете настроить, как именно он будет отображаться, с помощью параметра «Цвет глоссария».

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

Для словарей также рекомендуется включить управление строками, чтобы в в них можно было добавлять новые слова.

См.также

Глоссарий

Цвет глоссария

Цвет отображения для названия глоссария, используемый в списке терминов, найденных в переводе.

Шаблонная разметка

В нескольких местах, где необходима отрисовка текста, Weblate использует простой язык разметки. Он основан на языке шаблонов Django, так что он может быть достаточно мощным.

В настоящее время он используется:

В шаблонах компонентов доступны следующие переменные:

{{ language_code }}

Код языка

{{ language_name }}

Название языка

{{ component_name }}

Название компонента

{{ component_slug }}

Плашка компонента

{{ project_name }}

Название проекта

{{ project_slug }}

Плашка проекта

{{ url }}

URL-адрес перевода

{{ filename }}

Имя файла перевода

{{ stats }}

Статистика перевода, у неё есть дополнительные атрибуты, примеры ниже.

{{ stats.all }}

Общее количество строк

{{ stats.fuzzy }}

Количество строк, требующих рецензирования

{{ stats.fuzzy_percent }}

Процент строк, требующих рецензирования

{{ stats.translated }}

Количество переведённых строк

{{ stats.translated_percent }}

Процент переведённых строк

{{ stats.allchecks }}

Количество строк с неудачными проверками

{{ stats.allchecks_percent }}

Процент строк с неудачными проверками

{{ author }}

Автор текущего коммита, доступна только в области действия коммита.

{{ addon_name }}

Имя исполняемой в данный момент надстройки, доступна только в сообщении о коммите надстройки.

Следующие переменные доступны в шаблонах браузера репозитория или редактора:

{{branch}}

текущая ветка

{{line}}

строка в файле

{{filename}}

имя файла, также с помощью фильтра parentdir вы можете удалить ведущие части, например {{filename|parentdir}}

Вы можете объединять их с фильтрами:

{{ component|title }}

Можете использовать условия:

{% if stats.translated_percent > 80 %}Well translated!{% endif %}

Для замены символов доступен дополнительный тег:

{% replace component "-" " " %}

Вы можете объединить его с фильтрами:

{% replace component|capfirst "-" " " %}

Также есть дополнительный фильтр для работы с именами файлов:

Directory of a file: {{ filename|dirname }}
File without extension: {{ filename|stripext }}
File in parent dir: {{ filename|parentdir }}
It can be used multiple times:  {{ filename|parentdir|parentdir }}

…и другие возможности шаблонов Django.

Скорость импорта

Извлечение из репозитория системы контроля версий и импорт переводов в Weblate может быть длительным процессом, в зависимости от размера ваших переводов. Вот несколько советов:

Оптимизация настроек

Конфигурация по умолчанию полезна для тестирования и отладки Weblate, в то же время для установки в рабочую среду в неё необходимо внести некоторые коррективы. Многие из параметров довольно сильно влияют на производительность. Для получения более подробной информации обратитесь к разделу Рабочая среда, особенно обратите внимание на следующие темы:

Проверка ограничения по ресурсам

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

  • Проверьте объём свободной памяти, наличие кэшированных операционной системой файлов перевода значительно повысит производительность.

  • Если нужно обработать множество строк, дисковые операции могут стать узким местом — диск насилуется как Weblate’ом, так и базой данных.

  • Улучшить производительность фоновых задач могут помочь дополнительные ядра процессора (смотрите раздел Фоновые задачи с использованием Celery).

Отключение ненужных проверок

Некоторые проверки качества могут быть довольно дорогими, и если в них нет необходимости, при импорте можно сэкономить некоторое время, если их пропустить. Информацию по их настройке смотрите в описании параметра CHECK_LIST.

Автоматическое создание компонентов

Если в вашем проекте есть куча файлов перевода (например, различные домены gettext или части разных Android приложений), вы можете захотеть импортировать их автоматически. Этого можно сделать либо из командной строки с помощью команд import_project или import_json, либо с помощью установки надстройки Обнаружение компонентов.

Для использования надстройки вам сначала нужно создать компонент для одного файла перевода (выберите тот, который с наименьшей вероятностью в будущем будет переименован или удалён), и установить надстройку в этот компонент.

При использовании команд управления вам необходимо создать проект, который будет содержать все компоненты, а затем выполнить команду import_project или import_json.

Определение языков

Для правильного представления различных переводов необходима информация о названии языка, направлении текста, определения форм множественного числа и код языка.

Разбор кодов языков

При разборе переводов Weblate пытается сопоставить код языка (обычно по ISO 639-1) из Маска файла с любым существующим объектом языка.

Дальнейшую настройку этого сопоставления на уровне проекта можно осуществить с помощью псевдонимов языков.

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

  • Регистронезависимый поиск.

  • Нормализация подчёркиваний и дефисов.

  • Поиск по встроенным псевдонимам языка.

  • Поиск по названию языка.

  • Игнорирование кода страны по умолчанию для данного языка — выбором ru вместо ru_RU.

Если и это также не получится, будет создано новое определение языка с использованием настроек по умолчанию (направление текста слева направо, одна форма множественного числа). Такой автоматически созданный язык с кодом xx_XX будет иметь имя xx_XX (generated). Возможно, позже вы захотите изменить его в интерфейсе администратора (смотрите раздел Изменение определений языка) и сообщить об этом в систему отслеживания ошибок (смотрите раздел Как внести свой вклад в Weblate), чтобы соответствующее определение было добавлено в последующих выпусках Weblate.

Подсказка

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

Изменение определений языка

Вы можете изменить определения языка в интерфейсе по языкам (по адресу /languages/).

Во время редактирования убедитесь, что все поля заполнены правильно (особенно формы множественного числа и направление текста), иначе переводчики не смогут правильно редактировать эти переводы.

Встроенные определения языков

Определения для около 600 языков включены в сам Weblate и этот список расширяется с каждым релизом. Каждый раз, когда Weblate обновляется (точнее, каждый раз, когда выполняется weblate migrate, смотреть также generic-upgrade-instructions) база данных языков также обновляется и в неё добавляются все определения языков, поставляемые с Weblate.

Это можно отключить, отключив параметр UPDATE_LANGUAGES. Вы также можете принудительно обновить базу данных, чтобы она соответствовала встроенной БД Weblate с помощью setuplang.

Неоднозначные коды языков и макроязыки

In many cases it is not a good idea to use macrolanguage code for a translation. The typical problematic case might be Kurdish language, which might be written in Arabic or Latin script, depending on actual variant. To get correct behavior in Weblate, it is recommended to use individual language codes only and avoid macrolanguages.

Определение языков

Каждый язык состоит из следующих полей:

Код языка

Код, идентифицирующий язык. Weblate предпочитает двухбуквенные коды, как они определены в ISO 639-1, но для языков, для которых нет двухбуквенных кодов, использует коды ISO 639-2 или ISO 639-3. Также он может поддерживать расширенные коды, определённые в BCP 47.

Название языка

Видимое название языка. Названия языков, включенных в Weblate, также локализуются в зависимости от языка пользовательского интерфейса.

Направление текста

Определяет, идёт ли запись в языке справа налево или слева направо. Для большинства языков это свойство корректно определяется автоматически.

Количество форм множественного числа

Количество используемых в языке форм множественного числа.

Формула множественного числа

Совместимая с Gettext формула множественного числа, используемая для определения того, какая форма множественного числа используется для данного количества.

Добавление новых переводов

Изменено в версии 2.18: В версиях до 2.18 поведение добавления новых переводов зависело от формата файла.

Weblate может автоматически начинать новый перевод для всех форматов файлов.

Некоторые форматы ожидают, что они будут начинаться с пустого файла и в него будут включены только переведённые строки (например, Строковые ресурсы Android), в то время как другие ожидают, что в файле будут присутствовать все ключи (например, GNU gettext). Форматы на основе документов (например, Формат OpenDocument) начинаются с копии исходного документа и всех строк, помеченных как «На правку». В некоторых ситуациях это на самом деле зависит не от формата, а от фреймворка, который вы используете для работы с файлами перевода (например, с файлами JSON).

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

Если шаблон для новых переводов не задан и формат файла поддерживает его, то создаётся пустой файл, в который будут добавляться новые строки по мере их перевода.

Параметр «Стиль кода языка» позволяет вам настраивать код языка, используемый в именах сгенерированных файлов:

Умолчание, основанное на формате файла

Зависит от формата файла, для большинства форматов используется стиль POSIX.

Стиль POSIX, использующий подчёркивание как разделитель

Обычно используется gettext’ом и связанными с ним инструментами, выдаёт коды языков вида pt_BR.

Стиль POSIX, использующий подчеркивание как разделитель и включающий код страны

Код языка в стиле POSIX, включающий код страны, даже если в этом нет необходимости (например, ru_RU).

Стиль BCP, использующий в качестве разделителя дефис

Обычно используется на веб-платформах, выдаёт коды языков вида pt-BR.

Стиль BCP, использующий в качестве разделителя дефис и включающий код страны

Код языка в стиле BCP, включающий код страны, даже если в этом нет необходимости (например, ``ru-RU`).

Стиль Android

Используется только в приложениях для Android, выдаёт коды языков вида pt-rBR.

Стиль Java

Используется Java — по сути это тот же BCP, но с устаревшими кодами для китайского языка.

Linux style

Локали, используемые в Linux, используют устаревшие коды для обозначения китайского языка и стиля POSIX.

В дополнение к этому, любое отображение, определённое как псевдоним языка, применяется в обратном направлении.

Примечание

Weblate распознаёт любой из этих стилей при разборе файлов перевода, вышеуказанные настройки влияют только на то, в каком стиле создавать новые файлы.

Непрерывная локализация

Weblate строит такую инфраструктуру, чтобы ваш перевод непрерывно следовал за разработкой. Таким образом, переводчики могут работать над переводами всё время разработки, вместо того, чтобы работать с огромным количеством нового текста непосредственно перед выпуском.

См.также

В разделе «Интеграция с Weblate» на базовом уровне описывается, как интегрировать ваш процесс разработки с Weblate.

Процесс следующий:

  1. Разработчики вносят изменения и отправляют их в репозиторий системы контроля версий.

  2. По необходимости обновляются файлы перевода (это зависит от формата файла, смотрите вопрос Почему Weblate до сих пор показывает старые строки перевода, хотя я уже обновил шаблон?).

  3. Weblate извлекает изменения из репозитория системы контроля версий, смотрите раздел Обновление репозиториев.

  4. Как только Weblate обнаруживает изменения в переводах, он уведомляет об этом переводчиков в соответствии с настройками их подписок.

  5. Переводчики присылают переводы через веб-интерфейс Weblate, или загружают файлы, изменённые ими в автономном режиме.

  6. После завершения работы переводчиков Weblate коммитит изменения в локальный репозиторий (смотрите раздел Отложенные коммиты) и отправляет их обратно, если у него есть на это разрешение (смотрите раздел Отправка изменений из Weblate’а).

digraph translations { graph [fontname = "sans-serif", fontsize=10]; node [fontname = "sans-serif", fontsize=10, margin=0.1, height=0]; edge [fontname = "sans-serif", fontsize=10]; "Developers" [shape=box, fillcolor="#144d3f", fontcolor=white, style=filled]; "Translators" [shape=box, fillcolor="#144d3f", fontcolor=white, style=filled]; "Developers" -> "VCS repository" [label=" 1. Push "]; "VCS repository" -> "VCS repository" [label=" 2. Updating translations ", style=dotted]; "VCS repository" -> "Weblate" [label=" 3. Pull "]; "Weblate" -> "Translators" [label=" 4. Notification "]; "Translators" -> "Weblate" [label=" 5. Translate "]; "Weblate" -> "VCS repository" [label=" 6. Push "]; }

Обновление репозиториев

Вы должны каким-то образом настроить обновления репозиториев из их источников.

Всякий раз, когда Weblate обновляет репозиторий, будут срабатывать надстройки «после обновления», смотрите раздел Надстройки.

Предотвращение конфликтов слияния

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

Первый подход прост с одноязычными файлами — вы можете добавлять новые строки, не выходя из Weblate’а, и возложить на него любое редактирование файлов. Для двуязычных файлов, как правило, существует некий процесс извлечения сообщений из исходного кода для генерации файлов перевода. В некоторых случаях он может быть разбит на две части — одна, извлекающая, часть генерирует шаблон (например, файл POT gettext’а генерируется с помощью программы xgettext), а дальнейший процесс объединяет его с фактическими переводами (файлы PO gettext’а, обновляемые с помощью программы msgmerge). Второй шаг вы можете выполнить в Weblate’е, и он удостоверится, что до выполнения этой операции все отложенные изменения были зафиксированы.

Второй подход может быть достигнут путём использования REST API Weblate’а, заставляющего Weblate отправить на все отложенные изменения и заблокировать перевод, пока вы на своей стороне проводите изменения.

Скрипт для выполнения обновлений может выглядеть следующим образом:

# Lock Weblate translation
wlc lock
# Push changes from Weblate to upstream repository
wlc push
# Pull changes from upstream repository to your local copy
git pull
# Update translation files, this example is for Django
./manage.py makemessages --keep-pot -a
git commit -m 'Locale updates' -- locale
# Push changes to upstream repository
git push
# Tell Weblate to pull changes (not needed if Weblate follows your repo
# automatically)
wlc pull
# Unlock translations
wlc unlock

Если у вас есть несколько компонентов, совместно использующих один и тот же репозиторий, вам необходимо заблокировать их все по отдельности:

wlc lock foo/bar
wlc lock foo/baz
wlc lock foo/baj

Примечание

В примере используется клиент Weblate, который, чтобы иметь возможность управлять Weblate’ом удалённо, нуждается в некоторой настройке (в ключах API). Также вы можете решить задачу при помощи любого HTTP-клиента вместо wlc, к примеру, curl, смотрите раздел REST API Weblate’а.

См.также

Клиент Weblate

Автоматическое получение изменений из GitHub’а

Weblate поставляется со встроенной поддержкой GitHub’а.

Если вы используете Hosted Weblate, рекомендуемый подход заключается в установке приложения Weblate, таким образом вы получите правильную настройку без необходимости в дополнительной настройке. Также оно может быть использовано для отправки изменений обратно в GitHub.

Для получения уведомлений о каждой отправке в репозиторий GitHub, добавьте в настройки репозитория (Webhooks) веб-обработчик Weblate, как показано на изображении ниже:

_images/github-settings.png

Для заполнения адреса полезной нагрузки (поля Payload URL), добавьте к URL-адресу вашего Weblate’а суффикс /hooks/github/, например, для сервиса Hosted Weblate, это этот адрес будет таким: https://hosted.weblate.org/hooks/github/.

Остальные поля вы можете оставить с настройками по умолчанию (Weblate умеет обрабатывать оба типа содержимого и потребляет только событие push).

Автоматическое получение изменений из Bitbucket’а

Weblate поддерживает веб-обработчики Bitbucket, добавьте веб-обработчик, который срабатывает при отправке изменений в репозиторий, указав в качестве URL адрес вашей установки Weblate с суффиксом /hooks/bitbucket/ (например, https://hosted.weblate.org/hooks/bitbucket/).

_images/bitbucket-settings.png

Автоматическое получение изменений из GitLab’а

Weblate поддерживает обработчики GitLab’а, добавьте веб-обработчик проекта с адресом назначения, равным адресу вашей установки Weblate с суффиксом /hooks/gitlab/ (например, https://hosted.weblate.org/hooks/gitlab/).

Автоматическое получение изменений из Pagure

Добавлено в версии 3.3.

Weblate поддерживает обработчики Pagure, добавьте веб-обработчик проекта с адресом назначения, равным адресу вашей установки Weblate с суффиксом /hooks/pagure/ (например, https://hosted.weblate.org/hooks/pagure/). Добавлять этот адрес нужно в поле Activate Web-hooks, расположенное в блоке Project options:

_images/pagure-webhook.png

Автоматическое получение изменений из Azure Repos

Добавлено в версии 3.8.

Weblate поддерживает веб-обработчики Azure Repos, добавьте веб-обработчик для события Code pushed с адресом назначения, равным адресу вашей установки Weblate с суффиксом /hooks/azure/ (например, https://hosted.weblate.org/hooks/azure/). Добавлять этот адрес нужно в поле Service hooks, расположенное в блоке Project settings.

Автоматическое получение изменений из репозиториев Gitea

Добавлено в версии 3.9.

Weblate поддерживает веб-обработчики Gitea, добавьте веб-обработчик Gitea Webhook для события Push events с адресом назначения, равным адресу вашей установки Weblate с суффиксом /hooks/gitea/ (например, https://hosted.weblate.org/hooks/gitea/). Добавлять этот адрес нужно в поле Webhooks, расположенное в блоке Settings.

Автоматическое получение изменений из репозиториев Gitee

Добавлено в версии 3.9.

Weblate поддерживает веб-обработчики Gitee, добавьте веб-обработчик WebHook для события Push с адресом назначения, равным адресу вашей установки Weblate с суффиксом /hooks/gitee/ (например, https://hosted.weblate.org/hooks/gitee/). Добавлять этот адрес нужно в поле WebHooks, расположенное в блоке Management.

Автоматическое ночное обновление репозиториев

Weblate по ночам автоматически извлекает изменения из удалённых репозиториев для повышения производительности при последующем слиянии изменений. По желанию вы можете превратить его и в ночное слияние, включив параметр AUTO_UPDATE.

Отправка изменений из Weblate’а

Каждый компонент перевода может иметь настроенный URL-адрес для отправки (смотрите описание параметра URL для отправки в репозиторий), в этом случае Weblate будет способен отсылать изменения в удалённый репозиторий. Также Weblate может быть настроен на автоматическую отсылку изменений при каждом коммите (это поведение по умолчанию, смотрите описание параметра Отправлять при коммите). Если вы не хотите, чтобы изменения отправлялись автоматически, вы можете отправлять их вручную в разделе Обслуживание репозитория или через API командой wlc push.

Параметры отправки отличаются в зависимости от используемой системы контроля версий, подробнее об этом читайте в указанной главе.

Если вы не хотите отправлять изменения из Weblate напрямую, то поддерживается также создание запросов на извлечение для GitHub’а, GitLab’а, Запросы на слияние в Pagure или рецензий Gerrit. Вы можете активировать их, выбрав в конфигурациях компонента в качестве системы контроля версий GitHub, GitLab, Gerrit или Pagure соответственно.

В целом, для Git’а, GitHub’а и GitLab’а доступны следующие варианты:

Желаемая настройка

Система контроля версий

URL для отправки в репозиторий

Ветка для отправки

Без отправки

Git

пусто

пусто

Отправка напрямую

Git

URL-адрес SSH

пусто

Отправка в отдельную ветку

Git

URL-адрес SSH

Имя ветки

GitHub’овский запрос на извлечение из форка

GitHub pull requests

пусто

пусто

GitHub’овский запрос на извлечение из ветки

GitHub pull requests

URL-адрес SSH 1

Имя ветки

GitLab ’овский запрос на слияние из форка

Запросы на слияние в GitLab

пусто

пусто

GitLab ’овский запрос на слияние из ветки

Запросы на слияние в GitLab

URL-адрес SSH 1

Имя ветки

Pagure’вский запрос на слияние из форка

Запросы на слияние в Pagure

пусто

пусто

Pagure ’вский запрос на слияние из ветки

Запросы на слияние в Pagure

URL-адрес SSH 1

Имя ветки

1(1,2,3)

Может быть пустым в случае, если репозиторий исходного кода поддерживает отправку изменений.

Примечание

Также вы можете включить автоматическую отправку изменений после коммитов Weblate’а, это можно сделать установкой параметра Отправлять при коммите.

См.также

Для настройки ключей SSH смотрите раздел Доступ к репозиториям, а для получения информации о том, когда Weblate решает закоммитить изменения — раздел Отложенные коммиты.

Защищённые ветки

Если вы используете Weblate на защищённой ветке, вы можете настроить его на использование запросов на извлечение и выполнение рецензирования переводов (что может быть проблематично для языков, которых вы не знаете). Альтернативный подход заключается в отмене этого ограничения для пользователя Weblate.

Например, на GitHub’е это можно сделать в настройках репозитория:

_images/github-protected.png

Взаимодействие с другими пользователями

Weblate облегчает взаимодействие с другими пользователями с помощью своего API.

См.также

REST API Weblate’а

Отложенные коммиты

Поведение Weblate’а заключается в группировке коммитов одного и того же автора в один коммит (если это возможно). Такая группировка значительно сокращает количество коммитов, однако вам может понадобиться явно приказать ему сделать коммиты в случае, если вы хотите синхронизировать репозиторий, например, для выполнения слияния (по умолчанию это действие разрешено для группы Управляющие, смотрите раздел Список привилегий и встроенных ролей).

Изменения в этом режиме коммитятся при выполнении любого из следующих условий:

Подсказка

Коммиты создаются для каждого компонента. Так что в случае, если у вас много компонентов, у вас всё равно будет множество коммитов. В этом случае вы можете использовать надстройку Уплотнение Git-коммитов.

Если вы хотите коммитить изменения чаще и без проверки их возраста, вы можете запланировать для выполнения коммита обычное задание:

CELERY_BEAT_SCHEDULE = {
    # Unconditionally commit all changes every 2 minutes
    "commit": {
        "task": "weblate.trans.tasks.commit_pending",
        # Omitting hours will honor per component settings,
        # otherwise components with no changes older than this
        # won't be committed
        "kwargs": {"hours": 0},
        # How frequently to execute the job in seconds
        "schedule": 120,
    }
}

Обработка репозитория скриптами

Настройка взаимодействия Weblate’а с репозиторием заключается в использовании надстроек. Для получения информации о том, как через надстройки выполнять внешние скрипты, обратитесь к разделу Выполнение скриптов из надстройки.

Поддержание единого перевода в разных компонентах

Если у вас несколько компонентов перевода, вы возможно захотите убедиться, что одни и те же строки имеют один и тот же перевод. Этого можно достичь на нескольких уровнях.

Распространение перевода

При включённой функции ref:component-allow_translation_propagation (которая включена по умолчанию, смотрите раздел Настройки компонента), все новые переводы автоматически копируются во все компоненты с совпадающими строками. Такие переводы должным образом засчитываются текущему пользователю-переводчику во всех компонентах.

Примечание

Распространение перевода требует, чтобы в одноязычных форматах файлов перевода ключи строк совпадали, так что об этом следует помнить при создании ключей перевода.

Проверка согласованности

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

Автоматический перевод

Автоматический перевод одних компонентов на основе переводов в других может быть способом синхронизации переводов между компонентами. Вы можете либо запустить его вручную (смотрите раздел Автоматический перевод), либо заставить его автоматически запускаться при обновлении репозитория с помощью надстройки Автоматический перевод.

Лицензирование переводов

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

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

Информация о лицензии

После указания информации о лицензии (её названия и URL-адреса) эта информация отображается в разделе «Инфо» соответствующего компонента.

Обычно, если на перевод не требуется явного согласия, это лучшее место для размещения информации о лицензии. Если ваш проект или перевод не являются свободными, то, скорее всего, предварительное согласие вам необходимо.

Соглашение участника

Если вы укажете лицензионное соглашение участника, то вносить свой вклад в перевод смогут только пользователи, с ним согласившиеся. Это хорошо заметный шаг, появляющийся при доступе к переводу:

_images/contributor-agreement.png

Введенный текст разбивается на абзацы и может содержать внешние ссылки. Разметку HTML в нем использовать нельзя.

Пользовательские лицензии

Любой пользователь может просмотреть из своего профиля все лицензии на перевод всех публичных проектов на экземпляре:

_images/profile-licenses.png

Процесс перевода

Голосование по предложению

По умолчанию кто угодно может добавлять предложения, которые могут быть приняты зарегистрированными пользователями. Если вы хотите, чтобы для принятия предложения требовалось, чтобы с ним были согласны более одного зарегистрированного пользователя, то можно использовать систему голосования по предложениям, которое можно включить в компоненте параметром Голосование по предложению и настроить порог голосов, которые требуются для собственно принятия предложения в параметре Автоматическое принятие предложений (считается также голос пользователя, сделавшего это предложение).

Примечание

После настройки автоматического принятия обычные пользователи теряют привилегию непосредственного сохранения переводов или принятия предложений. Это можно отменить с помощью привилегии Правка строк, когда предложения являются обязательными permission.

Вы можете скомбинировать этот параметр с управлением доступом для получения одной из следующих установок:

  • Пользователи предлагают и голосуют за предложения, а ограниченная группа контролирует то, что принимается. — Включите голосование. — Отключите автоматическое принятие. — Не позволяйте пользователям сохранять переводы.

  • Пользователи предлагают и голосуют за предложения с автоматическим принятием предложения, как только с ним согласится определенное количество пользователей. — Включите голосование. — Установите желаемое количество голосов для автоматического принятия предложения.

  • Необязательное голосование по предложениям (по желанию может использоваться пользователями, когда они не уверены в переводе, и делают вместо него несколько предложений). — Включите только голосование.

Дополнительная информация об исходных строках

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

_images/source-review-edit.png

Доступ к нему можно получить непосредственно из интерфейса перевода, нажав на иконку правки у разделов Контекст — снимок экрана или Флаги.

_images/source-information.png

Приоритизация строк

Добавлено в версии 2.0.

Приоритет строк может быть изменён с помощью флага priority, чтобы более приоритетные строки предлагались для перевода раньше.

Подсказка

Это можно использовать для перевода строк в логическом порядке.

Флаги перевода

Добавлено в версии 2.4.

Изменено в версии 3.3: Ранее поле называлось Отметки о проверке качества, но теперь оно настраивает не только проверки.

Настройка проверок качества и другого поведения Weblate’а, смотрите раздел Настройка поведения с помощью флагов.

The string flags are also inherited from the Флаги перевода at Настройки компонента and flags from the translation file (see Поддерживаемые форматы файлов).

Пояснение

Изменено в версии 4.1: В предыдущих версиях это поле называлось Дополнительный контекст.

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

Визуальный контекст для строк

Добавлено в версии 2.9.

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

Загруженный снимок экрана отображается в боковой панели контекста перевода:

_images/screenshot-context.png

В добавок к окну «Рецензирование строк», есть ещё один интерфейс управления снимками экрана в меню Инструменты. Загрузите снимки экрана и вручную назначьте, какие исходные строки им соответствуют, либо сделайте это в автоматическом режиме с помощью распознавания текста.

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

_images/screenshot-ocr.png

Проверки и исправления

Пользовательские автоматические исправления

Также в дополнение к стандартным вы можете реализовать своё собственное автоматическое исправление и включить его в список AUTOFIX_LIST.

Автоматические исправления — это очень мощный инструмент, но они могут повредить перевод; будьте осторожны при их написании.

Например, следующее автоматическое исправление заменит каждое появление строки foo в переводе на строку bar:

#
# Copyright © 2012–2022 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <https://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
#

from django.utils.translation import gettext_lazy as _

from weblate.trans.autofixes.base import AutoFix


class ReplaceFooWithBar(AutoFix):
    """Replace foo with bar."""

    name = _("Foobar")

    def fix_single_target(self, target, source, unit):
        if "foo" in target:
            return target.replace("foo", "bar"), True
        return target, False

Для установки пользовательских проверок необходимо в списке AUTOFIX_LIST указать полный путь к классу Python, смотрите раздел Пользовательские проверки качества, надстройки и автоматические исправления.

Настройка поведения с помощью флагов

You can fine-tune the Weblate behavior by using flags. This can be done on the source string level (see Дополнительная информация об исходных строках), or in the Настройки компонента (Флаги перевода). Some file formats also allow to specify flags directly in the format (see Поддерживаемые форматы файлов).

Флаги разделяются запятыми, параметры флагов разделяются двоеточием. Для включения в строку пробела или специальных символов вы можете использовать кавычки. Например:

placeholders:"special:value":"other value", regex:.*

Вот список принимаемых в настоящее время флагов:

rst-text

Рассматривать текст как документ reStructuredText, влияет на проверку Перевод без изменения.

dos-eol

Использовать маркеры конца строки DOS вместо маркеров Unix (комбинацию символов \r\n вместо символа \n).

read-only

Строка доступна только для чтения и не должна редактироваться в Weblate, смотрите проверку Строки только для чтения.

priority:N

Приоритет строки. Строки с более высоким приоритетом предлагаются на перевод первыми. По умолчанию приоритет равен 100, чем выше приоритет строки, тем раньше она будет предложена для перевода.

max-length:N

Ограничить максимальную длину строки N символами, смотрите проверку Максимальная длина перевода.

xml-text

Рассматривать текст как документ XML, влияет на проверки Синтаксис XML и XML-разметка.

font-family:ШРИФТ

Определяет семейство шрифтов для проверок отрисовки текста, смотрите раздел Управление шрифтами.

font-weight:НАСЫЩЕННОСТЬ

Определяет насыщенность шрифта (свойство font-weight) для проверок отрисовки текста, смотрите раздел Управление шрифтами.

font-size:РАЗМЕР

Определяет размер шрифта (свойство font-size) для проверок отрисовки текста, смотрите раздел Управление шрифтами.

font-spacing:ШИРИНА

Определяет ширину межбуквенных интервалов (свойство letter-spacing) для проверок отрисовки текста, смотрите раздел Управление шрифтами.

icu-flags:ФЛАГИ

Определите флаги для настройки поведения проверки качества ICU MessageFormat.

icu-tag-prefix:ПРЕФИКС

Установите необходимый префикс для XML-тегов для проверки качества ICU MessageFormat.

placeholders:СТРОКА:СТРОКА2:...

Ожидаемые в переводе строки-заполнители, смотрите проверку Символы-заполнители.

replacements:С:НА:С2:НА2...

Замены, выполняемые при проверке параметров результирующего текста (например, в проверках Максимальный размер перевода или Максимальная длина перевода). Типовой случай использования этот флага — подстановка конкретных значений вместо заполнителей, чтобы гарантировать, что текст впишется в отведённые ему границы даже при использовании длинных строк, например: replacements:%s:"Джон Доу".

variants:ИСТОЧНИК

Добавить отметку, что данная строка является вариантом строки, указанной в качестве источника. Смотрите раздел «Варианты строк».

regex:РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ

Регулярное выражение для сопоставления с переводом, смотрите раздел Регулярное выражение.

forbidden

Используется для пометки переводов в глоссарии как нежелательных, смотреть раздел Нежелательные переводы.

strict-same

Сделать так, чтобы проверка «Перевод без изменения» не использовал встроенный чёрного список слов, смотреть раздел Перевод без изменения.

check-glossary

Включите проверку качества Не соответствует глоссарию.

angularjs-format

Включите проверку качества Интерполяционная строка AngularJS.

c-format

Включите проверку качества C-формат.

c-sharp-format

Включите проверку качества C#-формат.

es-format

Включите проверку качества Шаблонные литералы ECMAScript.

i18next-interpolation

Включите проверку качества Интерполяция i18next.

icu-message-format

Включите проверку качества ICU MessageFormat.

java-format

Включите проверку качества Java-формат.

java-messageformat

Включите проверку качества Java MessageFormat.

javascript-format

Включите проверку качества JavaScript-формат.

lua-format

Включите проверку качества Lua-формат.

object-pascal-format

Включите проверку качества Формат Object Pascal.

percent-placeholders

Включите проверку качества Символы-заполнители в процентной нотации.

perl-format

Включите проверку качества Perl-формат.

php-format

Включите проверку качества PHP- формат.

python-brace-format

Включите проверку качества Python-формат: фигурные скобки.

python-format

Включите проверку качества Python-формат.

qt-format

Включите проверку качества Qt-формат.

qt-plural-format

Включите проверку качества Формат множественного числа Qt.

ruby-format

Включите проверку качества Ruby-формат.

scheme-format

Включите проверку качества Формат схемы.

vue-format

Включите проверку качества Форматирование Vue I18n.

md-text

Рассматривая текст как документ в формате Markdown, включите проверки качества Ссылки Markdown, Сноски Markdown и Синтаксис Markdown.

safe-html

Включите проверку качества Небезопасный HTML-код.

url

Строка должна состоять только из URL-адреса. Включите проверку качества URL-адреса.

ignore-all-checks

Ignore all quality checks.

ignore-bbcode

Пропустите проверку качества BBCode-разметка.

ignore-duplicate

Пропустите проверку качества Повторяющиеся слова.

ignore-check-glossary

Пропустите проверку качества Не соответствует глоссарию.

ignore-double-space

Пропустите проверку качества Двойной пробел.

ignore-angularjs-format

Пропустите проверку качества Интерполяционная строка AngularJS.

ignore-c-format

Пропустите проверку качества C-формат.

ignore-c-sharp-format

Пропустите проверку качества C#-формат.

ignore-es-format

Пропустите проверку качества Шаблонные литералы ECMAScript.

ignore-i18next-interpolation

Пропустите проверку качества Интерполяция i18next.

ignore-icu-message-format

Пропустите проверку качества ICU MessageFormat.

ignore-java-format

Пропустите проверку качества Java-формат.

ignore-java-messageformat

Пропустите проверку качества Java MessageFormat.

ignore-javascript-format

Пропустите проверку качества JavaScript-формат.

ignore-lua-format

Пропустите проверку качества Lua-формат.

ignore-object-pascal-format

Пропустите проверку качества Формат Object Pascal.

ignore-percent-placeholders

Пропустите проверку качества Символы-заполнители в процентной нотации.

ignore-perl-format

Пропустите проверку качества Perl-формат.

ignore-php-format

Пропустите проверку качества PHP- формат.

ignore-python-brace-format

Пропустите проверку качества Python-формат: фигурные скобки.

ignore-python-format

Пропустите проверку качества Python-формат.

ignore-qt-format

Пропустите проверку качества Qt-формат.

ignore-qt-plural-format

Пропустите проверку качества Формат множественного числа Qt.

ignore-ruby-format

Пропустите проверку качества Ruby-формат.

ignore-scheme-format

Пропустите проверку качества Формат схемы.

ignore-vue-format

Пропустите проверку качества Форматирование Vue I18n.

ignore-translated

Пропустите проверку качества Уже переведено.

ignore-inconsistent

Пропустите проверку качества Противоречия.

ignore-kashida

Пропустите проверку качества Используется кашида.

ignore-md-link

Пропустите проверку качества Ссылки Markdown.

ignore-md-reflink

Пропустите проверку качества Сноски Markdown.

ignore-md-syntax

Пропустите проверку качества Синтаксис Markdown.

ignore-max-length

Пропустите проверку качества Максимальная длина перевода.

ignore-max-size

Пропустите проверку качества Максимальный размер перевода.

ignore-escaped-newline

Пропустите проверку качества Несовпадающие \n.

ignore-end-colon

Пропустите проверку качества Несовпадающие двоеточия.

ignore-end-ellipsis

Пропустите проверку качества Несовпадающие многоточия.

ignore-end-exclamation

Пропустите проверку качества Несовпадающие восклицательные знаки.

ignore-end-stop

Пропустите проверку качества Несовпадающие точки.

ignore-end-question

Пропустите проверку качества Несовпадающие вопросительные знаки.

ignore-end-semicolon

Пропустите проверку качества Несовпадающие точки с запятой.

ignore-newline-count

Пропустите проверку качества Несовпадающие переводы строк.

ignore-plurals

Пропустите проверку качества Нет форм множественного числа.

ignore-placeholders

Пропустите проверку качества Символы-заполнители.

ignore-punctuation-spacing

Пропустите проверку качества Пробелы и пунктуация.

ignore-regex

Пропустите проверку качества Регулярное выражение.

ignore-same-plurals

Пропустите проверку качества Одинаковые формы множественного числа.

ignore-begin-newline

Пропустите проверку качества Пустая строка в начале.

ignore-begin-space

Пропустите проверку качества Пробелы в начале.

ignore-end-newline

Пропустите проверку качества Пустая строка в конце.

ignore-end-space

Пропустите проверку качества Пробелы в конце.

ignore-same

Пропустите проверку качества Перевод без изменения.

ignore-safe-html

Пропустите проверку качества Небезопасный HTML-код.

ignore-url

Пропустите проверку качества URL-адреса.

ignore-xml-tags

Пропустите проверку качества XML-разметка.

ignore-xml-invalid

Пропустите проверку качества Синтаксис XML.

ignore-zero-width-space

Пропустите проверку качества Пробел нулевой ширины.

ignore-ellipsis

Пропустите проверку качества Многоточие.

ignore-icu-message-format-syntax

Пропустите проверку качества Синтаксис ICU MessageFormat.

ignore-long-untranslated

Пропустите проверку качества Давно не переводилась.

ignore-multiple-failures

Пропустите проверку качества Множество неудачных проверок.

ignore-unnamed-format

Пропустите проверку качества Несколько переменных без названий.

ignore-optional-plural

Пропустите проверку качества Формы единственного числа.

Примечание

В общем случае правило называется ignore-* для любой проверки, где вместо звёздочки подставляется её идентификатор, так что вы можете использовать такое правило даже для своих собственных проверок.

Эти флаги понимаются как в параметрах компонента, так и в параметрах исходной строки или в самом файле перевода (например, в файле GNU gettext).

Принудительные проверки

Добавлено в версии 3.11.

Вы можете настроить список проверок, которые нельзя проигнорировать, задав в настройках компонента параметр Принудительные проверки. Все перечисленные проверки не смогут быть проигнорированы из пользовательского интерфейса, а любая строка, для которой такая проверка сработала, помечается флагом На правку (смотрите раздел Состояния перевода).

Управление шрифтами

Добавлено в версии 3.7.

Подсказка

Загруженные в Weblate шрифты используются исключительно для проверки максимального размера перевода; на пользовательский интерфейс они никак не влияют.

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

Загрузить шрифты в Weblate и управлять ими можно в пункте Шрифты меню Управлять вашего проекта перевода. Создайте группы шрифтов и используйте их в проверках. Поддерживаются шрифты TrueType и OpenType.

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

_images/font-group-edit.png

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

_images/font-group-list.png

Семейство и начертание шрифта распознаются автоматически после его загрузки:

_images/font-edit.png

Вы можете загрузить в Weblate несколько шрифтов:

_images/font-list.png

Чтобы использовать шрифты в проверке длины строки, передайте проверке соответствующие флаги (смотрите раздел Настройка поведения с помощью флагов). Скорее всего, вам понадобятся следующие из них:

max-size:500

Определяет максимальную ширину в пикселях.

font-family:ubuntu

Определяет используемую группу шрифтов путем указания ее идентификатора.

font-size:22

Определяет размер шрифта в пикселях.

Написание собственных проверок

Хотя в Weblate встроен широкий спектр проверок качества (смотрите раздел Проверки качества), они могут охватывать не всё, что вы хотите проверить. Список выполняемых проверок можно настроить с помощью параметра CHECK_LIST, кроме того, вы можете добавить собственные проверки.

  1. Создайте подкласс weblate.checks.Check

  2. Установите несколько атрибутов.

  3. Реализуйте либо метод check (если вы хотите работать в своём коде с формами множественного числа), либо метод check_single (который сам выполняет такую обработку).

Несколько примеров:

Для установки пользовательских проверок необходимо в списке CHECK_LIST указать полный путь к классу Python, смотрите раздел Пользовательские проверки качества, надстройки и автоматические исправления.

Проверка, что текст перевода не содержит подстроки «foo»

Это довольно простая проверка, которая просто проверяет, не пропущена ли в переводе строка «foo».

#
# Copyright © 2012–2022 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <https://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
#
"""Simple quality check example."""

from django.utils.translation import gettext_lazy as _

from weblate.checks.base import TargetCheck


class FooCheck(TargetCheck):

    # Used as identifier for check, should be unique
    # Has to be shorter than 50 characters
    check_id = "foo"

    # Short name used to display failing check
    name = _("Foo check")

    # Description for failing check
    description = _("Your translation is foo")

    # Real check code
    def check_single(self, source, target, unit):
        return "foo" in target

Проверка того, что в переводе на чешский язык формы множественного числа отличаются друг от друга

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

#
# Copyright © 2012–2022 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <https://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
#
"""Quality check example for Czech plurals."""

from django.utils.translation import gettext_lazy as _

from weblate.checks.base import TargetCheck


class PluralCzechCheck(TargetCheck):

    # Used as identifier for check, should be unique
    # Has to be shorter than 50 characters
    check_id = "foo"

    # Short name used to display failing check
    name = _("Foo check")

    # Description for failing check
    description = _("Your translation is foo")

    # Real check code
    def check_target_unit(self, sources, targets, unit):
        if self.is_language(unit, ("cs",)):
            return targets[1] == targets[2]
        return False

    def check_single(self, source, target, unit):
        """We don't check target strings here."""
        return False

Машинный перевод

В Weblate встроена поддержка нескольких сервисов машинного перевода, которая может быть включена администратором с помощью добавления соответствующих значений в список MT_SERVICES. Эти сервисы идут с собственными условиями своего использования, поэтому убедитесь, что вам разрешено использовать их так, как вы хотите.

Исходный язык можно настроить в настройках проекта.

amaGama

Специальная установка tmserver, запущенная авторами Virtaal.

Этот сервис включается добавлением в список MT_SERVICES значения weblate.machinery.tmserver.AmagamaTranslation.

Apertium

Свободная платформа ПО машинного перевода, обеспечивающая переводы на ограниченный набор языков.

Рекомендуемый способ использования Apertium — запуск собственного сервера Apertium-APy.

Этот сервис включается добавлением в список MT_SERVICES значения weblate.machinery.apertium.ApertiumAPYTranslation и заданием параметра MT_APERTIUM_APY.

AWS

Добавлено в версии 3.1.

Amazon Translate — это сервис машинного перевода при помощи нейронных сетей для перевода текста на английский язык и с английского языка на широкое множество поддерживаемых языков.

  1. Этот сервис включается добавлением в список MT_SERVICES значения weblate.machinery.aws.AWSTranslation.

  2. Установите модуль boto3.

  3. Настройте Weblate.

Машинный перевод через API Baidu

Добавлено в версии 3.2.

Сервис машинного перевода, предоставляемый Baidu.

Этот сервис использует API, и чтобы его использовать, вам нужно получить от Baidu идентификатор и ключ API.

Этот сервис включается добавлением в список MT_SERVICES значения weblate.machinery.baidu.BaiduTranslation и заданием параметров MT_BAIDU_ID и MT_BAIDU_SECRET.

DeepL

Добавлено в версии 2.20.

DeepL — это платный сервис, предоставляющий хороший машинный перевод на несколько языков. Вам необходимо приобрести подписку на DeepL API или воспользоваться устаревшим планом DeepL Pro (classic).

Этот сервис включается добавлением в список MT_SERVICES значения weblate.machinery.deepl.DeepLTranslation и заданием параметра MT_DEEPL_KEY.

Подсказка

В случае, если у вас есть подписка на CAT-инструменты, вы должны использовать «API v1» вместо «v2», которую по умолчанию использует Weblate (в данном случае это не совсем версия API). В случае, если вы находитесь на бесплатном, а не платном тарифном плане, вы должны использовать https://api-free.deepl.com/ вместо https://api.deepl.com/. Вы можете настроить оба параметра с помощью MT_DEEPL_API_VERSION.

LibreTranslate

Добавлено в версии 4.7.1.

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

Этот сервис включается добавлением в список MT_SERVICES значения weblate.machinery.libretranslate.LibreTranslateTranslation и заданием параметра MT_LIBRETRANSLATE_API_URL. Если для вашего экземпляра требуется ключ API, вы также должны установить MT_LIBRETRANSLATE_KEY.

Glosbe

Бесплатный словарь и память переводов для почти всех живых языков.

The API is gratis to use, but usage of the translations is subject to the license of the used data source. There is a limit of calls that may be done from one IP in a set period of time, to prevent abuse.

Этот сервис включается добавлением в список MT_SERVICES значения weblate.machinery.glosbe.GlosbeTranslation.

См.также

Веб-сайт Glosbe

Google Переводчик

Сервис машинного перевода, предоставляемый Google.

Этот сервис использует API Переводчика Google, поэтому вам нужно получить ключ API и включить тарифный план в консоли Google API.

Этот сервис включается добавлением в список MT_SERVICES значения weblate.machinery.google.GoogleTranslation и заданием параметра MT_GOOGLE_KEY.

Google Translate API V3 (расширенный)

Сервис машинного перевода, предоставляемый облачными сервисами Google Cloud.

Этот сервис отличается от предыдущего способом аутентификации. Для включения сервиса добавьте в список MT_SERVICES значение weblate.machinery.googlev3.GoogleV3Translation и задайте параметры

Если без location у вас не заработает, вам также может потребоваться указать параметр MT_GOOGLE_LOCATION.

Переводчик Microsoft Cognitive Services

Добавлено в версии 2.10.

Сервис машинного перевода, предоставляемый Microsoft на портале Azure в качестве одного из сервисов Cognitive Services.

Weblate реализует API переводчика версии V3.

Этот сервис включается добавлением в список MT_SERVICES значения weblate.machinery.microsoft.MicrosoftCognitiveTranslation и заданием параметра MT_MICROSOFT_COGNITIVE_KEY.

API переводчика текста версии V2

Ключ, который вы используете для API переводчика версии V2, можно использовать с API версии 3.

API переводчика текста версии V3

Вам необходимо зарегистрироваться на портале Azure и использовать полученный там ключ. При использовании новых ключей Azure вам также потребуется установить параметр MT_MICROSOFT_REGION в локаль вашего сервиса.

Microsoft Terminology Service (Терминологическая служба Майкрософт)

Добавлено в версии 2.19.

API терминологической службы Майкрософт позволяет программно получать доступ к терминологии, определениям и строкам пользовательского интерфейса (UI), доступным на языковом портале, через веб-сервис.

Этот сервис включается добавлением в список MT_SERVICES значения weblate.machinery.microsoftterminology.MicrosoftTerminologyService.

ModernMT

Добавлено в версии 4.2.

Этот сервис включается добавлением в список MT_SERVICES значения weblate.machinery.modernmt.ModernMTTranslation и заданием параметра MT_MODERNMT_KEY.

MyMemory

Огромная память переводов с машинным переводом.

Бесплатное анонимное использование в настоящее время ограничено 100 запросами в день, или 1000 запросами в день при указании контактного адреса электронной почты в параметре MT_MYMEMORY_EMAIL. Также вы можете запросить у них увеличение лимитов.

Этот сервис включается добавлением в список MT_SERVICES значения weblate.machinery.mymemory.MyMemoryTranslation и заданием параметра MT_MYMEMORY_EMAIL.

API машинного перевода NetEase Sight

Добавлено в версии 3.3.

Сервис машинного перевода, предоставляемый NetEase.

Этот сервис использует API, поэтому вам необходимо получить от NetEase ключ и секрет.

Этот сервис включается добавлением в список MT_SERVICES значения weblate.machinery.youdao.NeteaseSightTranslation и заданием параметров MT_NETEASE_KEY и MT_NETEASE_SECRET.

tmserver

Вы можете запустить свой собственный сервер памяти переводов, используя сервер, сходящий в поставку с Translate-toolkit, и настроив общение Weblate’а с ним. Также вы можете использовать его с сервером amaGama, который является расширенной версией tmserver’а.

  1. Сперва вам нужно импортировать в память переводов некоторые данные:

Этот сервис включается добавлением в список MT_SERVICES значения weblate.machinery.tmserver.TMServerTranslation.

build_tmdb -d /var/lib/tm/db -s en -t cs locale/cs/LC_MESSAGES/django.po
build_tmdb -d /var/lib/tm/db -s en -t de locale/de/LC_MESSAGES/django.po
build_tmdb -d /var/lib/tm/db -s en -t fr locale/fr/LC_MESSAGES/django.po
  1. Запустите tmserver, чтобы он слушал ваши запросы:

tmserver -d /var/lib/tm/db
  1. Настройте Weblate для общения с ним:

MT_TMSERVER = "http://localhost:8888/tmserver/"

Yandex Translate (Яндекс.Переводчик)

Сервис машинного перевода, предоставляемый Яндексом.

Этот сервис использует API переводчика, поэтому вам необходимо получить от Яндекса ключ API.

Этот сервис включается добавлением в список MT_SERVICES значения weblate.machinery.yandex.YandexTranslation и заданием параметра MT_YANDEX_KEY.

API машинного перевода Youdao Zhiyun

Добавлено в версии 3.2.

Сервис машинного перевода, предоставляемый Youdao.

Этот сервис использует API, поэтому вам необходимо получить от Youdao идентификатор и ключ API.

Этот сервис включается добавлением в список MT_SERVICES значения weblate.machinery.youdao.YoudaoTranslation и заданием параметров MT_YOUDAO_ID и MT_YOUDAO_SECRET.

Weblate

Weblate также сам может быть источником машинных переводов. Этот перевод основан на движке полнотекстового поиска Woosh и выдаёт как точные, так и приблизительные соответствия.

Этот сервис включается добавлением в список MT_SERVICES значения weblate.machinery.weblatetm.WeblateTranslation.

Память переводов Weblate’а

Добавлено в версии 2.20.

Память переводов также может использоваться в качестве источника предложений машинного перевода.

Этот сервис включается добавлением в список MT_SERVICES значения weblate.machinery.machine.WeblateMemory. Он включен по умолчанию.

SAP Translation Hub

Сервис машинного перевода, предоставляемый SAP.

Для использования этой службы вам необходимо иметь учётную запись SAP (и иметь SAP Translation Hub включённым в облачной платформе SAP).

Этот сервис включается добавлением в список MT_SERVICES значения weblate.machinery.saptranslationhub.SAPTranslationHub и заданием доступа либо к песочнице, либо к производственному API.

Примечание

Для доступа к API песочницы необходимо задать параметры MT_SAP_BASE_URL и MT_SAP_SANDBOX_APIKEY.

Для доступа к рабочему API необходимо задать параметры MT_SAP_BASE_URL, MT_SAP_USERNAME и MT_SAP_PASSWORD.

Пользовательский машинный перевод

Также вы можете реализовать собственные сервисы машинного перевода, написав всего несколько строк кода на Python. В этом примере реализован машинный перевод на фиксированный список языков через модуль Python dictionary:

#
# Copyright © 2012–2022 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <https://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
#
"""Machine translation example."""

import dictionary

from weblate.machinery.base import MachineTranslation


class SampleTranslation(MachineTranslation):
    """Sample machine translation interface."""

    name = "Sample"

    def download_languages(self):
        """Return list of languages your machine translation supports."""
        return {"cs"}

    def download_translations(
        self,
        source,
        language,
        text: str,
        unit,
        user,
        search: bool,
        threshold: int = 75,
    ):
        """Return tuple with translations."""
        for t in dictionary.translate(text):
            yield {"text": t, "quality": 100, "service": self.name, "source": text}

Вы можете добавить свой класс в MT_SERVICES и Weblate начнёт его использовать.

Надстройки

Добавлено в версии 2.19.

Надстройки предоставляют способы изменения и автоматизации рабочего процесса перевода. Администратор может добавлять и управлять надстройками из меню УправлятьНадстройки соответствующего компонента перевода.

Подсказка

Вы также можете настроить надстройки с помощью API, DEFAULT_ADDONS, или install_addon.

_images/addons.png

Встроенные надстройки

Автоматический перевод

Добавлено в версии 3.9.

ID надстройки

weblate.autotranslate.autotranslate

Конфигурация

mode

Режим автоматического перевода

Доступные варианты:

suggest – Добавить как предложение

translate – Добавить как перевод

fuzzy – Добавить с пометкой «На правку»

filter_type

Фильтр поиска

Пожалуйста, имейте ввиду, что перевод всех строк отменит все существующие переводы.

Доступные варианты:

all – Все строки

nottranslated – Непереведённые строки

в разработке – Незавершённые строки

fuzzy – Строки, помеченные для правки

check:inconsistent – Failing check: Inconsistent

auto_source

Источник автоматического перевода

Доступные варианты:

others – Другие компоненты перевода

mt – Машинный перевод

component

Компоненты

Введите компонент для использования в качестве источника, для использования всех компонентов в текущем проекте - оставить пустым.

engines

Механизмы машинного перевода

threshold

Порог оценки

Запуск

обновление компонентов, ежедневно

Автоматически переводит строки при помощи машинного перевода или других компонентов.

Сработало:

  • При появлении в компоненте новых строк.

  • Раз в месяц для каждого компонента, это может быть настроено с помощью BACKGROUND_TASKS.

CDN локализации JavaScript’а

Добавлено в версии 4.2.

ID надстройки

weblate.cdn.cdnjs

Конфигурация

threshold

Порог перевода

Порог для включения переводов.

css_selector

Селектор CSS

Селектор CSS для обнаружения локализуемых элементов.

cookie_name

Имя языковой куки

Имя куки, в которой сохраняется предпочитаемый язык.

files

Извлечение строк из HTML-файлов

Список имён файлов в текущем репозитории или URL-адреса, которые нужно разобрать для извлечения переводимых строк.

Запуск

ежедневно, репозиторий до коммита, репозиторий после обновления

Публикует переводы в сети доставки содержимого (CDN); используется при локализации JavaScript и HTML.

Его можно использовать для локализации статических HTML-страниц или для загрузки локализации в код JavaScript.

Создаёт для вашего компонента уникальный URL-адрес, который вы можете использовать на своих HTML-страницах для локализации. Подробности смотрите в разделе «Перевод HTML и JavaScript с помощью сети доставки содержимого Weblate».

Удаление пустых строк

Добавлено в версии 4.4.

ID надстройки

weblate.cleanup.blank

Конфигурация

Эта надстройка не имеет конфигурации.

Запуск

репозиторий до коммита, репозиторий после обновления

Удаляет из файлов перевода строки без перевода.

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

Очистка файлов перевода

ID надстройки

weblate.cleanup.generic

Конфигурация

Эта надстройка не имеет конфигурации.

Запуск

репозиторий до коммита, репозиторий после обновления

Обновляет все файлы переводов до соответствия одноязычному базовому файлу. Для большинства форматов файлов это означает удаление устаревших ключей переводов, которых больше нет в базовом файле.

Добавить отсутствующие языки

ID надстройки

weblate.consistency.languages

Конфигурация

Эта надстройка не имеет конфигурации.

Запуск

ежедневно, репозиторий после добавления

Гарантирует использование согласованного набора языков для всех компонентов в проекте.

Отсутствующие языки проверяются каждые 24 часа и при добавлении нового языка через Weblate.

В отличие от большинства других надстроек, эта влияет на весь проект.

Подсказка

Автоматически переводите новые добавленные строки с помощью надстройки Автоматический перевод.

Обнаружение компонентов

ID надстройки

weblate.discovery.discovery

Конфигурация

match

Регулярное выражение для сопоставления с файлами перевода

file_format

Формат файла

name_template

Настроить название компонента

base_file_template

Задать имя базового одноязычного файла

Оставить пустым для двуязычных файлов перевода.

new_base_template

Задать базовый файл для нового перевода

Имя файла, который используется для создания новых переводов. Для gettext выберите .pot файл.

language_regex

Языковой фильтр

Регулярное выражение для фильтрации файлов перевода при сканировании по файловой маске.

copy_addons

Клонировать дополнения из основного компонента в новые

remove

Удалить компоненты для несуществующих файлов

confirm

Я подтверждаю, что сопоставления выше выглядят правильно

Запуск

репозиторий после обновления

Автоматически добавляет или удаляет компоненты проекта в соответствии с изменениями файлов в системе контроля версий.

Она срабатывает при каждом обновлении репозитория СКВ, а в остальном её работа аналогична команде управления import_project. Таким образом, внутри одной системы контроля версий вы можете отслеживать несколько компонентов перевода.

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

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

_images/addon-discovery.png

Подсказка

Надстройка «Обнаружение компонентов» использует Внутренние URL-адреса Weblate. Это удобный способ совместного использования системы контроля версий разными компонентами. Привязать дополнительные компоненты к основному так, чтобы они использовали его локальный репозиторий, можно, задав в качестве Репозиторий исходного кода адрес вида weblate://проект/основной-компонент (в разделе УправлениеПараметрыСистема контроля версий) для каждого такого компонента. Это сэкономит не только ваше время на настройку, но и системные ресурсы.

Массовая правка

Добавлено в версии 3.11.

ID надстройки

weblate.flags.bulk

Конфигурация

q

Запрос

state

Задаваемое состояние

Доступные варианты:

-1 – Не изменять

10 – На правку

20 – Переведено

30 – Одобрено

add_flags

Добавляемые флаги перевода

remove_flags

Удаляемые флаги перевода

add_labels

Добавляемые метки

remove_labels

Удаляемые метки

Запуск

обновление компонентов

Позволяет массово править флаги, метки или состояния строк.

Для того чтобы начать автоматизацию расстановки меток, можно найти все строки по запросу NOT has:label и добавлять нужные метки до тех пор, пока не будет достигнут нужный эффект. Аналогично вы можете выполнять любые другие автоматические операции с метаданными Weblate.

Примеры:

Автоматическое присвоение метки новым строкам

Поисковый запрос

NOT has:label

Добавляемые метки

recent

Marking all Файлы метаданных магазина приложений changelog strings read-only

Поисковый запрос

language:en AND key:changelogs/

Добавляемые флаги перевода

read-only

Пометка неизменённых переводов флагом «На правку»

Добавлено в версии 3.1.

ID надстройки

weblate.flags.same_edit

Конфигурация

Эта надстройка не имеет конфигурации.

Запуск

единица после создания

При импорте новой строки для перевода из системы контроля версий и при её совпадении с исходной строкой она помечается в Weblate флагом «На правку». Особенно это полезно для тех форматов файлов, которые для непереведённых строк хранят исходные строки вместо перевода.

Подсказка

Возможно, вы также захотите ужесточить проверку на наличие изменений в переводе, добавив strict-same во флаги перевода.

Пометка новых исходных строк флагом «На правку»

ID надстройки

weblate.flags.source_edit

Конфигурация

Эта надстройка не имеет конфигурации.

Запуск

единица после создания

При импорте новой исходной строки из системы контроля версий она помечается в Weblate флагом «На правку». Таким образом, вы можете легко фильтровать и редактировать исходные строки, добавленные разработчиками.

Пометка новых переводов флагом «На правку»

ID надстройки

weblate.flags.target_edit

Конфигурация

Эта надстройка не имеет конфигурации.

Запуск

единица после создания

При импорте строки для перевода из системы контроля версий она помечается в Weblate флагом «На правку». Таким образом, вы можете легко фильтровать и редактировать переводы, созданные разработчиками.

Генератор статистики

ID надстройки

weblate.generate.generate

Конфигурация

filename

Имя сгенерированного файла

template

Содержание сгенерированного файла

Запуск

репозиторий до коммита

Генерирует файл, содержащий детальную информацию о состоянии перевода.

И в качестве имени файла и в качестве его содержимого вы можете использовать шаблоны Django; подробное описание разметки шаблона смотрите в разделе «Шаблонная разметка».

К примеру, сгенерировать файл со сводкой по каждому переводу можно со следующими настройками:

Имя сгенерированного файла

locale/{{ language_code }}.json

Содержимое
{
   "language": "{{ language_code }}",
   "strings": "{{ stats.all }}",
   "translated": "{{ stats.translated }}",
   "last_changed": "{{ stats.last_changed }}",
   "last_author": "{{ stats.last_author }}",
}

Предварительно заполнять перевод источником

Добавлено в версии 4.11.

ID надстройки

weblate.generate.prefill

Конфигурация

Эта надстройка не имеет конфигурации.

Запуск

обновление компонентов, ежедневно

Заполняет перевод используя исходные строки.

All untranslated strings in the component will be filled with the source string, and marked as needing edit. Use this when you can not have empty strings in the translation files.

Генератор псевдолокалей

Добавлено в версии 4.5.

ID надстройки

weblate.generate.pseudolocale

Конфигурация

source

Исходные строки

target

Целевой перевод

All strings in this translation will be overwritten

prefix

Fixed string prefix

var_prefix

Variable string prefix

suffix

Fixed string suffix

var_suffix

Variable string suffix

var_multiplier

Множитель переменной части

Сколько раз повторить переменную часть, в зависимости от длины исходной строки.

Запуск

обновление компонентов, ежедневно

Генерирует дополнительный перевод, автоматически добавляя префикс и суффикс к исходным строкам.

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

Также с помощью этого возможно отследить те строки, чьи локализованные версии могут не уместиться в отведённое под них место и ломать вёрстку.

Using the variable parts makes it possible to look for strings which might not fit into the user interface after the localization - it extends the text based on the source string length. The variable parts are repeated by length of the text multiplied by the multiplier. For example Hello world with variable suffix _ and variable multiplier of 1 becomes Hello world___________ - the suffix is repeated once for each character in the source string.

The strings will be generated using following pattern:

Fixed string prefix Variable string prefix Source string Variable string suffix Fixed string suffix

Подсказка

Хотя вы и можете использовать настоящие языки для проверки, но для этой цели в Weblate уже есть специальные псевдолокали: en_XA и ar_XB.

Подсказка

Вы можете использовать эту надстройку для запуска перевода на новую локаль существующего или похожего языка. Как только вы добавите перевод в компонент, перейдите к надстройке. Пример: Если у вас есть fr и вы хотите начать перевод fr_CA, просто задайте fr в качестве источника, fr_CA в качестве цели, а префикс и суффикс оставьте пустыми.

Удалите надстройку после заполнения нового перевода, чтобы Weblate не смог изменить переводы, сделанные после копирования.

Участники в комментарии

ID надстройки

weblate.gettext.authors

Конфигурация

Эта надстройка не имеет конфигурации.

Запуск

репозиторий до коммита

Обновляет комментарий в заголовке PO-файла, включая в него имена участников и годы их участия.

Заголовок PO-файла будет выглядеть примерно так:

# Michal Čihař <michal@cihar.com>, 2012, 2018, 2019, 2020.
# Pavel Borecki <pavel@example.com>, 2018, 2019.
# Filip Hron <filip@example.com>, 2018, 2019.
# anonymous <noreply@weblate.org>, 2019.

Обновление переменной ALL_LINGUAS в файле «configure»

ID надстройки

weblate.gettext.configure

Конфигурация

Эта надстройка не имеет конфигурации.

Запуск

репозиторий после добавления, ежедневно

Обновляет переменную ALL_LINGUAS в файлах configure, configure.in и configure.ac при добавлении нового перевода.

Настройка вывода gettext

ID надстройки

weblate.gettext.customize

Конфигурация

width

Перенос длинных строк

По умолчанию gettext переносит строки на 77-м символе и на символе переноса строки; с параметром –no-wrap, они будут переносится только на символе переноса строки.

Доступные варианты:

77 – Переносить строки на 77-м символе и на символе перевода строки

65535 – Переносить строки только на символах перевода строки

-1 – Не переносить строки

Запуск

после загрузки в хранилище

Позволяет настроить поведение вывода gettext, например, заворот строк.

Она предлагает следующие варианты:

  • Переносить строки на 77-м символе и на символе перевода строки

  • Переносить строки только на символах перевода строки

  • Не переносить строки

Примечание

По умолчанию gettext переносит строки на 77-м символе и на символе переноса строкию. С параметром --no-wrap, они будут переносится только на символе переноса строки.

Обновление файла LINGUAS

ID надстройки

weblate.gettext.linguas

Конфигурация

Эта надстройка не имеет конфигурации.

Запуск

репозиторий после добавления, ежедневно

Обновляет файл LINGUAS при добавлении нового перевода.

Создание MO-файлов

ID надстройки

weblate.gettext.mo

Конфигурация

path

Путь к сгенерированному MO-файлу

Если не указано, будет использовано расположение PO-файла.

Запуск

репозиторий до коммита

Автоматически генерирует MO-файл для каждого изменённого PO-файла.

В соответствующем поле можно задать местоположение сгенерированного MO-файла. Формат этого поля — Шаблонная разметка.

Обновлять PO-файлы до соответствия POT (msgmerge)

ID надстройки

weblate.gettext.msgmerge

Конфигурация

previous

Сохранять предыдущие msgid переведённых строк

no_location

Удалять расположение переведённых строк

fuzzy

Использовать неточное соответствие

Запуск

репозиторий после обновления

Обновляет все PO-файлы (в соответствии с масками файлов) так, чтобы они соответствовали POT-файлу (заданному шаблоном для новых переводов) с помощью msgmerge.

Это происходит всякий раз, когда новые изменения извлекаются из вышестоящего репозитория. Большинство параметров командной строки msgmerge можно задать в настройках.

Уплотнение Git-коммитов

ID надстройки

weblate.git.squash

Конфигурация

squash

Уплотнение коммитов

Доступные варианты:

all – Все коммиты в один

language – По языку

file – По файлу

author – По автору

append_trailers

Добавлять завершители в конец сообщения уплотнённого коммита

Строки завершителя — это строки, похожие на заголовки электронной почты RFC 822, добавляемые в конец сообщения коммита после его части в свободной форме. К примеру, «Co-authored-by: …».

commit_message

Сообщение коммита

Это сообщение коммита будет использоваться вместо сообщения, собранного из уплотнённых коммитов.

Запуск

репозиторий после коммита

Уплотняет (squash) Git-коммиты перед отправкой изменений.

Git-коммиты могут быть уплотнены перед отправкой изменений в одном из следующих режимов:

  • Все коммиты в один

  • По языку

  • По файлу

  • По автору

Исходные сообщения коммита сохраняются, но авторство коммитов теряется, если только не выбран режим По автору, или сообщение коммита не настроено на включение в него его авторов.

The original commit messages can optionally be overridden with a custom commit message.

Дополнительно из исходных сообщений коммитов могут быть удалены завершители (строки коммита вида Co-authored-by: ) с последующим их присоединением к концу сообщения уплотнённого коммита. Также в этом режиме для каждого переводчика генерируется соответствующий завершитель Co-authored-by:.

Настройка вывода в JSON

ID надстройки

weblate.json.customize

Конфигурация

sort_keys

Сортировка JSON-ключей

indent

Отступы JSON

style

Стиль отступов JSON

Доступные варианты:

spaces – Пробелов

tabs – Отступов

Запуск

после загрузки в хранилище

Позволяет подправить поведение вывода в JSON, например, отступы или сортировку ключей.

Форматирование файла свойств Java

ID надстройки

weblate.properties.sort

Конфигурация

Эта надстройка не имеет конфигурации.

Запуск

репозиторий до коммита

Сортирует файл свойств Java.

Удаление устаревших комментариев

Добавлено в версии 3.7.

ID надстройки

weblate.removal.comments

Конфигурация

age

Дни для сохранения

Запуск

ежедневно

Устанавливает сроки удаления комментариев.

Может быть полезна для удаления старых комментариев, которые могли потерять актуальность. Используйте её с осторожностью, поскольку то, что комментарий старый, не означает, что он потерял свою значимость.

Удаление устаревших предложений

Добавлено в версии 3.7.

ID надстройки

weblate.removal.suggestions

Конфигурация

age

Дни для сохранения

votes

Порог голосования

Порог для удаления. Это поле не действует при отключённом голосовании.

Запуск

ежедневно

Устанавливает сроки удаления предложений.

В сочетании с голосованием по предложениям (смотрите раздел Коллегиальное рецензирование) может быть очень полезна для удаления предложений, которые не получили достаточного количества положительных голосов в заданный промежуток времени.

Обновление файлов RESX

Добавлено в версии 3.9.

ID надстройки

weblate.resx.update

Конфигурация

Эта надстройка не имеет конфигурации.

Запуск

репозиторий после обновления

Обновляет все файлы перевода, приводя их в соответствие с одноязычным исходным базовым файлом. Неиспользуемые строки удаляются, а новые добавляются как копии исходных строк.

Подсказка

Если вы хотите только удалить устаревшие ключи перевода, используйте надстройку Очистка файлов перевода.

Настройка вывода в YAML

Добавлено в версии 3.10.2.

ID надстройки

weblate.yaml.customize

Конфигурация

indent

Отступы YAML

width

Перенос длинных строк

Доступные варианты:

80 – Переносить строку после 80 символов

100 – Переносить строку после 100 символов

120 – Переносить строку после 120 символов

180 – Переносить строку после 180 символов

65535 – Не переносить строки

line_break

Символ перевода строки

Доступные варианты:

dos – DOS (\r\n)

unix – UNIX (\n)

mac – MAC (\r)

Запуск

после загрузки в хранилище

Позволяет подправить поведение вывода в YAML, например, длину строк и символы перевода строк.

Настройка списка надстроек

Список надстроек настраивается параметром WEBLATE_ADDONS. Для добавления ещё одной надстройки просто включите в этот параметр полное имя класса.

Создание надстройки

Также вы можете создать свою собственную надстройку: просто создайте подкласс weblate.addons.base.BaseAddon, чтобы определить метаданные надстройки, а затем реализуйте нужный обратный вызов, который будет выполнять обработку.

Выполнение скриптов из надстройки

Надстройки также могут использоваться для выполнения внешних скриптов. Раньше выполнение было интегрировано в сам Weblate, но теперь вам нужно написать код для заворачивания вашего скрипта в надстройку.

#
# Copyright © 2012–2022 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <https://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
#
"""Example pre commit script."""


from django.utils.translation import gettext_lazy as _

from weblate.addons.events import EVENT_PRE_COMMIT
from weblate.addons.scripts import BaseScriptAddon


class ExamplePreAddon(BaseScriptAddon):
    # Event used to trigger the script
    events = (EVENT_PRE_COMMIT,)
    # Name of the addon, has to be unique
    name = "weblate.example.pre"
    # Verbose name and long descrption
    verbose = _("Execute script before commit")
    description = _("This add-on executes a script.")

    # Script to execute
    script = "/bin/true"
    # File to add in commit (for pre commit event)
    # does not have to be set
    add_file = "po/{{ language_code }}.po"

Инструкции по установке смотрите в разделе Пользовательские проверки качества, надстройки и автоматические исправления.

Скрипт выполняется с текущим каталогом, установленном в корневой каталог репозитория системы контроля версий заданного компонента.

Кроме того, в скрипте доступны следующие переменные окружения:

WL_VCS

Используемая система контроля версий.

WL_REPO

URL-адрес вышестоящего репозитория.

WL_PATH

Абсолютный путь к репозиторию системы контроля версий.

WL_BRANCH

Добавлено в версии 2.11.

Ветка репозитория, настроенная для текущего компонента.

WL_FILEMASK

Маска файлов для текущего компонента.

WL_TEMPLATE

Имя файла шаблона для одноязычных переводов (может быть пустым).

WL_NEW_BASE

Добавлено в версии 2.14.

Имя файла, используемого для создания новых переводов (может быть пустым).

WL_FILE_FORMAT

Формат файла, используемый в текущем компоненте.

WL_LANGUAGE

Язык обрабатываемого в данный момент перевода (недоступен для обработчиков уровня компонента).

WL_PREVIOUS_HEAD

Предыдущая HEAD после обновления (доступна только после запуска обработчика «после обновления»).

WL_COMPONENT_SLUG

Добавлено в версии 3.9.

Плашка компонента, используемая для построения URL-адреса.

WL_PROJECT_SLUG

Добавлено в версии 3.9.

Плашка проекта, используемая для построения URL-адреса.

WL_COMPONENT_NAME

Добавлено в версии 3.9.

Название компонента.

WL_PROJECT_NAME

Добавлено в версии 3.9.

Название проекта.

WL_COMPONENT_URL

Добавлено в версии 3.9.

URL-адрес компонента.

WL_ENGAGE_URL

Добавлено в версии 3.9.

URL-адрес для присоединения к переводу проекта.

Обработка репозитория после обновления

Может использоваться для обновления файлов перевода при изменении исходных файлов в вышестоящем репозитории. При этом помните, что Weblate видит только те файлы, которые были закоммичены в систему контроля версий, поэтому в скрипте вам необходимо закоммитить все изменения.

Например, при использовании Gulp это можно сделать следующим кодом:

#! /bin/sh
gulp --gulpfile gulp-i18n-extract.js
git commit -m 'Update source strings' src/languages/en.lang.json

Обработка переводов перед коммитом

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

Перевод передается в виде единственного параметра, содержащего имя файла текущего перевода.

Память переводов

Добавлено в версии 2.20.

Weblate поставляется со встроенной памятью переводов, состоящей из следующих частей:

Содержимое памяти переводов может быть применено одним из двух способов:

Подсказки по установке смотрите в памяти переводов Weblate’а, которая включена по умолчанию.

Области действия памяти переводов

Добавлено в версии 3.2: В более ранних версиях память переводов могла быть загружена только из файла, соответствующего области действия текущей импортированной памяти переводов.

Области действия памяти переводов позволяют обеспечить как конфиденциальность, так и совместное использование переводов в соответствии с желаемым поведением.

Импортированная память переводов

Импорт произвольных данных памяти переводов с помощью команды import_memory делает содержимое памяти переводов доступным для всех пользователей и проектов.

Память переводов пользователя

Автоматически сохраняет все переводы пользователя в персональной памяти переводов соответствующего пользователя.

Память переводов проекта

Все переводы в рамках проекта автоматически сохраняются в памяти переводов проекта, доступной только для этого проекта.

Совместная память переводов

Все переводы в проектах с включённой совместной памятью переводов сохраняются в совместной памяти переводов, доступной для всех проектов.

Пожалуйста, внимательно подумайте, следует ли включать эту функцию для совместно используемых установок Weblate, поскольку это может иметь серьёзные последствия:

  • Переводы могут быть использованы кем угодно.

  • Это может привести к разглашению секретной информации.

Управление памятью переводов

Пользовательский интерфейс

Добавлено в версии 3.2.

В базовом пользовательском интерфейсе вы можете управлять памятью переводов пользователя и проекта. Через него вы можете загружать, стирать или импортировать память переводов.

Подсказка

В Weblate может быть импортирована память переводов в формате JSON, формат TMX предусмотрен для взаимодействия с другими инструментами.

_images/memory.png

Интерфейс управления

Для управления содержимым памяти переводов существует несколько команд управления. Они работают с памятью переводов целиком, не применяя фильтр по областям (если только этот фильтр не запрошен параметрами):

dump_memory

Экспортирует память переводов в виде JSON’а

import_memory

Импортирует файлы TMX или JSON в память переводов

Конфигурация

Все настройки хранятся в файле settings.py (как обычно для проектов Django).

Примечание

После изменения любого из этих параметров вам необходимо перезапустить Weblate — как процесс WSGI, так и процесс Celery.

В случае, если Weblate работает через mod_wsgi, для перезагрузки конфигурации вам нужно перезапустить Apache.

См.также

Также, пожалуйста, ознакомьтесь с документацией Django по настройке параметров самого Django.

AKISMET_API_KEY

Weblate может использовать Akismet для проверки входящих анонимных предложений на спам. Посетите akismet.com, чтобы приобрести ключ API и связать его с сайтом.

ANONYMOUS_USER_NAME

Имена пользователей, которые не входят в систему.

AUDITLOG_EXPIRY

Добавлено в версии 3.6.

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

По умолчанию установлен в 180 дней.

AUTH_LOCK_ATTEMPTS

Добавлено в версии 2.14.

Максимальное количество неудачных попыток аутентификации до применения ограничения частоты запросов.

В настоящее время оно применяется в следующих местах:

  • Sign in. Deletes the account password, preventing the user from signing in without requesting a new password.

  • Password reset. Prevents new e-mails from being sent, avoiding spamming users with too many password reset attempts.

По умолчанию установлен в 10.

AUTO_UPDATE

Добавлено в версии 3.2.

Изменено в версии 3.11: Первоначальные возможные значения параметра включено/выключено были изменены для дифференциации принимаемых строк.

Обновление всех репозиториев на ежедневной основе.

Подсказка

Полезно, если вы не используете обработчики для автоматического обновления Weblate’овских репозиториев.

Примечание

Варианты включено/выключено в дополнение к строкам существуют для обратной совместимости.

Варианты:

"none"

Никаких ежедневных обновлений.

"remote" или False

Только вытягиваются изменения из удалённых репозиториев.

"full" или True

Вытягиваются изменения из удалённых репозиториев и сливаются с рабочей копией.

Примечание

Для включения этого параметра необходима работа фоновых задач Celery, также он вступит в силу после их перезапуска.

AVATAR_URL_PREFIX

Префикс для генерирования URL-адресов аватаров в выражении ${AVATAR_URL_PREFIX}/avatar/${MAIL_HASH}?${PARAMS}. Сервисы аватаров работают следующим образом:

Gravatar (по умолчанию), согласно https://gravatar.com/

AVATAR_URL_PREFIX = 'https://www.gravatar.com/'

Libravatar, согласно https://www.libravatar.org/

AVATAR_URL_PREFIX = 'https://www.libravatar.org/'

AUTH_TOKEN_VALID

Добавлено в версии 2.14.

Сколько времени действует токен аутентификации и временный пароль из писем сброса пароля. Устанавливается в количество секунд, по умолчанию равен 172800 (2 дня).

AUTH_PASSWORD_DAYS

Добавлено в версии 2.15.

Сколько дней должно быть разрешено использовать один и тот же пароль.

Примечание

Смена паролей, сделанная в версиях Weblate до версии 2.15, в этой политике учтена не будет.

По умолчанию установлен в 180 дней.

AUTOFIX_LIST

Список автоматических исправлений, применяемых при сохранении строки.

Примечание

Предоставьте полный путь к классу Python, реализующему интерфейс автоматического исправления.

Доступные исправления:

weblate.trans.autofixes.whitespace.SameBookendingWhitespace

Выравнивает количество начальных и конечных пробельных символов в переводе с исходной строкой.

weblate.trans.autofixes.chars.ReplaceTrailingDotsWithEllipsis

Заменяет конечные точки (…) на многоточие (…), если оно есть в исходной строке.

weblate.trans.autofixes.chars.RemoveZeroSpace

Удаляет пробельные символы нулевой ширины, если исходная строка их не содержит.

weblate.trans.autofixes.chars.RemoveControlChars

Удаляет управляющие символы, если исходная строка их не содержит.

weblate.trans.autofixes.html.BleachHTML

Удаляет небезопасную HTML-разметку из строк, помеченных флагом safe-html (смотрите проверку Небезопасный HTML-код).

Вы можете выбрать, какие исправления использовать:

AUTOFIX_LIST = (
    "weblate.trans.autofixes.whitespace.SameBookendingWhitespace",
    "weblate.trans.autofixes.chars.ReplaceTrailingDotsWithEllipsis",
)

BACKGROUND_TASKS

Добавлено в версии 4.5.2.

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

В данный момент оно управляет:

Возможные варианты:

  • monthly (ежемесячно) (по умолчанию)

  • weekly

  • daily

  • never

Примечание

Увеличение частоты не рекомендуется, если Weblate содержит тысячи компонентов.

BASE_DIR

Базовый каталог, в котором находятся исходники Weblate’а. Используется для построения нескольких других умолчательных путей:

Значение по умолчанию: каталог верхнего уровня исходников Weblate’а.

BASIC_LANGUAGES

Добавлено в версии 4.4.

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

Это не даёт непривилегированным пользователям добавлять нежелательные языки. Это не влияет на администраторов проектов — они всё также могут выбирать из полного списка языков, доступных в Weblate.

Примечание

Это также не определяет новые языки в Weblate, а только фильтрует те, что уже присутствуют в базе данных.

Пример:

BASIC_LANGUAGES = {"cs", "it", "ja", "en"}

BORG_EXTRA_ARGS

Добавлено в версии 4.9.

Вы можете передать дополнительные аргументы в команде borg create, когда запускается встроенное резервное копирование.

Пример:

BORG_EXTRA_ARGS = ["--exclude", "vcs/"]

CSP_SCRIPT_SRC, CSP_IMG_SRC, CSP_CONNECT_SRC, CSP_STYLE_SRC, CSP_FONT_SRC

Настраивает заголовок Content-Security-Policy для Weblate’а. Заголовок автоматически генерируется на основе включённых интеграций со сторонними сервисами (Matomo, Google Analytics, Sentry, …).

Все они по умолчанию установлены в пустой список.

Пример:

# Enable Cloudflare Javascript optimizations
CSP_SCRIPT_SRC = ["ajax.cloudflare.com"]

CHECK_LIST

Список выполняемых для перевода проверок качества.

Примечание

Предоставьте полный путь к классу Python, реализующему интерфейс проверки.

Подправьте список проверок так, чтобы включить в него только нужные вам.

По умолчанию включены все встроенные проверки, оттуда вы можете изменить эти настройки. В примере файла настроек они по умолчанию закомментированы, так что используются значения по умолчанию. В каждой новой версии Weblate’а туда добавляются новые проверки, если таковые появляются.

Вы можете отключить все проверки:

CHECK_LIST = ()

Можете включить только некоторые:

CHECK_LIST = (
    "weblate.checks.chars.BeginNewlineCheck",
    "weblate.checks.chars.EndNewlineCheck",
    "weblate.checks.chars.MaxLengthCheck",
)

Примечание

Изменение этого параметра влияет только на недавно изменённые переводы, результаты существующих проверок будут по-прежнему сохранены в базе данных. Чтобы также применить изменения к сохранённым переводам, запустите команду updatechecks.

COMMENT_CLEANUP_DAYS

Добавлено в версии 3.6.

Удаление комментариев через заданное количество дней. По умолчанию None, что означает, что комментарии не удаляются.

COMMIT_PENDING_HOURS

Добавлено в версии 2.10.

Количество часов до коммита ожидающих изменений фоновой задачей.

CONTACT_FORM

Добавлено в версии 4.6.

Настраивает способ отправки электронной почты из контактной формы. Выберите конфигурацию, соответствующую конфигурации вашего почтового сервера.

``»reply-to»``(ответить)

Отправитель используется в качестве :mailheader:`Reply-To`(ответить), это поведение по умолчанию.

``»from»``(от)

Отправитель используется в качестве :mailheader:`From`(от). Ваш почтовый сервер должен разрешать отправку таких писем.

DATA_DIR

Каталог, в котором Weblate хранит все свои данные. Он содержит ссылки на репозитории систем контроля версий, индекс для полнотекстового поиска и различные файлы настроек для внешних инструментов.

Обычно существуют следующие подкаталоги:

home

Домашний каталог, используемый при вызове скриптов.

ssh

Ключи и конфигурация SSH.

static

Расположение статических файлов Django по умолчанию, определяемых переменной STATIC_ROOT. Смотреть раздел Обслуживание статических файлов.

Docker-контейнер использует для этого отдельный том, смотреть раздел Тома контейнеров Docker’а.

media

Расположение медиа-файлов Django по умолчанию, определяемых переменной MEDIA_ROOT. Содержит загруженные снимки экрана, смотреть раздел Визуальный контекст для строк.

vcs

Репозитории систем контроля версий для переводов.

backups

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

celery

Данные планировщика Celery, смотрите раздел Фоновые задачи с использованием Celery.

fonts:

Шрифты, загруженные пользователем, смотреть раздел Управление шрифтами.

Примечание

Этот каталог должен быть доступен Weblate’у для записи. Запуск его в качестве приложения uWSGI означает, что пользователь www-data должен иметь к нему доступ с правами на запись.

Простейший способ этого достичь — сделать пользователя владельцем каталога:

sudo chown www-data:www-data -R $DATA_DIR

По умолчанию установлен в $BASE_DIR/data.

DATABASE_BACKUP

Добавлено в версии 3.1.

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

  • "plain"

  • "compressed"

  • "none"

DEFAULT_ACCESS_CONTROL

Добавлено в версии 3.3.

Умолчательное значение параметра управления доступом для новых проектов:

0

Публичный

1

Защищённый

100

Частный

200

Настраиваемый

Используйте Настраиваемый, если списками контроля доступа вы управляете вручную, что означает, что вы не полагаетесь на внутреннее Weblate’овское управление ими.

DEFAULT_AUTO_WATCH

Добавлено в версии 4.5.

Настраивает, должен ли параметр Автоматически добавлять проект в отслеживаемые при правке быть включён по умолчанию для новых пользователей. Значение по умолчанию: True.

См.также

Уведомления

DEFAULT_RESTRICTED_COMPONENT

Добавлено в версии 4.1.

Значение по умолчанию для ограничения компонента.

DEFAULT_ADD_MESSAGE, DEFAULT_ADDON_MESSAGE, DEFAULT_COMMIT_MESSAGE, DEFAULT_DELETE_MESSAGE, DEFAULT_MERGE_MESSAGE

Умолчательные сообщения коммита для различных операций, для получения подробной информации обратитесь к разделу Настройки компонента.

DEFAULT_ADDONS

Умолчательные надстройки, устанавливаемые в каждый созданный компонент.

Примечание

Этот параметр влияет только на новые создаваемые компоненты.

Пример:

DEFAULT_ADDONS = {
    # Add-on with no parameters
    "weblate.flags.target_edit": {},
    # Add-on with parameters
    "weblate.autotranslate.autotranslate": {
        "mode": "suggest",
        "filter_type": "todo",
        "auto_source": "mt",
        "component": "",
        "engines": ["weblate-translation-memory"],
        "threshold": "80",
    },
}

DEFAULT_COMMITER_EMAIL

Добавлено в версии 2.4.

Адрес электронной почты коммиттера, по умолчанию равен noreply@weblate.org.

См.также

DEFAULT_COMMITER_NAME

DEFAULT_COMMITER_NAME

Добавлено в версии 2.4.

Имя коммиттера, по умолчанию равен Weblate.

См.также

DEFAULT_COMMITER_EMAIL

DEFAULT_LANGUAGE

Добавлено в версии 4.3.2.

Язык по умолчанию, который будет использоваться, например как исходный язык.

По умолчанию — en. Соответствующая запись для данного языка должна присутствовать в базе данных.

DEFAULT_MERGE_STYLE

Добавлено в версии 3.4.

Стиль слияния для любых новых компонентов.

  • rebase — по умолчанию

  • merge

DEFAULT_SHARED_TM

Добавлено в версии 3.2.

Настраивает значение по умолчанию для Использовать совместную память переводов и Вносить вклад в совместную память переводов.

DEFAULT_TRANSLATION_PROPAGATION

Добавлено в версии 2.5.

Значение по умолчанию для настройки распространения перевода, по умолчанию установлен в True.

DEFAULT_PULL_MESSAGE

Configures the default title and message for pull requests.

ENABLE_AVATARS

Включить ли для пользователей Gravatar-аватары. По умолчанию они включены.

Аватары извлекаются и кэшируются на сервере, что снижает риск утечки персональной информации и ускоряет взаимодействие с пользователем.

ENABLE_HOOKS

Включить ли анонимные удалённые обработчики.

ENABLE_HTTPS

Отправлять ли ссылки на Weblate по протоколу HTTPS или HTTP. Этот параметр влияет на отправленные сообщения электронной почты и сгенерированные абсолютные URL-адреса.

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

The HTTPS redirection might be problematic in some cases and you might hit issue with infinite redirection in case you are using a reverse proxy doing SSL termination which does not correctly pass protocol headers to Django. Please tweak your reverse proxy configuration to emit X-Forwarded-Proto or Forwarded headers or configure SECURE_PROXY_SSL_HEADER to let Django correctly detect the SSL status.

ENABLE_SHARING

Включает/выключает меню Поделиться, с помощью которого пользователи могут делиться прогрессом перевода в социальных сетях.

GET_HELP_URL

Добавлено в версии 4.5.2.

URL, где можно найти поддержку для вашего экземпляра Weblate.

GITEA_CREDENTIALS

Добавлено в версии 4.12.

List for credentials for Gitea servers.

Подсказка

Use this in case you want Weblate to interact with more of them, for single Gitea endpoint stick with GITEA_USERNAME and GITEA_TOKEN.

GITEA_CREDENTIALS = {
    "try.gitea.io": {
        "username": "weblate",
        "token": "your-api-token",
    },
    "gitea.example.com": {
        "username": "weblate",
        "token": "another-api-token",
    },
}

GITEA_USERNAME

Добавлено в версии 4.12.

Gitea username used to send pull requests for translation updates.

GITEA_TOKEN

Добавлено в версии 4.12.

Gitea personal access token used to make API calls to send pull requests for translation updates.

GITLAB_CREDENTIALS

Добавлено в версии 4.3.

Список учётных данных для серверов GitLab’а.

Подсказка

Используйте этот параметр для того, чтобы Weblate мог взаимодействовать с одной машины с несколькими разными серверами GitLab, а не только с одним, как при использовании GITLAB_USERNAME и GITLAB_TOKEN.

GITLAB_CREDENTIALS = {
    "gitlab.com": {
        "username": "weblate",
        "token": "your-api-token",
    },
    "gitlab.example.com": {
        "username": "weblate",
        "token": "another-api-token",
    },
}

GITLAB_USERNAME

Имя пользователя GitLab, используемое для отправки запросов на слияние для обновления перевода.

GITLAB_TOKEN

Добавлено в версии 4.3.

GitLab’овский персональный токен доступа, используемый для вызовов API, необходимых для обновления перевода.

GITHUB_CREDENTIALS

Добавлено в версии 4.3.

Список учётных данных для серверов GitHub’а.

Подсказка

Используйте этот параметр для того, чтобы Weblate мог взаимодействовать с одной машины с несколькими разными серверами GitHub, а не только с одним, как при использовании GITHUB_USERNAME и GITHUB_TOKEN.

GITHUB_CREDENTIALS = {
    "api.github.com": {
        "username": "weblate",
        "token": "your-api-token",
    },
    "github.example.com": {
        "username": "weblate",
        "token": "another-api-token",
    },
}

GITHUB_USERNAME

Имя пользователя GitHub, используемое для отправки запросов на извлечение для обновления перевода.

GITHUB_TOKEN

Добавлено в версии 4.3.

GitHub’овский персональный токен доступа, используемый для вызовов API, необходимых для отправки запросов на извлечение для обновления перевода.

GOOGLE_ANALYTICS_ID

Идентификатор аналитики Google для включения мониторинга Weblate’а с помощью Google Analytics.

HIDE_REPO_CREDENTIALS

Скрыть учётные данные репозитория в веб-интерфейсе. В случае, если в URL репозитория содержится пользователь и пароль, Weblate спрячет их, когда соответствующая информация будет показываться пользователям.

Например, вместо https://user:password@git.example.com/repo.git будет показано просто https://git.example.com/repo.git. Аналогичным образом он пытается очистить и сообщения об ошибках системы контроля версий.

Примечание

По умолчанию этот параметр включён.

HIDE_VERSION

Добавлено в версии 4.3.1.

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

Скрытие версии — рекомендованная мера безопасности в некоторых корпорациях, хотя это и не предотвращает того, что атакующий сможет выяснить версию зондируя поведение системы.

Примечание

По умолчанию этот параметр выключен.

INTERLEDGER_PAYMENT_POINTERS

Добавлено в версии 4.12.1.

List of Interledger Payment Pointers (ILPs) for Web Monetization.

If multiple are specified, probabilistic revenue sharing is achieved by selecting one randomly.

Please check <https://webmonetization.org/> for more details.

Подсказка

The default value lets users fund Weblate itself.

IP_BEHIND_REVERSE_PROXY

Добавлено в версии 2.14.

Указывает, работает ли Weblate за обратным прокси.

Если установлен в ``True`, то Weblate получает IP адрес из заголовка, определённого параметром IP_PROXY_HEADER.

Предупреждение

Убедитесь, что вы и в самом деле используете обратный прокси и что он устанавливает этот заголовок, иначе пользователи смогут подделать IP адрес.

Примечание

По умолчанию этот параметр не включён.

IP_PROXY_HEADER

Добавлено в версии 2.14.

Указывает, из какого заголовка Weblate должен получить IP-адрес при включении параметра IP_BEHIND_REVERSE_PROXY.

По умолчанию установлен в HTTP_X_FORWARDED_FOR.

IP_PROXY_OFFSET

Добавлено в версии 2.14.

Указывает, какая часть параметра IP_PROXY_HEADER используется в качестве IP-адреса клиента.

В зависимости от вашей установки, этот заголовок может состоять из нескольких IP адресов (например, X-Forwarded-For: a, b, client-ip), и здесь вы можете настроить, какой адрес из заголовка используется в качестве IP адреса клиента.

Предупреждение

Задание этого параметра влияет на безопасность вашей установки, вы должны настроить его на использование только доверенных прокси для определения IP адреса.

По умолчанию установлен в 0.

LICENSE_EXTRA

Дополнительные лицензии для включения в список вариантов лицензий.

Примечание

Описание каждой лицензии должно быть кортежем, состоящим из её краткого наименования, длинного наименования и URL-адреса.

Например:

LICENSE_EXTRA = [
    (
        "AGPL-3.0",
        "GNU Affero General Public License v3.0",
        "https://www.gnu.org/licenses/agpl-3.0-standalone.html",
    ),
]

LICENSE_FILTER

Изменено в версии 4.3: Присваивание данному параметру пустой строки теперь отключает предупреждение о лицензиях.

Список с фильтром лицензий, которые надлежит показывать. Если задано пустое множество, то предупреждение о лицензиях отключается.

Примечание

Этот фильтр использует сокращённые имена лицензий.

Например:

LICENSE_FILTER = {"AGPL-3.0", "GPL-3.0-or-later"}

Следующее отключает предупреждение о лицензиях:

LICENSE_FILTER = set()

LICENSE_REQUIRED

Определяет, требуется ли атрибут лицензии в конфигурации компонента.

Примечание

По умолчанию этот параметр выключен.

LIMIT_TRANSLATION_LENGTH_BY_SOURCE_LENGTH

Whether the length of a given translation should be limited. The restriction is the length of the source string × 10 characters.

Подсказка

Set this to False to allow longer translations (up to 10,000 characters) irrespective of source string length.

Примечание

По умолчанию установлен в True.

LOCALIZE_CDN_URL и LOCALIZE_CDN_PATH

Эти параметры конфигурируют надстройку CDN локализации JavaScript’а. Параметр LOCALIZE_CDN_URL определяет корневой URL-адрес, по которому доступен CDN локализации, а параметр LOCALIZE_CDN_PATH определяет путь, по которому Weblate должен сохранять сгенерированные файлы, которые затем будут раздаваться с LOCALIZE_CDN_URL.

Подсказка

На Hosted Weblate для этого параметра используется значение https://weblate-cdn.com/.

LOGIN_REQUIRED_URLS

Список URL-адресов, для посещения которых требуется выполнить вход в Weblate (помимо встроенных в Weblate стандартных правил).

Подсказка

Он позволяет вам защитить паролем всю установку:

LOGIN_REQUIRED_URLS = (r"/(.*)$",)
REST_FRAMEWORK["DEFAULT_PERMISSION_CLASSES"] = [
    "rest_framework.permissions.IsAuthenticated"
]

Подсказка

Также желательно заблокировать доступ к API, как показано в примере выше.

См.также

REQUIRE_LOGIN

LOGIN_REQUIRED_URLS_EXCEPTIONS

Список исключений для LOGIN_REQUIRED_URLS. Если не указан, пользователям будет разрешён доступ к странице входа.

Некоторые исключения, которые вы, возможно, захотите включить:

LOGIN_REQUIRED_URLS_EXCEPTIONS = (
    r"/accounts/(.*)$",  # Required for sign in
    r"/static/(.*)$",  # Required for development mode
    r"/widgets/(.*)$",  # Allowing public access to widgets
    r"/data/(.*)$",  # Allowing public access to data exports
    r"/hooks/(.*)$",  # Allowing public access to notification hooks
    r"/api/(.*)$",  # Allowing access to API
    r"/js/i18n/$",  # JavaScript localization
)

MATOMO_SITE_ID

Идентификатор сайта в Matomo (бывший Piwik), который вы хотите отслеживать.

Примечание

Эта интеграция не поддерживает Matomo Tag Manager.

См.также

MATOMO_URL

MATOMO_URL

Полный URL-адрес (включая завершающую косую черту) установки Matomo (бывшего Piwik), которую вы хотите использовать для отслеживания использования Weblate. Для получения более подробной информации обратитесь к <https://matomo.org/>.

Подсказка

Эта интеграция не поддерживает Matomo Tag Manager.

Например:

MATOMO_SITE_ID = 1
MATOMO_URL = "https://example.matomo.cloud/"

См.также

MATOMO_SITE_ID

MT_SERVICES

Изменено в версии 3.0: Параметр был переименован с MACHINE_TRANSLATION_SERVICES на MT_SERVICES` для соответствия названиям других параметров машинного перевода.

Список включённых сервисов машинного перевода.

Примечание

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

Подсказка

При использовании контейнера Docker эта конфигурация генерируется автоматически на основе предоставленных ключей API, смотреть раздел Тома контейнеров Docker’а.

MT_SERVICES = (
    "weblate.machinery.apertium.ApertiumAPYTranslation",
    "weblate.machinery.deepl.DeepLTranslation",
    "weblate.machinery.glosbe.GlosbeTranslation",
    "weblate.machinery.google.GoogleTranslation",
    "weblate.machinery.libretranslate.LibreTranslateTranslation",
    "weblate.machinery.microsoft.MicrosoftCognitiveTranslation",
    "weblate.machinery.microsoftterminology.MicrosoftTerminologyService",
    "weblate.machinery.mymemory.MyMemoryTranslation",
    "weblate.machinery.tmserver.AmagamaTranslation",
    "weblate.machinery.tmserver.TMServerTranslation",
    "weblate.machinery.yandex.YandexTranslation",
    "weblate.machinery.weblatetm.WeblateTranslation",
    "weblate.machinery.saptranslationhub.SAPTranslationHub",
    "weblate.memory.machine.WeblateMemory",
)

MT_APERTIUM_APY

URL-адрес сервера Apertium-APy, https://wiki.apertium.org/wiki/Apertium-apy

MT_AWS_ACCESS_KEY_ID

Идентификатор ключа доступа к Amazon Translate.

MT_AWS_SECRET_ACCESS_KEY

Секретный ключ API к Amazon Translate.

MT_AWS_REGION

Название используемого региона для Amazon Translate.

MT_BAIDU_ID

Идентификатор клиента для API Baidu Zhiyun, вы можете зарегистрироваться по адресу https://api.fanyi.baidu.com/api/trans/product/index

MT_BAIDU_SECRET

Секрет клиента для API Baidu Zhiyun, вы можете зарегистрироваться по адресу https://api.fanyi.baidu.com/api/trans/product/index

MT_DEEPL_API_URL

Изменено в версии 4.7: Полный URL-адрес API теперь настраивается для использования бесплатного плана. Раньше настроить версию API можно было только с помощью MT_DEEPL_API_VERSION.

URL API для использования с сервисом DeepL. На момент написания статьи существует API вер. 1, а также бесплатная и платная версии API вер. 2.

https://api.deepl.com/v2/ (по умолчанию в Weblate)

Предназначена для использования через API на платном тарифном плане, а подписка основана на использовании.

https://api-free.deepl.com/v2/

Предназначена для использования через API на платном тарифном плане, а подписка основана на использовании.

https://api.deepl.com/v1/

Предназначена для CAT-инструментов и может быть использована с подпиской на пользователя.

Ранее Weblate классифицировался DeepL как CAT-инструмент, поэтому предполагалось использовать API версии v1, но теперь предполагается использовать API версии v2. Поэтому по умолчанию параметр имеет значение v2, но вы можете изменить его на v1 в случае, если у вас есть существующая CAT-подписка и вы хотите, чтобы Weblate использовал её.

Самый простой способ узнать, какой из них использовать, - открыть в браузере URL-адрес, подобный следующему:

https://api.deepl.com/v2/translate?text=Hello&target_lang=FR&auth_key=XXX

Замените XXX на ваш auth_key. Если вы получите объект JSON, содержащий «Bonjour», значит у вас правильный URL; если нет, попробуйте остальные три варианта.

MT_DEEPL_KEY

Ключ API для API DeepL, вы можете зарегистрироваться по адресу https://www.deepl.com/pro.html

MT_LIBRETRANSLATE_API_URL

Добавлено в версии 4.7.1.

URL-адрес API для используемого экземпляра LibreTranslate.

https://libretranslate.com/ (официальный публичный экземпляр)

Для использования вне сайта нужен ключ API.

Зеркала документированы в репозитории LibreTranslate GitHub, некоторые из них можно использовать без аутентификации:

https://github.com/LibreTranslate/LibreTranslate#user-content-mirrors

MT_LIBRETRANSLATE_KEY

Добавлено в версии 4.7.1.

API-ключ для экземпляра LibreTranslate, указанного в параметре MT_LIBRETRANSLATE_API_URL.

MT_GOOGLE_KEY

Ключ API для API переводчика Google версии v2, вы можете зарегистрироваться по адресу https://cloud.google.com/translate/docs

MT_GOOGLE_CREDENTIALS

JSON-файл учётных данных API версии v3, полученный в консоли облака Google. Пожалуйста, укажите полный путь в формате пути операционной системы. Учётные данные привязаны к сервису-учётной записи, связанной с определённым проектом. Для получения более подробной информации обратитесь по адресу https://cloud.google.com/docs/authentication/getting-started.

MT_GOOGLE_PROJECT

Идентификатор проекта API версии v3 облака Google с активированным тарифным планом и сервисом перевода. Для получения более подробной информации обратитесь по адресу https://cloud.google.com/appengine/docs/standard/nodejs/building-app/creating-project

MT_GOOGLE_LOCATION

API версии v3 App Engine облака Google может зависеть от местоположения. Измените его соответствующим образом, если значение по умолчанию global для вас не подходит.

Для получения более подробной информации обратитесь по адресу https://cloud.google.com/appengine/docs/locations

MT_MICROSOFT_BASE_URL

Базовый URL-адрес региона, как определено в разделе «Базовые URL-адреса».

По умолчанию равен api.cognitive.microsofttranslator.com для Azure Global.

Для Azure China используйте, пожалуйста, api.translator.azure.cn.

MT_MICROSOFT_COGNITIVE_KEY

Клиентский ключ для API переводчика Microsoft Cognitive Services.

MT_MICROSOFT_REGION

Префикс региона, как определено в разделе «Проверка подлинности с помощью ресурса с несколькими службами».

MT_MICROSOFT_ENDPOINT_URL

Конечная точка URL-адреса региона, как определено в разделе «Проверка подлинности с помощью маркера доступа».

По умолчанию равен api.cognitive.microsoft.com для Azure Global.

Для Azure China используйте, пожалуйста, свою конечную точку на портале Azure Portal.

MT_MODERNMT_KEY

Ключ API для движка машинного перевода ModernMT.

См.также

ModernMT MT_MODERNMT_URL

MT_MODERNMT_URL

URL-адрес ModernMT. По умолчанию для облачного сервиса используется https://api.modernmt.com/.

См.также

ModernMT MT_MODERNMT_KEY

MT_MYMEMORY_EMAIL

Идентификационный адрес электронной почты MyMemory. Разрешает выполнять 1000 запросов в день.

MT_MYMEMORY_KEY

Ключ доступа MyMemory для частной памяти переводов, используйте его совместно с параметром MT_MYMEMORY_USER.

MT_MYMEMORY_USER

Идентификатор пользователя MyMemory для частной памяти переводов, используйте его совместно с параметром MT_MYMEMORY_KEY.

MT_NETEASE_KEY

Ключ приложения для API NetEase Sight, вы можете зарегистрироваться по адресу https://sight.youdao.com/

MT_NETEASE_SECRET

Секрет приложения для API NetEase Sight, вы можете зарегистрироваться по адресу https://sight.youdao.com/

MT_TMSERVER

URL-адрес, по которому запущен tmserver.

MT_YANDEX_KEY

Ключ API для API Яндекс.Переводчика, вы можете зарегистрироваться по адресу https://yandex.ru/dev/translate/

MT_YOUDAO_ID

Идентификатор клиента для API Youdao Zhiyun, вы можете зарегистрироваться по адресу https://ai.youdao.com/product-fanyi-text.s.

MT_YOUDAO_SECRET

Секрет клиента для API Youdao Zhiyun, вы можете зарегистрироваться по адресу https://ai.youdao.com/product-fanyi-text.s.

MT_SAP_BASE_URL

URL-адрес API сервиса SAP Translation Hub.

MT_SAP_SANDBOX_APIKEY

Ключ API для использования API песочницы

MT_SAP_USERNAME

Ваше имя пользователя SAP

MT_SAP_PASSWORD

Ваш пароль SAP

MT_SAP_USE_MT

Использовать ли также сервисы машинного перевода в дополнение к терминологической базе данных. Возможные значения: True или False

NEARBY_MESSAGES

Сколько показывать строк около переводимой в настоящее время строки. Это просто значение по умолчанию, пользователи могут настроить его в своём профиле.

DEFAULT_PAGE_LIMIT

Добавлено в версии 4.7.

Количество элементов по умолчанию, отображаемых при активной нумерации страниц .

PAGURE_CREDENTIALS

Добавлено в версии 4.3.2.

Список учётных данных для серверов Pagure.

Подсказка

Используйте этот параметр для того, чтобы Weblate мог взаимодействовать с одной машины с несколькими разными серверами Pagure, а не только с одним, как при использовании PAGURE_USERNAME и PAGURE_TOKEN.

PAGURE_CREDENTIALS = {
    "pagure.io": {
        "username": "weblate",
        "token": "your-api-token",
    },
    "pagure.example.com": {
        "username": "weblate",
        "token": "another-api-token",
    },
}

PAGURE_USERNAME

Добавлено в версии 4.3.2.

Имя пользователя Pagure, используемое для отправки запросов на слияние для обновления перевода.

PAGURE_TOKEN

Добавлено в версии 4.3.2.

Pargue’вский персональный токен доступа, используемый для вызовов API, необходимых для обновления перевода.

PRIVACY_URL

Добавлено в версии 4.8.1.

URL-адрес, по которому ваш экземпляр Weblate показывает свою политику конфиденциальности.

Подсказка

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

Пример:

PRIVACY_URL = "https://weblate.org/terms/"

См.также

LEGAL_URL

RATELIMIT_ATTEMPTS

Добавлено в версии 3.2.

Максимальное количество попыток аутентификации до применения ограничения частоты запросов.

По умолчанию установлен в 5.

RATELIMIT_WINDOW

Добавлено в версии 3.2.

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

Количество секунд, по умолчанию равен 300 (5 минут).

RATELIMIT_LOCKOUT

Добавлено в версии 3.2.

Как долго аутентификация будет заблокирована после применения ограничения частоты запросов.

Количество секунд, по умолчанию равен 600 (10 минут).

REGISTRATION_ALLOW_BACKENDS

Добавлено в версии 4.1.

Список методов аутентификации (backends), с помощью которых доступна регистрация. Это вводит ограничения только на новые регистрации. Независимо от данного параметра пользователи смогут добавлять и использовать любые разрешённые в параметрах и настроенные методы аутентификации.

Рекомендуется держать параметр REGISTRATION_OPEN включённым, но ограничить доступные методы регистрации, иначе пользователи смогут регистрироваться, но Weblate не будет показывать ссылки на регистрацию в пользовательском интерфейсе.

Пример:

REGISTRATION_ALLOW_BACKENDS = ["azuread-oauth2", "azuread-tenant-oauth2"]

Подсказка

Имена бэкэндов совпадают с именами, используемыми в URL-адресах для аутентификации.

REGISTRATION_CAPTCHA

Значение, которое может быть равно только True или False, указывает, защищена ли регистрация новых учётных записей капчей. Этот параметр является необязательным и если он не указан, будет принято значение по умолчанию True.

Если он включён, ко всем страницам, на которых пользователь вводит свой адрес электронной почты, добавляется капча:

  • Регистрация новой учётной записи.

  • Восстановление пароля.

  • Добавление в учётную запись адреса электронной почты.

  • Контактная форма для пользователей, не вошедших в систему.

REGISTRATION_EMAIL_MATCH

Добавлено в версии 2.17.

Позволяет вам отфильтровать допустимые для регистрации адреса электронной почты.

По умолчанию равен .*, что позволяет зарегистрироваться с любым адресом электронной почты.

Вы можете использовать этот параметр для ограничения регистрации одним доменом электронной почты:

REGISTRATION_EMAIL_MATCH = r"^.*@weblate\.org$"

REGISTRATION_OPEN

Разрешена ли в настоящее время регистрация новых учётных записей. Этот необязательный параметр может остаться в значении по умолчанию True или быть изменённым на False.

Этот параметр влияет на встроенную аутентификацию по адресу электронной почты или через Python Social Auth (при помощи параметра REGISTRATION_ALLOW_BACKENDS вы можете занести определённые бэкэнды в белый список).

Примечание

При использовании сторонних методов аутентификации, вроде аутентификации через LDAP, этот параметр просто скрывает форму регистрации, но новые пользователи всё равно смогут входить в систему и создавать учётные записи.

REPOSITORY_ALERT_THRESHOLD

Добавлено в версии 4.0.2.

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

REQUIRE_LOGIN

Добавлено в версии 4.1.

Этот параметр включает LOGIN_REQUIRED_URLS и настраивает его так, что будет запрашиваться авторизация пользователя для всех API-вызовов REST.

Примечание

Этот параметр реализован в примере файла настроек. В Docker’е используйте переменную. WEBLATE_REQUIRE_LOGIN.

SENTRY_DSN

Добавлено в версии 3.9.

DSN Sentry для сбора отчетов об ошибках.

SIMPLIFY_LANGUAGES

Использовать простые коды языка для умолчательных комбинаций языка/страны. Например, при переводе ru_RU будет использоваться код языка ru. Обычно это желательное поведение, поскольку для таких умолчательных комбинаций оно упрощает перечисление языков.

Выключите этот параметр, если вы хотите разделять переводы для каждого варианта.

SITE_DOMAIN

Настраивает домен сайта. Это необходимо для получения корректных абсолютных ссылок во многих местах (например, в письмах активации, в уведомлениях или в RSS-каналах).

Если Weblate работает на нестандартном порту, добавьте его и сюда тоже.

Примеры:

# Production site with domain name
SITE_DOMAIN = "weblate.example.com"

# Local development with IP address and port
SITE_DOMAIN = "127.0.0.1:8000"

Примечание

Этот параметр должен содержать только доменное имя. Для настройки протокола (включения и принудительного включения HTTPS) используйте параметр ENABLE_HTTPS, а для изменения URL-адреса — параметр URL_PREFIX.

Подсказка

На контейнере Docker’а домен сайта настраивается через переменную окружения WEBLATE_ALLOWED_HOSTS.

SITE_TITLE

Заголовок сайта, который будет использоваться как на самом сайте, так и указываться в электронных письмах.

SPECIAL_CHARS

Дополнительные символы для включения в визуальную клавиатуру, смотрите раздел Визуальная клавиатура.

Значение по умолчанию:

SPECIAL_CHARS = ("\t", "\n", "\u00a0", "…")

SINGLE_PROJECT

Добавлено в версии 3.8.

Перенаправляет пользователей непосредственно в проект или компонент вместо отображения панели управления. Вы можете установить параметр в True, в этом случае он будет работать только в том случае, если в Weblate’е и в самом деле есть только один проект. Или же можно задать плашку проекта, тогда пользователь будет безоговорочно перенаправлен в этот проект.

Изменено в версии 3.11: Теперь параметр также принимает плашку проекта для принудительного отображения этого единственного проекта.

Пример:

SINGLE_PROJECT = "test"

SSH_EXTRA_ARGS

Добавлено в версии 4.9.

Позволяет добавлять пользовательские параметры, когда Weblate вызывает SSH. Это полезно при подключении к серверам, использующим устаревшее шифрование или другие нестандартные функции.

Например, когда SSH-соединение в Weblate не работает с сообщением Unable to negotiate with legacyhost: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1, вы можете включить его, используя:

SSH_EXTRA_ARGS = "-oKexAlgorithms=+diffie-hellman-group1-sha1"

Подсказка

Строка оценивается shell’ом, поэтому убедитесь, что все пробелы и специальные символы заключены в кавычки.

STATUS_URL

URL-адрес, по которому ваш экземпляр Weblate сообщает о своем статусе.

SUGGESTION_CLEANUP_DAYS

Добавлено в версии 3.2.1.

Автоматическое удаление предложения через заданное количество дней. По умолчанию установлен в ``None`, что означает отсутствие удалений.

UPDATE_LANGUAGES

Добавлено в версии 4.3.2.

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

URL_PREFIX

Этот параметр позволяет вам запускать Weblate по какому-либо пути (в противном случае он считает, что запущен из корня веб-сервера).

Примечание

Для использования этого параметра вам также нужно настроить ваш сервер на срезание этого префикса. Например, при использовании WSGI это можно сделать, установив псевдоним WSGIScriptAlias.

Подсказка

Префикс должен начинаться с символа /.

Пример:

URL_PREFIX = "/translations"

Примечание

Этот параметр не работает со встроенным сервером Django, чтобы он реагировал на этот префикс, вам придётся подправить urls.py.

VCS_BACKENDS

Настройка доступных систем контроля версий.

Примечание

Weblate пытается использовать все поддерживаемые системы, для которых у вас есть инструменты.

Подсказка

При помощи этого параметра вы можете ограничить их выбор или добавить пользовательские системы контроля версий.

VCS_BACKENDS = ("weblate.vcs.git.GitRepository",)

VCS_CLONE_DEPTH

Добавлено в версии 3.10.2.

Настраивает, насколько глубоким должно быть клонирование репозиториев Weblate’ом.

Примечание

В настоящее время этот параметр поддерживается только в Git. По умолчанию Weblate делает поверхностные клоны репозиториев, чтобы сделать клонирование быстрее и сэкономить место на диске. В зависимости от использования (например, при использовании пользовательских надстроек), вы можете захотеть увеличить глубину клонирования или полностью отключить поверхностное клонирование, что можно сделать, установив этот параметр в значение 0.

Подсказка

В случае, если вы при отправке коммитов из Weblate’а получили ошибку fatal: protocol error: expected old/new/ref, got 'shallow <commit hash>', полностью отключите поверхностные клоны, установив соответствующий параметр:

VCS_CLONE_DEPTH = 0

WEBLATE_ADDONS

Список доступных для использования надстроек. Чтобы использовать надстройку, нужно также включить её для конкретного компонента перевода. По умолчанию в список включены все встроенные надстройки. Если вы будете расширять список, то, вероятно, вы захотите оставить эти дополнения включёнными, например:

WEBLATE_ADDONS = (
    # Built-in add-ons
    "weblate.addons.gettext.GenerateMoAddon",
    "weblate.addons.gettext.UpdateLinguasAddon",
    "weblate.addons.gettext.UpdateConfigureAddon",
    "weblate.addons.gettext.MsgmergeAddon",
    "weblate.addons.gettext.GettextCustomizeAddon",
    "weblate.addons.gettext.GettextAuthorComments",
    "weblate.addons.cleanup.CleanupAddon",
    "weblate.addons.consistency.LangaugeConsistencyAddon",
    "weblate.addons.discovery.DiscoveryAddon",
    "weblate.addons.flags.SourceEditAddon",
    "weblate.addons.flags.TargetEditAddon",
    "weblate.addons.flags.SameEditAddon",
    "weblate.addons.flags.BulkEditAddon",
    "weblate.addons.generate.GenerateFileAddon",
    "weblate.addons.json.JSONCustomizeAddon",
    "weblate.addons.properties.PropertiesSortAddon",
    "weblate.addons.git.GitSquashAddon",
    "weblate.addons.removal.RemoveComments",
    "weblate.addons.removal.RemoveSuggestions",
    "weblate.addons.resx.ResxUpdateAddon",
    "weblate.addons.autotranslate.AutoTranslateAddon",
    "weblate.addons.yaml.YAMLCustomizeAddon",
    "weblate.addons.cdn.CDNJSAddon",
    # Add-on you want to include
    "weblate.addons.example.ExampleAddon",
)

Примечание

Удаление дополнения из этого списка не уберёт его из компонентов. В этом случае Weblate завершится крахом. Пожалуйста, уберите дополнение из всех компонентов прежде чем удалять его из данного списка.

WEBLATE_EXPORTERS

Добавлено в версии 4.2.

Список доступных экспортеров, предлагающих скачивание переводов или глоссариев в различных форматах файлов.

WEBLATE_FORMATS

Добавлено в версии 3.0.

Список доступных для использования форматов файлов.

Примечание

В списке по умолчанию уже есть распространённые форматы.

WEBLATE_GPG_IDENTITY

Добавлено в версии 3.1.

Идентификатор, используемый Weblate’ом для подписывания коммитов Git, например:

WEBLATE_GPG_IDENTITY = "Weblate <weblate@example.com>"

В GPG’шной связке ключей Weblate ищет соответствующий ключ (файл home/.gnupg в каталоге DATA_DIR). Если ключ не найден, он генерируется, подробнее смотрите в разделе Подписание коммитов Git с помощью GnuPG.

WEBSITE_REQUIRED

Определяет, нужно ли указывать Веб-сайт проекта при создании проекта. По умолчанию включено, так как это подходит для публичных серверов.

Пример файла настроек

Следующий пример поставляется с Weblate’ом в виде файла weblate/settings_example.py:

#
# Copyright © 2012–2022 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <https://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
#


import os
import platform
from logging.handlers import SysLogHandler

# Title of site to use
SITE_TITLE = "Weblate"

# Site domain
SITE_DOMAIN = ""

# Whether site uses https
ENABLE_HTTPS = False

#
# Django settings for Weblate project.
#

DEBUG = True

ADMINS = (
    # ("Your Name", "your_email@example.com"),
)

MANAGERS = ADMINS

DATABASES = {
    "default": {
        # Use "postgresql" or "mysql".
        "ENGINE": "django.db.backends.postgresql",
        # Database name.
        "NAME": "weblate",
        # Database user.
        "USER": "weblate",
        # Name of role to alter to set parameters in PostgreSQL,
        # use in case role name is different than user used for authentication.
        # "ALTER_ROLE": "weblate",
        # Database password.
        "PASSWORD": "",
        # Set to empty string for localhost.
        "HOST": "127.0.0.1",
        # Set to empty string for default.
        "PORT": "",
        # Customizations for databases.
        "OPTIONS": {
            # In case of using an older MySQL server,
            # which has MyISAM as a default storage
            # "init_command": "SET storage_engine=INNODB",
            # Uncomment for MySQL older than 5.7:
            # "init_command": "SET sql_mode='STRICT_TRANS_TABLES'",
            # Set emoji capable charset for MySQL:
            # "charset": "utf8mb4",
            # Change connection timeout in case you get MySQL gone away error:
            # "connect_timeout": 28800,
        },
        # Persistent connections
        "CONN_MAX_AGE": 0,
        # Disable server-side cursors, might be needed with pgbouncer
        "DISABLE_SERVER_SIDE_CURSORS": False,
    }
}

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# Data directory
DATA_DIR = os.path.join(BASE_DIR, "data")

# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = "UTC"

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = "en-us"

LANGUAGES = (
    ("ar", "العربية"),
    ("az", "Azərbaycan"),
    ("be", "Беларуская"),
    ("be@latin", "Biełaruskaja"),
    ("bg", "Български"),
    ("br", "Brezhoneg"),
    ("ca", "Català"),
    ("cs", "Čeština"),
    ("da", "Dansk"),
    ("de", "Deutsch"),
    ("en", "English"),
    ("el", "Ελληνικά"),
    ("en-gb", "English (United Kingdom)"),
    ("es", "Español"),
    ("fi", "Suomi"),
    ("fr", "Français"),
    ("gl", "Galego"),
    ("he", "עברית"),
    ("hu", "Magyar"),
    ("hr", "Hrvatski"),
    ("id", "Indonesia"),
    ("is", "Íslenska"),
    ("it", "Italiano"),
    ("ja", "日本語"),
    ("kab", "Taqbaylit"),
    ("kk", "Қазақ тілі"),
    ("ko", "한국어"),
    ("nb", "Norsk bokmål"),
    ("nl", "Nederlands"),
    ("pl", "Polski"),
    ("pt", "Português"),
    ("pt-br", "Português brasileiro"),
    ("ro", "Română"),
    ("ru", "Русский"),
    ("sk", "Slovenčina"),
    ("sl", "Slovenščina"),
    ("sq", "Shqip"),
    ("sr", "Српски"),
    ("sr-latn", "Srpski"),
    ("sv", "Svenska"),
    ("th", "ไทย"),
    ("tr", "Türkçe"),
    ("uk", "Українська"),
    ("zh-hans", "简体中文"),
    ("zh-hant", "正體中文"),
)

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = True

# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = True

# Type of automatic primary key, introduced in Django 3.2
DEFAULT_AUTO_FIELD = "django.db.models.AutoField"

# URL prefix to use, please see documentation for more details
URL_PREFIX = ""

# Absolute filesystem path to the directory that will hold user-uploaded files.
MEDIA_ROOT = os.path.join(DATA_DIR, "media")

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
MEDIA_URL = f"{URL_PREFIX}/media/"

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
STATIC_ROOT = os.path.join(DATA_DIR, "static")

# URL prefix for static files.
STATIC_URL = f"{URL_PREFIX}/static/"

# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    "django.contrib.staticfiles.finders.FileSystemFinder",
    "django.contrib.staticfiles.finders.AppDirectoriesFinder",
    "compressor.finders.CompressorFinder",
)

# Make this unique, and don't share it with anybody.
# You can generate it using weblate/examples/generate-secret-key
SECRET_KEY = ""

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "OPTIONS": {
            "context_processors": [
                "django.contrib.auth.context_processors.auth",
                "django.template.context_processors.debug",
                "django.template.context_processors.i18n",
                "django.template.context_processors.request",
                "django.template.context_processors.csrf",
                "django.contrib.messages.context_processors.messages",
                "weblate.trans.context_processors.weblate_context",
            ],
        },
        "APP_DIRS": True,
    }
]


# GitHub username and token for sending pull requests.
# Please see the documentation for more details.
GITHUB_USERNAME = None
GITHUB_TOKEN = None

# GitLab username and token for sending merge requests.
# Please see the documentation for more details.
GITLAB_USERNAME = None
GITLAB_TOKEN = None

# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.email.EmailAuth",
    # "social_core.backends.google.GoogleOAuth2",
    # "social_core.backends.github.GithubOAuth2",
    # "social_core.backends.bitbucket.BitbucketOAuth2",
    # "social_core.backends.suse.OpenSUSEOpenId",
    # "social_core.backends.ubuntu.UbuntuOpenId",
    # "social_core.backends.fedora.FedoraOpenId",
    # "social_core.backends.facebook.FacebookOAuth2",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Custom user model
AUTH_USER_MODEL = "weblate_auth.User"

# Social auth backends setup
SOCIAL_AUTH_GITHUB_KEY = ""
SOCIAL_AUTH_GITHUB_SECRET = ""
SOCIAL_AUTH_GITHUB_SCOPE = ["user:email"]

SOCIAL_AUTH_GITHUB_ORG_KEY = ""
SOCIAL_AUTH_GITHUB_ORG_SECRET = ""
SOCIAL_AUTH_GITHUB_ORG_NAME = ""

SOCIAL_AUTH_GITHUB_TEAM_KEY = ""
SOCIAL_AUTH_GITHUB_TEAM_SECRET = ""
SOCIAL_AUTH_GITHUB_TEAM_ID = ""

SOCIAL_AUTH_BITBUCKET_OAUTH2_KEY = ""
SOCIAL_AUTH_BITBUCKET_OAUTH2_SECRET = ""
SOCIAL_AUTH_BITBUCKET_OAUTH2_VERIFIED_EMAILS_ONLY = True

SOCIAL_AUTH_FACEBOOK_KEY = ""
SOCIAL_AUTH_FACEBOOK_SECRET = ""
SOCIAL_AUTH_FACEBOOK_SCOPE = ["email", "public_profile"]
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {"fields": "id,name,email"}

SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = ""
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = ""

# Social auth settings
SOCIAL_AUTH_PIPELINE = (
    "social_core.pipeline.social_auth.social_details",
    "social_core.pipeline.social_auth.social_uid",
    "social_core.pipeline.social_auth.auth_allowed",
    "social_core.pipeline.social_auth.social_user",
    "weblate.accounts.pipeline.store_params",
    "weblate.accounts.pipeline.verify_open",
    "social_core.pipeline.user.get_username",
    "weblate.accounts.pipeline.require_email",
    "social_core.pipeline.mail.mail_validation",
    "weblate.accounts.pipeline.revoke_mail_code",
    "weblate.accounts.pipeline.ensure_valid",
    "weblate.accounts.pipeline.remove_account",
    "social_core.pipeline.social_auth.associate_by_email",
    "weblate.accounts.pipeline.reauthenticate",
    "weblate.accounts.pipeline.verify_username",
    "social_core.pipeline.user.create_user",
    "social_core.pipeline.social_auth.associate_user",
    "social_core.pipeline.social_auth.load_extra_data",
    "weblate.accounts.pipeline.cleanup_next",
    "weblate.accounts.pipeline.user_full_name",
    "weblate.accounts.pipeline.store_email",
    "weblate.accounts.pipeline.notify_connect",
    "weblate.accounts.pipeline.password_reset",
)
SOCIAL_AUTH_DISCONNECT_PIPELINE = (
    "social_core.pipeline.disconnect.allowed_to_disconnect",
    "social_core.pipeline.disconnect.get_entries",
    "social_core.pipeline.disconnect.revoke_tokens",
    "weblate.accounts.pipeline.cycle_session",
    "weblate.accounts.pipeline.adjust_primary_mail",
    "weblate.accounts.pipeline.notify_disconnect",
    "social_core.pipeline.disconnect.disconnect",
    "weblate.accounts.pipeline.cleanup_next",
)

# Custom authentication strategy
SOCIAL_AUTH_STRATEGY = "weblate.accounts.strategy.WeblateStrategy"

# Raise exceptions so that we can handle them later
SOCIAL_AUTH_RAISE_EXCEPTIONS = True

SOCIAL_AUTH_EMAIL_VALIDATION_FUNCTION = "weblate.accounts.pipeline.send_validation"
SOCIAL_AUTH_EMAIL_VALIDATION_URL = f"{URL_PREFIX}/accounts/email-sent/"
SOCIAL_AUTH_LOGIN_ERROR_URL = f"{URL_PREFIX}/accounts/login/"
SOCIAL_AUTH_EMAIL_FORM_URL = f"{URL_PREFIX}/accounts/email/"
SOCIAL_AUTH_NEW_ASSOCIATION_REDIRECT_URL = f"{URL_PREFIX}/accounts/profile/#account"
SOCIAL_AUTH_PROTECTED_USER_FIELDS = ("email",)
SOCIAL_AUTH_SLUGIFY_USERNAMES = True
SOCIAL_AUTH_SLUGIFY_FUNCTION = "weblate.accounts.pipeline.slugify_username"

# Password validation configuration
AUTH_PASSWORD_VALIDATORS = [
    {
        "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"  # noqa: E501, pylint: disable=line-too-long
    },
    {
        "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
        "OPTIONS": {"min_length": 10},
    },
    {"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator"},
    {"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"},
    {"NAME": "weblate.accounts.password_validation.CharsPasswordValidator"},
    {"NAME": "weblate.accounts.password_validation.PastPasswordsValidator"},
    # Optional password strength validation by django-zxcvbn-password
    # {
    #     "NAME": "zxcvbn_password.ZXCVBNValidator",
    #     "OPTIONS": {
    #         "min_score": 3,
    #         "user_attributes": ("username", "email", "full_name")
    #     }
    # },
]

# Password hashing (prefer Argon)
PASSWORD_HASHERS = [
    "django.contrib.auth.hashers.Argon2PasswordHasher",
    "django.contrib.auth.hashers.PBKDF2PasswordHasher",
    "django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher",
    "django.contrib.auth.hashers.BCryptSHA256PasswordHasher",
]

# Allow new user registrations
REGISTRATION_OPEN = True

# Shortcut for login required setting
REQUIRE_LOGIN = False

# Middleware
MIDDLEWARE = [
    "weblate.middleware.RedirectMiddleware",
    "weblate.middleware.ProxyMiddleware",
    "django.middleware.security.SecurityMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",
    "weblate.accounts.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
    "social_django.middleware.SocialAuthExceptionMiddleware",
    "weblate.accounts.middleware.RequireLoginMiddleware",
    "weblate.api.middleware.ThrottlingMiddleware",
    "weblate.middleware.SecurityMiddleware",
    "weblate.wladmin.middleware.ManageMiddleware",
]

ROOT_URLCONF = "weblate.urls"

# Django and Weblate apps
INSTALLED_APPS = [
    # Weblate apps on top to override Django locales and templates
    "weblate.addons",
    "weblate.auth",
    "weblate.checks",
    "weblate.formats",
    "weblate.glossary",
    "weblate.machinery",
    "weblate.trans",
    "weblate.lang",
    "weblate_language_data",
    "weblate.memory",
    "weblate.screenshots",
    "weblate.fonts",
    "weblate.accounts",
    "weblate.configuration",
    "weblate.utils",
    "weblate.vcs",
    "weblate.wladmin",
    "weblate.metrics",
    "weblate",
    # Optional: Git exporter
    "weblate.gitexport",
    # Standard Django modules
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "django.contrib.admin.apps.SimpleAdminConfig",
    "django.contrib.admindocs",
    "django.contrib.sitemaps",
    "django.contrib.humanize",
    # Third party Django modules
    "social_django",
    "crispy_forms",
    "compressor",
    "rest_framework",
    "rest_framework.authtoken",
    "django_filters",
]

# Custom exception reporter to include some details
DEFAULT_EXCEPTION_REPORTER_FILTER = "weblate.trans.debug.WeblateExceptionReporterFilter"

# Default logging of Weblate messages
# - to syslog in production (if available)
# - otherwise to console
# - you can also choose "logfile" to log into separate file
#   after configuring it below

# Detect if we can connect to syslog
HAVE_SYSLOG = False
if platform.system() != "Windows":
    try:
        handler = SysLogHandler(address="/dev/log", facility=SysLogHandler.LOG_LOCAL2)
        handler.close()
        HAVE_SYSLOG = True
    except OSError:
        HAVE_SYSLOG = False

if DEBUG or not HAVE_SYSLOG:
    DEFAULT_LOG = "console"
else:
    DEFAULT_LOG = "syslog"
DEFAULT_LOGLEVEL = "DEBUG" if DEBUG else "INFO"

# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/stable/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
    "version": 1,
    "disable_existing_loggers": True,
    "filters": {"require_debug_false": {"()": "django.utils.log.RequireDebugFalse"}},
    "formatters": {
        "syslog": {"format": "weblate[%(process)d]: %(levelname)s %(message)s"},
        "simple": {"format": "[%(asctime)s: %(levelname)s/%(process)s] %(message)s"},
        "logfile": {"format": "%(asctime)s %(levelname)s %(message)s"},
        "django.server": {
            "()": "django.utils.log.ServerFormatter",
            "format": "[%(server_time)s] %(message)s",
        },
    },
    "handlers": {
        "mail_admins": {
            "level": "ERROR",
            "filters": ["require_debug_false"],
            "class": "django.utils.log.AdminEmailHandler",
            "include_html": True,
        },
        "console": {
            "level": "DEBUG",
            "class": "logging.StreamHandler",
            "formatter": "simple",
        },
        "django.server": {
            "level": "INFO",
            "class": "logging.StreamHandler",
            "formatter": "django.server",
        },
        "syslog": {
            "level": "DEBUG",
            "class": "logging.handlers.SysLogHandler",
            "formatter": "syslog",
            "address": "/dev/log",
            "facility": SysLogHandler.LOG_LOCAL2,
        },
        # Logging to a file
        # "logfile": {
        #     "level":"DEBUG",
        #     "class":"logging.handlers.RotatingFileHandler",
        #     "filename": "/var/log/weblate/weblate.log",
        #     "maxBytes": 100000,
        #     "backupCount": 3,
        #     "formatter": "logfile",
        # },
    },
    "loggers": {
        "django.request": {
            "handlers": ["mail_admins", DEFAULT_LOG],
            "level": "ERROR",
            "propagate": True,
        },
        "django.server": {
            "handlers": ["django.server"],
            "level": "INFO",
            "propagate": False,
        },
        # Logging database queries
        # "django.db.backends": {
        #     "handlers": [DEFAULT_LOG],
        #     "level": "DEBUG",
        # },
        "weblate": {"handlers": [DEFAULT_LOG], "level": DEFAULT_LOGLEVEL},
        # Logging VCS operations
        "weblate.vcs": {"handlers": [DEFAULT_LOG], "level": DEFAULT_LOGLEVEL},
        # Python Social Auth
        "social": {"handlers": [DEFAULT_LOG], "level": DEFAULT_LOGLEVEL},
        # Django Authentication Using LDAP
        "django_auth_ldap": {"handlers": [DEFAULT_LOG], "level": DEFAULT_LOGLEVEL},
        # SAML IdP
        "djangosaml2idp": {"handlers": [DEFAULT_LOG], "level": DEFAULT_LOGLEVEL},
    },
}

# Remove syslog setup if it's not present
if not HAVE_SYSLOG:
    del LOGGING["handlers"]["syslog"]

# List of machine translations
MT_SERVICES = (
    #     "weblate.machinery.apertium.ApertiumAPYTranslation",
    #     "weblate.machinery.baidu.BaiduTranslation",
    #     "weblate.machinery.deepl.DeepLTranslation",
    #     "weblate.machinery.glosbe.GlosbeTranslation",
    #     "weblate.machinery.google.GoogleTranslation",
    #     "weblate.machinery.googlev3.GoogleV3Translation",
    #     "weblate.machinery.libretranslate.LibreTranslateTranslation",
    #     "weblate.machinery.microsoft.MicrosoftCognitiveTranslation",
    #     "weblate.machinery.microsoftterminology.MicrosoftTerminologyService",
    #     "weblate.machinery.modernmt.ModernMTTranslation",
    #     "weblate.machinery.mymemory.MyMemoryTranslation",
    #     "weblate.machinery.netease.NeteaseSightTranslation",
    #     "weblate.machinery.tmserver.AmagamaTranslation",
    #     "weblate.machinery.tmserver.TMServerTranslation",
    #     "weblate.machinery.yandex.YandexTranslation",
    #     "weblate.machinery.saptranslationhub.SAPTranslationHub",
    #     "weblate.machinery.youdao.YoudaoTranslation",
    "weblate.machinery.weblatetm.WeblateTranslation",
    "weblate.memory.machine.WeblateMemory",
)

# Machine translation API keys

# URL of the Apertium APy server
MT_APERTIUM_APY = None

# DeepL API key
MT_DEEPL_KEY = None

# LibreTranslate
MT_LIBRETRANSLATE_API_URL = None
MT_LIBRETRANSLATE_KEY = None

# Microsoft Cognitive Services Translator API, register at
# https://portal.azure.com/
MT_MICROSOFT_COGNITIVE_KEY = None
MT_MICROSOFT_REGION = None

# ModernMT
MT_MODERNMT_KEY = None

# MyMemory identification email, see
# https://mymemory.translated.net/doc/spec.php
MT_MYMEMORY_EMAIL = None

# Optional MyMemory credentials to access private translation memory
MT_MYMEMORY_USER = None
MT_MYMEMORY_KEY = None

# Google API key for Google Translate API v2
MT_GOOGLE_KEY = None

# Google Translate API3 credentials and project id
MT_GOOGLE_CREDENTIALS = None
MT_GOOGLE_PROJECT = None

# Baidu app key and secret
MT_BAIDU_ID = None
MT_BAIDU_SECRET = None

# Youdao Zhiyun app key and secret
MT_YOUDAO_ID = None
MT_YOUDAO_SECRET = None

# Netease Sight (Jianwai) app key and secret
MT_NETEASE_KEY = None
MT_NETEASE_SECRET = None

# API key for Yandex Translate API
MT_YANDEX_KEY = None

# tmserver URL
MT_TMSERVER = None

# SAP Translation Hub
MT_SAP_BASE_URL = None
MT_SAP_SANDBOX_APIKEY = None
MT_SAP_USERNAME = None
MT_SAP_PASSWORD = None
MT_SAP_USE_MT = True

# Use HTTPS when creating redirect URLs for social authentication, see
# documentation for more details:
# https://python-social-auth-docs.readthedocs.io/en/latest/configuration/settings.html#processing-redirects-and-urlopen
SOCIAL_AUTH_REDIRECT_IS_HTTPS = ENABLE_HTTPS

# Make CSRF cookie HttpOnly, see documentation for more details:
# https://docs.djangoproject.com/en/1.11/ref/settings/#csrf-cookie-httponly
CSRF_COOKIE_HTTPONLY = True
CSRF_COOKIE_SECURE = ENABLE_HTTPS
# Store CSRF token in session
CSRF_USE_SESSIONS = True
# Customize CSRF failure view
CSRF_FAILURE_VIEW = "weblate.trans.views.error.csrf_failure"
SESSION_COOKIE_SECURE = ENABLE_HTTPS
SESSION_COOKIE_HTTPONLY = True
# SSL redirect
SECURE_SSL_REDIRECT = ENABLE_HTTPS
# Sent referrrer only for same origin links
SECURE_REFERRER_POLICY = "same-origin"
# SSL redirect URL exemption list
SECURE_REDIRECT_EXEMPT = (r"healthz/$",)  # Allowing HTTP access to health check
# Session cookie age (in seconds)
SESSION_COOKIE_AGE = 1000
SESSION_COOKIE_AGE_AUTHENTICATED = 1209600
SESSION_COOKIE_SAMESITE = "Lax"
# Increase allowed upload size
DATA_UPLOAD_MAX_MEMORY_SIZE = 50000000

# Apply session coookie settings to language cookie as ewll
LANGUAGE_COOKIE_SECURE = SESSION_COOKIE_SECURE
LANGUAGE_COOKIE_HTTPONLY = SESSION_COOKIE_HTTPONLY
LANGUAGE_COOKIE_AGE = SESSION_COOKIE_AGE_AUTHENTICATED * 10
LANGUAGE_COOKIE_SAMESITE = SESSION_COOKIE_SAMESITE

# Some security headers
SECURE_BROWSER_XSS_FILTER = True
X_FRAME_OPTIONS = "DENY"
SECURE_CONTENT_TYPE_NOSNIFF = True

# Optionally enable HSTS
SECURE_HSTS_SECONDS = 31536000 if ENABLE_HTTPS else 0
SECURE_HSTS_PRELOAD = ENABLE_HTTPS
SECURE_HSTS_INCLUDE_SUBDOMAINS = ENABLE_HTTPS

# HTTPS detection behind reverse proxy
SECURE_PROXY_SSL_HEADER = None

# URL of login
LOGIN_URL = f"{URL_PREFIX}/accounts/login/"

# URL of logout
LOGOUT_URL = f"{URL_PREFIX}/accounts/logout/"

# Default location for login
LOGIN_REDIRECT_URL = f"{URL_PREFIX}/"

# Anonymous user name
ANONYMOUS_USER_NAME = "anonymous"

# Reverse proxy settings
IP_PROXY_HEADER = "HTTP_X_FORWARDED_FOR"
IP_BEHIND_REVERSE_PROXY = False
IP_PROXY_OFFSET = 0

# Sending HTML in mails
EMAIL_SEND_HTML = True

# Subject of emails includes site title
EMAIL_SUBJECT_PREFIX = f"[{SITE_TITLE}] "

# Enable remote hooks
ENABLE_HOOKS = True

# By default the length of a given translation is limited to the length of
# the source string * 10 characters. Set this option to False to allow longer
# translations (up to 10.000 characters)
LIMIT_TRANSLATION_LENGTH_BY_SOURCE_LENGTH = True

# Use simple language codes for default language/country combinations
SIMPLIFY_LANGUAGES = True

# Render forms using bootstrap
CRISPY_TEMPLATE_PACK = "bootstrap3"

# List of quality checks
# CHECK_LIST = (
#     "weblate.checks.same.SameCheck",
#     "weblate.checks.chars.BeginNewlineCheck",
#     "weblate.checks.chars.EndNewlineCheck",
#     "weblate.checks.chars.BeginSpaceCheck",
#     "weblate.checks.chars.EndSpaceCheck",
#     "weblate.checks.chars.DoubleSpaceCheck",
#     "weblate.checks.chars.EndStopCheck",
#     "weblate.checks.chars.EndColonCheck",
#     "weblate.checks.chars.EndQuestionCheck",
#     "weblate.checks.chars.EndExclamationCheck",
#     "weblate.checks.chars.EndEllipsisCheck",
#     "weblate.checks.chars.EndSemicolonCheck",
#     "weblate.checks.chars.MaxLengthCheck",
#     "weblate.checks.chars.KashidaCheck",
#     "weblate.checks.chars.PunctuationSpacingCheck",
#     "weblate.checks.format.PythonFormatCheck",
#     "weblate.checks.format.PythonBraceFormatCheck",
#     "weblate.checks.format.PHPFormatCheck",
#     "weblate.checks.format.CFormatCheck",
#     "weblate.checks.format.PerlFormatCheck",
#     "weblate.checks.format.JavaScriptFormatCheck",
#     "weblate.checks.format.LuaFormatCheck",
#     "weblate.checks.format.ObjectPascalFormatCheck",
#     "weblate.checks.format.SchemeFormatCheck",
#     "weblate.checks.format.CSharpFormatCheck",
#     "weblate.checks.format.JavaFormatCheck",
#     "weblate.checks.format.JavaMessageFormatCheck",
#     "weblate.checks.format.PercentPlaceholdersCheck",
#     "weblate.checks.format.VueFormattingCheck",
#     "weblate.checks.format.I18NextInterpolationCheck",
#     "weblate.checks.format.ESTemplateLiteralsCheck",
#     "weblate.checks.angularjs.AngularJSInterpolationCheck",
#     "weblate.checks.icu.ICUMessageFormatCheck",
#     "weblate.checks.icu.ICUSourceCheck",
#     "weblate.checks.qt.QtFormatCheck",
#     "weblate.checks.qt.QtPluralCheck",
#     "weblate.checks.ruby.RubyFormatCheck",
#     "weblate.checks.consistency.PluralsCheck",
#     "weblate.checks.consistency.SamePluralsCheck",
#     "weblate.checks.consistency.ConsistencyCheck",
#     "weblate.checks.consistency.TranslatedCheck",
#     "weblate.checks.chars.EscapedNewlineCountingCheck",
#     "weblate.checks.chars.NewLineCountCheck",
#     "weblate.checks.markup.BBCodeCheck",
#     "weblate.checks.chars.ZeroWidthSpaceCheck",
#     "weblate.checks.render.MaxSizeCheck",
#     "weblate.checks.markup.XMLValidityCheck",
#     "weblate.checks.markup.XMLTagsCheck",
#     "weblate.checks.markup.MarkdownRefLinkCheck",
#     "weblate.checks.markup.MarkdownLinkCheck",
#     "weblate.checks.markup.MarkdownSyntaxCheck",
#     "weblate.checks.markup.URLCheck",
#     "weblate.checks.markup.SafeHTMLCheck",
#     "weblate.checks.placeholders.PlaceholderCheck",
#     "weblate.checks.placeholders.RegexCheck",
#     "weblate.checks.duplicate.DuplicateCheck",
#     "weblate.checks.source.OptionalPluralCheck",
#     "weblate.checks.source.EllipsisCheck",
#     "weblate.checks.source.MultipleFailingCheck",
#     "weblate.checks.source.LongUntranslatedCheck",
#     "weblate.checks.format.MultipleUnnamedFormatsCheck",
#     "weblate.checks.glossary.GlossaryCheck",
# )

# List of automatic fixups
# AUTOFIX_LIST = (
#     "weblate.trans.autofixes.whitespace.SameBookendingWhitespace",
#     "weblate.trans.autofixes.chars.ReplaceTrailingDotsWithEllipsis",
#     "weblate.trans.autofixes.chars.RemoveZeroSpace",
#     "weblate.trans.autofixes.chars.RemoveControlChars",
# )

# List of enabled addons
# WEBLATE_ADDONS = (
#     "weblate.addons.gettext.GenerateMoAddon",
#     "weblate.addons.gettext.UpdateLinguasAddon",
#     "weblate.addons.gettext.UpdateConfigureAddon",
#     "weblate.addons.gettext.MsgmergeAddon",
#     "weblate.addons.gettext.GettextCustomizeAddon",
#     "weblate.addons.gettext.GettextAuthorComments",
#     "weblate.addons.cleanup.CleanupAddon",
#     "weblate.addons.cleanup.RemoveBlankAddon",
#     "weblate.addons.consistency.LangaugeConsistencyAddon",
#     "weblate.addons.discovery.DiscoveryAddon",
#     "weblate.addons.autotranslate.AutoTranslateAddon",
#     "weblate.addons.flags.SourceEditAddon",
#     "weblate.addons.flags.TargetEditAddon",
#     "weblate.addons.flags.SameEditAddon",
#     "weblate.addons.flags.BulkEditAddon",
#     "weblate.addons.generate.GenerateFileAddon",
#     "weblate.addons.generate.PseudolocaleAddon",
#     "weblate.addons.generate.PrefillAddon",
#     "weblate.addons.json.JSONCustomizeAddon",
#     "weblate.addons.properties.PropertiesSortAddon",
#     "weblate.addons.git.GitSquashAddon",
#     "weblate.addons.removal.RemoveComments",
#     "weblate.addons.removal.RemoveSuggestions",
#     "weblate.addons.resx.ResxUpdateAddon",
#     "weblate.addons.yaml.YAMLCustomizeAddon",
#     "weblate.addons.cdn.CDNJSAddon",
# )

# E-mail address that error messages come from.
SERVER_EMAIL = "noreply@example.com"

# Default email address to use for various automated correspondence from
# the site managers. Used for registration emails.
DEFAULT_FROM_EMAIL = "noreply@example.com"

# List of URLs your site is supposed to serve
ALLOWED_HOSTS = ["*"]

# Configuration for caching
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        # If redis is running on same host as Weblate, you might
        # want to use unix sockets instead:
        # "LOCATION": "unix:///var/run/redis/redis.sock?db=1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PARSER_CLASS": "redis.connection.HiredisParser",
            # If you set password here, adjust CELERY_BROKER_URL as well
            "PASSWORD": None,
            "CONNECTION_POOL_KWARGS": {},
        },
        "KEY_PREFIX": "weblate",
    },
    "avatar": {
        "BACKEND": "django.core.cache.backends.filebased.FileBasedCache",
        "LOCATION": os.path.join(DATA_DIR, "avatar-cache"),
        "TIMEOUT": 86400,
        "OPTIONS": {"MAX_ENTRIES": 1000},
    },
}

# Store sessions in cache
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
# Store messages in session
MESSAGE_STORAGE = "django.contrib.messages.storage.session.SessionStorage"

# REST framework settings for API
REST_FRAMEWORK = {
    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    "DEFAULT_PERMISSION_CLASSES": [
        # Require authentication for login required sites
        "rest_framework.permissions.IsAuthenticated"
        if REQUIRE_LOGIN
        else "rest_framework.permissions.IsAuthenticatedOrReadOnly"
    ],
    "DEFAULT_AUTHENTICATION_CLASSES": (
        "rest_framework.authentication.TokenAuthentication",
        "weblate.api.authentication.BearerAuthentication",
        "rest_framework.authentication.SessionAuthentication",
    ),
    "DEFAULT_THROTTLE_CLASSES": (
        "weblate.api.throttling.UserRateThrottle",
        "weblate.api.throttling.AnonRateThrottle",
    ),
    "DEFAULT_THROTTLE_RATES": {"anon": "100/day", "user": "5000/hour"},
    "DEFAULT_PAGINATION_CLASS": ("rest_framework.pagination.PageNumberPagination"),
    "PAGE_SIZE": 20,
    "VIEW_DESCRIPTION_FUNCTION": "weblate.api.views.get_view_description",
    "UNAUTHENTICATED_USER": "weblate.auth.models.get_anonymous",
}

# Fonts CDN URL
FONTS_CDN_URL = None

# Django compressor offline mode
COMPRESS_OFFLINE = False
COMPRESS_OFFLINE_CONTEXT = [
    {"fonts_cdn_url": FONTS_CDN_URL, "STATIC_URL": STATIC_URL, "LANGUAGE_BIDI": True},
    {"fonts_cdn_url": FONTS_CDN_URL, "STATIC_URL": STATIC_URL, "LANGUAGE_BIDI": False},
]

# Require login for all URLs
if REQUIRE_LOGIN:
    LOGIN_REQUIRED_URLS = (r"/(.*)$",)

# In such case you will want to include some of the exceptions
# LOGIN_REQUIRED_URLS_EXCEPTIONS = (
#    rf"{URL_PREFIX}/accounts/(.*)$",  # Required for login
#    rf"{URL_PREFIX}/admin/login/(.*)$",  # Required for admin login
#    rf"{URL_PREFIX}/static/(.*)$",  # Required for development mode
#    rf"{URL_PREFIX}/widgets/(.*)$",  # Allowing public access to widgets
#    rf"{URL_PREFIX}/data/(.*)$",  # Allowing public access to data exports
#    rf"{URL_PREFIX}/hooks/(.*)$",  # Allowing public access to notification hooks
#    rf"{URL_PREFIX}/healthz/$",  # Allowing public access to health check
#    rf"{URL_PREFIX}/api/(.*)$",  # Allowing access to API
#    rf"{URL_PREFIX}/js/i18n/$",  # JavaScript localization
#    rf"{URL_PREFIX}/contact/$",  # Optional for contact form
#    rf"{URL_PREFIX}/legal/(.*)$",  # Optional for legal app
#    rf"{URL_PREFIX}/avatar/(.*)$",  # Optional for avatars
# )

# Silence some of the Django system checks
SILENCED_SYSTEM_CHECKS = [
    # We have modified django.contrib.auth.middleware.AuthenticationMiddleware
    # as weblate.accounts.middleware.AuthenticationMiddleware
    "admin.E408"
]

# Celery worker configuration for testing
# CELERY_TASK_ALWAYS_EAGER = True
# CELERY_BROKER_URL = "memory://"
# CELERY_TASK_EAGER_PROPAGATES = True
# Celery worker configuration for production
CELERY_TASK_ALWAYS_EAGER = False
CELERY_BROKER_URL = "redis://localhost:6379"
CELERY_RESULT_BACKEND = CELERY_BROKER_URL

# Celery settings, it is not recommended to change these
CELERY_WORKER_MAX_MEMORY_PER_CHILD = 200000
CELERY_BEAT_SCHEDULE_FILENAME = os.path.join(DATA_DIR, "celery", "beat-schedule")
CELERY_TASK_ROUTES = {
    "weblate.trans.tasks.auto_translate*": {"queue": "translate"},
    "weblate.accounts.tasks.notify_*": {"queue": "notify"},
    "weblate.accounts.tasks.send_mails": {"queue": "notify"},
    "weblate.utils.tasks.settings_backup": {"queue": "backup"},
    "weblate.utils.tasks.database_backup": {"queue": "backup"},
    "weblate.wladmin.tasks.backup": {"queue": "backup"},
    "weblate.wladmin.tasks.backup_service": {"queue": "backup"},
    "weblate.memory.tasks.*": {"queue": "memory"},
}

# Enable plain database backups
DATABASE_BACKUP = "plain"

# Enable auto updating
AUTO_UPDATE = False

# PGP commits signing
WEBLATE_GPG_IDENTITY = None

# Third party services integration
MATOMO_SITE_ID = None
MATOMO_URL = None
GOOGLE_ANALYTICS_ID = None
SENTRY_DSN = None
SENTRY_ENVIRONMENT = SITE_DOMAIN
AKISMET_API_KEY = None

Команды управления

Примечание

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

Основные команды управления доступны из скрипта ./manage.py в исходниках Django, или их расширенный набор из скрипта weblate, устанавливаемом поверх Weblate.

Вызов команд управления

Как упоминалось ранее, вызов команд зависит от того, как вы установили Weblate.

При использовании для Weblate’а виртуального окружения вы можете либо указать полный путь к команде weblate, либо перед вызовом активировать виртуальное окружение:

# Direct invocation
~/weblate-env/bin/weblate

# Activating virtualenv adds it to search path
. ~/weblate-env/bin/activate
weblate

Если вы напрямую используете исходный код (либо из tar-архива, либо из Git’а), то скрипт управления ./manage.py доступен из исходников Weblate’а. Для его запуска выполните следующую команду:

python ./manage.py list_versions

Если вы установили Weblate с помощью программы установки pip или pip3 или скрипта ./setup.py, команда weblate устанавливается в каталог, доступный через системную переменную окружения PATH (или через переменную PATH виртуального окружения), откуда вы можете использовать её для управления Weblate’ом:

weblate list_versions

В случае использования образа Docker’а скрипт устанавливается так же, как и выше, и вы можете запустить его с помощью команды docker exec:

docker exec --user weblate <container> weblate list_versions

Для команды docker-compose процесс аналогичен, достаточно использовать вызов docker-compose exec:

docker-compose exec --user weblate weblate weblate list_versions

В случае, если вам нужно передать ему файл, вы можете временно добавить том:

docker-compose exec --user weblate /tmp:/tmp weblate weblate importusers /tmp/users.json

add_suggestions

weblate add_suggestions <project> <component> <language> <file>

Добавлено в версии 2.5.

Импортирует перевод из файла, чтобы использовать его как предложение для данного перевода. Команда пропускает дубликаты перевода; добавляются только отличающиеся.

--author USER@EXAMPLE.COM

Электронная почта автора предложений. До выполнения импорта следует убедиться, что этот пользователь существует (при необходимости его можно создать через интерфейс администратора).

Пример:

weblate --author michal@cihar.com add_suggestions weblate application cs /tmp/suggestions-cs.po

auto_translate

weblate auto_translate <project> <component> <language>

Добавлено в версии 2.5.

Изменено в версии 4.6: Добавлен параметр для режима перевода.

Выполняет автоматический перевод на основе переводов других компонентов.

--source PROJECT/COMPONENT

Задает компонент, используемый в качестве доступных для перевода исходных строк. Если не задан, то используются все компоненты проекта.

--user USERNAME

Задаёт имя пользователя, указываемое в качестве автора переводов. Если не задан, используется «анонимный пользователь».

--overwrite

Перезаписывать ли существующие переводы.

--inconsistent

Перезаписывать ли существующие переводы с противоречивыми переводами (смотрите проверку Противоречия).

--add

Автоматически добавлять язык, если указанный перевод не существует.

--mt MT

В качестве машинного перевода использовать машинный перевод, а не перевод из других компонентов.

--threshold THRESHOLD

Порог сходства для машинного перевода, по умолчанию установлен в 80.

--mode MODE

Укажите режим перевода, по умолчанию перевести, но можно использовать неточный или предложение.

Пример:

weblate auto_translate --user nijel --inconsistent --source weblate/application weblate website cs

celery_queues

weblate celery_queues

Добавлено в версии 3.7.

Отображает длину очереди задач Celery.

checkgit

weblate checkgit <project|project/component>

Распечатывает текущее состояние внутреннего репозитория Git.

Вы можете либо задать конкретный проект или компонент для обновления (например, weblate/application), либо использовать ключ --all для обновления всех существующих компонентов.

commitgit

weblate commitgit <project|project/component>

Коммитит все возможные отложенные изменения во внутренний репозиторий Git.

Вы можете либо задать конкретный проект или компонент для обновления (например, weblate/application), либо использовать ключ --all для обновления всех существующих компонентов.

commit_pending

weblate commit_pending <project|project/component>

Коммитит отложенные изменения старше указанного возраста.

Вы можете либо задать конкретный проект или компонент для обновления (например, weblate/application), либо использовать ключ --all для обновления всех существующих компонентов.

--age HOURS

Возраст в часах для коммита. Если не указан, то используется значение, заданное в настройках компонента.

Примечание

Она автоматически выполняется Weblate’ом в фоновом режиме, поэтому вручную вызывать эту команду нет никакой реальной необходимости, кроме разве что принудительного выполнения коммита в более раннее время, чем задано в конфигурации компонента.

cleanuptrans

weblate cleanuptrans

Очищает осиротевшие проверки и предложения перевода. Обычно запускать её вручную нет необходимости, поскольку очистка происходит автоматически в фоновом режиме.

cleanup_ssh_keys

weblate cleanup_ssh_keys

Добавлено в версии 4.9.1.

Выполняет очистку сохранённых ключей хоста SSH:

  • Удаляет устаревшие RSA-ключи для GitHub, которые могли вызвать проблемы с подключением к GitHub.

  • Удаляет дублирующиеся записи в ключах хостов.

createadmin

weblate createadmin

Создаёт учётную запись admin со случайным паролем, если он не указан явно.

--password PASSWORD

Взять пароль из командной строки, случайный пароль в этом случае не генерируется.

--no-password

Не устанавливать пароль, это может быть полезно при запуске с ключом --update.

--username USERNAME

Использовать указанное имя вместо admin.

--email USER@EXAMPLE.COM

Указывает адрес электронной почты администратора.

--name

Указывает (отображаемое) имя администратора.

--update

Обновление существующего пользователя (вы можете использовать этот ключ для изменения паролей).

Изменено в версии 2.9: Добавлены параметры --username, --email, --name и --update.

dump_memory

weblate dump_memory

Добавлено в версии 2.20.

Экспортирует JSON-файл, содержащий содержимое памяти переводов Weblate’а.

dumpuserdata

weblate dumpuserdata <file.json>

Dumps userdata to a file for later use by importuserdata.

Подсказка

Она пригодится при переносе или слиянии экземпляров Weblate’а.

import_demo

weblate import_demo

Добавлено в версии 4.1.

Создаёт демонстрационный проект с компонентами на основе проекта <https://github.com/WeblateOrg/demo>.

Может быть полезна при разработке Weblate’а.

import_json

weblate import_json <json-file>

Добавлено в версии 2.7.

Пакетный импорт компонентов, основанных на данных из JSON.

Структура JSON импортируемого файла в значительной степени соответствует объекту компонента (смотрите GET /api/components/(string:project)/(string:component)/). Вы должны включить поля name и filemask.

--project PROJECT

Указывает, откуда будут импортироваться компоненты.

--main-component COMPONENT

Использовать указанный репозиторий системы контроля версий из этого компонента для всех остальных.

--ignore

Пропускать (уже) импортированные компоненты.

--update

Обновлять (уже) импортированные компоненты.

Изменено в версии 2.9: Параметры --ignore и --update существуют для работы с уже импортированными компонентами.

Пример JSON-файла:

[
  {
    "slug": "po",
    "name": "Gettext PO",
    "file_format": "po",
    "filemask": "po/*.po",
    "new_lang": "none"
  },
  {
    "name": "Android",
    "filemask": "android/values-*/strings.xml",
    "template": "android/values/strings.xml",
    "repo": "weblate://test/test",
    "file_format": "aresource"
  }
]

См.также

import_memory

import_memory

weblate import_memory <file>

Добавлено в версии 2.20.

Импортирует файл TMX или JSON в память переводов Weblate’а.

--language-map LANGMAP

Позволяет отобразить языки из TMX на память переводов Weblate’а. Коды языков отображаются после выполняемой Weblate’ом нормализации.

Например, --language-map ru_RU:ru импортирует все строки с языком ru_RU как строки с языком ru.

Это может быть полезно в том случае, если локали в ваших файлах TMX не совпадают с теми, которые вы используете в Weblate’е.

import_project

weblate import_project <project> <gitrepo> <branch> <filemask>

Изменено в версии 3.0: Команда import_project теперь основана на надстройке Обнаружение компонентов, что привело к некоторым изменениям в поведении и принимаемых параметрах.

Пакетный импорт компонентов в проект на основе маски файлов.

Параметр <project> определяет имя существующего проекта, в который будут импортированы компоненты.

Параметр <gitrepo> определяет URL-адрес используемого Git-репозитория, а <branch> — его ветку. Для импорта дополнительных компонентов перевода из существующего компонента Weblate’а используйте для параметра <gitrepo> адрес вида weblate://<проект>/<компонент>.

Параметр <filemask> определяет маску искомых файлов в репозитории. Он может быть либо простой строкой с подстановочными знаками, либо использовать всю мощь регулярных выражений.

Простое сопоставление использует ** для имени компонента и * для языка, например: **/*.po

Регулярное выражение должно содержать группы с именами component и language. Например: (?P<language>[^/]*)/(?P<component>[^-/]*)\.po

Импорт сопоставляет найденные файлы с существующими компонентами на основе имён файлов перевода в них и добавляет новые компоненты, которые до этого не существовали. Уже существующие компоненты он не меняет.

--name-template TEMPLATE

Задаёт имя компонента, используя синтаксис шаблонов Django.

Например: Документация: {{ component }}

--base-file-template TEMPLATE

Задаёт базовый файл для одноязычных переводов.

Например: {{ component }}/res/values/string.xml

--new-base-template TEMPLATE

Задаёт базовый файл для добавления новых переводов.

Например: {{ component }}/ts/en.ts

--file-format FORMAT

Также вы можете указать формат файла (смотрите раздел Поддерживаемые форматы файлов), по умолчанию используется автоматическое определение.

--language-regex REGEX

С помощью этого параметра можно указать языковой фильтр (смотрите раздел Настройки компонента). Должен быть правильным регулярным выражением.

--main-component

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

--license NAME

Указывает общую, проектную или компонентную лицензию на перевод.

--license-url URL

Указывает URL-адрес, по которому может быть найдена лицензия перевода.

--vcs NAME

В случае, если вам необходимо указать, какую использовать систему контроля версий, вы можете сделать это здесь. Система контроля версий по умолчанию — Git.

Примера ради, давайте попробуем импортировать пару проектов.

Первый — перевод Руководства Debian, в котором для каждого языка имеется отдельный каталог с переводами каждой главы:

weblate import_project \
    debian-handbook \
    git://anonscm.debian.org/debian-handbook/debian-handbook.git \
    squeeze/master \
    '*/**.po'

Далее инструмент Tanaguru, для которого необходимо указать формат файла, шаблон базового файла, а также то, что все компоненты и переводы расположены в одном каталоге:

weblate import_project \
    --file-format=properties \
    --base-file-template=web-app/tgol-web-app/src/main/resources/i18n/%s-I18N.properties \
    tanaguru \
    https://github.com/Tanaguru/Tanaguru \
    master \
    web-app/tgol-web-app/src/main/resources/i18n/**-I18N_*.properties

Более сложный пример разбора имён файлов для получения правильного компонента и языка из имени файла вида src/security/Numerous_security_holes_in_0.10.1.de.po:

weblate import_project \
    tails \
    git://git.tails.boum.org/tails master \
    'wiki/src/security/(?P<component>.*)\.(?P<language>[^.]*)\.po$'

Импорт переводов только на указанные языки:

./manage import_project \
    --language-regex '^(cs|sk)$' \
    weblate \
    https://github.com/WeblateOrg/weblate.git \
    'weblate/locale/*/LC_MESSAGES/**.po'

Импорт Sphinx-документации, разбитой на несколько файлов:

$ weblate import_project --name-template 'Documentation: %s' \
    --file-format po \
    project https://github.com/project/docs.git master \
    'docs/locale/*/LC_MESSAGES/**.po'

Импорт Sphinx-документации, разбитой на несколько файлов и каталогов:

$ weblate import_project --name-template 'Directory 1: %s' \
    --file-format po \
    project https://github.com/project/docs.git master \
    'docs/locale/*/LC_MESSAGES/dir1/**.po'
$ weblate import_project --name-template 'Directory 2: %s' \
    --file-format po \
    project https://github.com/project/docs.git master \
    'docs/locale/*/LC_MESSAGES/dir2/**.po'

См.также

Более подробные примеры можно найти в главе Знакомство с интернационализацией, в качестве альтернативы вы можете использовать команду import_json.

importuserdata

weblate importuserdata <file.json>

Импортирует данные пользователя из файла, созданного командой dumpuserdata

importusers

weblate importusers --check <file.json>

Импортирует пользователей из JSON-дампа Django базы данных auth_users.

--check

С этим параметром команда просто проверит, возможно ли импортировать данный файл, и сообщит о возможных конфликтах, связанных с именами пользователей или их адресами электронной почты.

Выгрузить пользователей из существующей установки Django вы можете при помощи команды:

weblate dumpdata auth.User > users.json

install_addon

Добавлено в версии 3.2.

weblate install_addon --addon ADDON <project|project/component>

Устанавливает надстройку для компонентов.

--addon ADDON

Названия устанавливаемого дополнения. Например, weblate.gettext.customize.

--configuration CONFIG

Настройки надстройки в виде JSON.

--update

Обновляет существующую конфигурацию надстройки.

Вы можете либо задать для какого конкретного компонента или проекта устанавливать надстройку (например, weblate/application), либо использовать ключ --all, чтобы установить её для всех компонентов.

Например, чтобы установить надстройку «Настройка вывода gettext» для всех компонентов, выполните:

weblate install_addon --addon weblate.gettext.customize --config '{"width": -1}' --update --all

См.также

Надстройки

list_languages

weblate list_languages <locale>

Выводит список поддерживаемых языков в разметке MediaWiki: коды языков, английские названия и локализованные названия.

Используется для генерации словаря с названиями языков.

list_translators

weblate list_translators <project|project/component>

Показывает переводчиков по языкам проекта:

[French]
Jean Dupont <jean.dupont@example.com>
[English]
John Doe <jd@example.com>
--language-code

Сортировать список по кодам языков, а не по их названиям.

Вы можете либо задать конкретный проект или компонент (например, weblate/application), либо использовать ключ --all, чтобы получить список всех переводчиков всех существующих компонентов.

list_versions

weblate list_versions

Выводит список всех зависимостей weblate и их версии.

loadpo

weblate loadpo <project|project/component>

Перезагружает переводы с диска (например, если вы внесли обновления в свою систему контроля версий).

--force

Принудительно обновлять файлы, даже если эти файлы и так уже должны были бы быть в актуальном состоянии.

--lang LANGUAGE

Ограничится обработкой только заданного языка.

Вы можете либо задать конкретный проект или компонент для обновления (например, weblate/application), либо использовать ключ --all для обновления всех существующих компонентов.

Примечание

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

lock_translation

weblate lock_translation <project|project/component>

Запрещает последующий перевод компонента.

Подсказка

Эта команда бывает полезна, когда вы хотите провести какое-нибудь тех. обслуживание нижележащего репозитория.

Вы можете либо задать конкретный проект или компонент для обновления (например, weblate/application), либо использовать ключ --all для обновления всех существующих компонентов.

См.также

unlock_translation

move_language

weblate move_language source target

Добавлено в версии 3.0.

Позволяет вам объединить содержимое разных языков. Это может быть полезно при переходе на новую версию, в которой появились псевдонимы для языков, созданных вручную ранее, тем, которым был присвоен суффикс (generated). Эта команда перемещает все содержимое языка source в язык target.

Пример:

weblate move_language cze cs

После перемещения содержимого вам следует проверить, не осталось ли что-то не перенесенное (т.к. при этом могло возникнуть состояние гонки, когда кто-то одновременно с вами обновляет репозиторий), и удалить язык, помеченный как (generated).

pushgit

weblate pushgit <project|project/component>

Отправляет закоммиченные изменения в вышестоящий репозиторий.

--force-commit

Принудительно закоммитить все ожидающие изменения перед тем как отправить их в вышестоящий репозиторий.

Вы можете либо задать конкретный проект или компонент для обновления (например, weblate/application), либо использовать ключ --all для обновления всех существующих компонентов.

Примечание

Weblate отправляет изменения автоматически, если отправка при коммите включена в настройках компонента (по умолчанию это так).

unlock_translation

weblate unlock_translation <project|project/component>

Разблокировывает данный компонент, делая его доступным для перевода.

Подсказка

Эта команда бывает полезна, когда вы хотите провести какое-нибудь тех. обслуживание нижележащего репозитория.

Вы можете либо задать конкретный проект или компонент для обновления (например, weblate/application), либо использовать ключ --all для обновления всех существующих компонентов.

См.также

lock_translation

setupgroups

weblate setupgroups

Задаёт группу по умолчанию и, опционально, переносит всех пользователей в эту группу.

--no-privs-update

Отключает автообновление существующих групп (только добавляет новые).

--no-projects-update

Предотвращает автоматическое обновление групп уже существующих проектов. Это даёт возможность добавлять свежесозданные группы к существующим проектам, смотреть раздел Управление доступом к проекту.

setuplang

weblate setuplang

Обновляет список определенных языков в Weblate.

--no-update

Отключает автообновление существующих языков (только добавляет новые).

updatechecks

weblate updatechecks <project|project/component>

Обновляет все проверки всех строк.

Подсказка

Полезна после обновлений Weblate, которые в значительной степени меняют проверки.

Вы можете либо задать конкретный проект или компонент для обновления (например, weblate/application), либо использовать ключ --all для обновления всех существующих компонентов.

updategit

weblate updategit <project|project/component>

Извлекает изменения из удалённого репозитория системы контроля версий в локальный и обновляет внутренний кеш.

Вы можете либо задать конкретный проект или компонент для обновления (например, weblate/application), либо использовать ключ --all для обновления всех существующих компонентов.

Примечание

Обычно лучше настроить обработчики уведомлений в репозитории вместо того, чтобы постоянно дергать updategit.

Объявления

Изменено в версии 4.0: В предыдущих выпусках эта функция называлась «доской сообщений».

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

Объявите цель, сроки, статус или укажите цели перевода.

Пользователи будут получать уведомления об объявлениях в отслеживаемых ими проектах (если только они не откажутся от получения таких уведомлений).

Это может быть полезно для различных вещей, начиная от объявления намерений веб-сайта и заканчивая указанием целей для перевода.

Объявления могут быть размещены на каждом уровне через меню Управлять при помощи его пункта Опубликовать объявление:

Image showing an announcement that reads: "Translations will be used only if they reach 60%" atop the dashboard view.

Также его можно добавить через интерфейс администратора:

_images/announcement.png

Объявления показываются в соответствии с заданным для них контекстом:

Контекст не указан

Показываются в панели управления (на странице входа).

Указан проект

Показываются внутри проекта, включая все его компоненты и переводы.

Указан компонент

Показываются для данного компонента и всех его переводов.

Указан язык

Показываются в обзоре по языку и во всех переводах на этот язык.

Вот как оно выглядит на странице обзора языка:

Image showing an announcement that reads: "Czech translators rock!" atop the Czech language overview.

Списки компонентов

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

Изменено в версии 2.20: Для каждого списка компонентов, присутствующего в панели управления, будет представлен свой статус.

Названия и содержимое списков компонентов можно указать в интерфейсе администратора в разделе Списки компонентов. Каждый список компонентов должен иметь название, отображаемое пользователю, и плашку, представляющую его в URL-адресе.

Изменено в версии 2.13: Для анонимных пользователей настройки панели управления изменяются из интерфейса администратора, в котором определяется, какая панель управления будет показана не аутентифицированным пользователям.

Автоматические списки компонентов

Добавлено в версии 2.13.

Автоматическое добавление компонентов в список на основе их плашки настраивается созданием правил Автоматического прикрепления списка компонентов.

  • Полезно для ведения списков компонентов для крупных установок, либо в случае, если вы хотите иметь в своей установке Weblate один список компонентов со всеми компонентами.

Подсказка

Создайте список компонентов, содержащий все компоненты вашей установки Weblate.

1. Define Automatic component list assignment with ^.*$ as regular expression in both the project and the component fields, as shown on this image:

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

Дополнительные модули Weblate

Для вашей установки доступно несколько дополнительных модулей.

Экспортер Git

Добавлено в версии 2.10.

Предоставляет доступ на чтение к нижележащему репозиторию Git через HTTP(S).

Установка

  1. Добавьте weblate.gitexport в установленные приложения в файле settings.py:

INSTALLED_APPS += ("weblate.gitexport",)
  1. Экспортируйте существующие репозитории, выполнив перено своей базы данных после установки:

weblate migrate

Использование

Этот модуль автоматически вставляет свои обработчики в Weblate и устанавливает URL репозитория в настройках компонента. Репозитории будут располагаться под «каталогом» URL Weblate /git/, например https://example.org/git/weblate/main/.

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

git clone 'https://example.org/git/weblate/main/'

Доступ к просмотру репозитория с ограниченным доступом (с Частным access control или когда REQUIRE_LOGIN включено) требуют API-токен, который можно получить в настройках своего профиля:

git clone 'https://user:KEY@example.org/git/weblate/main/'

Подсказка

По умолчанию у членов группы Пользователи и анонимных пользователей есть доступ к репозиториям публичных проектов через роли Доступ к репозиторию и Опытный пользователь.

Выставление счетов

Добавлено в версии 2.4.

Этот модуль используется на Облачном хостинге Weblate, для задания тарифных планов, а также отслеживания платежей и лимитов.

Установка

Добавьте weblate.billing в установленные приложения в файле settings.py:

INSTALLED_APPS += ("weblate.billing",)
  1. Запустите миграцию базы данных для необязательной установки для модуля дополнительных структур базы данных:

weblate migrate

Использование

После установки вы сможете в интерфейсе администратора управлять тарификацией. У пользователей с включенной функцией тарификации в их профиле появится новая вкладка Тарифный план.

Также модуль тарифных планов даёт возможность администраторам проектов создавать новые проекты и компоненты без прав суперпользователя (смотреть раздел Добавление проектов и компонентов перевода). Это становится возможным, если удовлетворены следующие условия:

  • Тариф не исчерпал заданные лимиты (любое избыточное использование ресурсов влечёт блокировку создания проектов/компонентов) и оплачен (если он не бесплатный)

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

При создании проекта пользователь может выбрать, к какому тарифу проект должен относиться, если у пользователя их несколько.

Аватары

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

В настоящее время Weblate поддерживает:

Защита от спама

Вы можете защититься от спама от пользователей, воспользовавшись сервисом Akismet.

  1. Установите Python-модуль akismet (он уже включён в официальный образ Docker).

  2. Получите API-ключ Akismet.

  3. Сохранить как AKISMET_API_KEY или WEBLATE_AKISMET_API_KEY в Docker.

Следующее содержимое отправляется на проверку в Akismet:

  • Предложения от неаутентифицированных пользователей

  • Описания проектов и компонентов и ссылки

Примечание

Защита (среди всего прочего) зависит от IP-адреса клиента, для правильной ее настройки, пожалуйста, смотрите раздел Работа за обратным прокси.

Подписание коммитов Git с помощью GnuPG

Добавлено в версии 3.1.

Все коммиты могут быть подписаны с помощью ключа GnuPG вашего экземпляра Weblate.

1. Turn on WEBLATE_GPG_IDENTITY. (Weblate will generate a GnuPG key when needed and will use it to sign all translation commits.)

Эта функция требует установки GnuPG 2.1 или новее.

Этот ключ будет хранится по пути, указанному в DATA_DIR, а открытый ключ будет отображаться на странице «О Weblate» (/about/):

_images/about-gpg.png

2. Alternatively you can also import existing keys into Weblate, just set HOME=$DATA_DIR/home when invoking gpg.

См.также

WEBLATE_GPG_IDENTITY

Ограничение частоты запросов

Изменено в версии 3.2: Модуль «Ограничение частоты запросов» теперь допускает более тонкую настройку.

Изменено в версии 4.6: Ограничение скорости больше не применяется к суперпользователям.

Некоторые операции Weblate ограничены по частоте. Допустимо не более RATELIMIT_ATTEMPTS попыток за период RATELIMIT_WINDOW секунд. Если это количество превышено, то пользователь блокируется на RATELIMIT_LOCKOUT секунд. Существуют также параметры, задающие ограничения, специфические для конкретных действий, например RATELIMIT_CONTACT_ATTEMPTS или RATELIMIT_TRANSLATE_ATTEMPTS. Следующая таблица является исчерпывающим списком таких параметров.

Следующие операции подвержены ограничению частоты запросов:

Имя

Область

Допустимо попыток

Временное окно

Период блокировки

Регистрация

REGISTRATION

5

300

600

Отправка сообщения администраторам

MESSAGE

5

300

600

Аутентификация по паролю при входе

LOGIN

5

300

600

Поиск по всему сайту

SEARCH

6

60

60

Перевод

TRANSLATE

30

60

600

Добавление в глоссарий

GLOSSARY

30

60

600

Начало перевода на новый язык

LANGUAGE

2

300

600

Создание нового проекта

PROJECT

5

600

600

If a user fails to sign in AUTH_LOCK_ATTEMPTS times, password authentication will be turned off on the account until having gone through the process of having its password reset.

Настройки можно также применить в Docker-контейнере, добавив префикс WEBLATE_ к имени настройки, например RATELIMIT_ATTEMPTS становится WEBLATE_RATELIMIT_ATTEMPTS.

Для API есть отдельные настройки ограничения количества запросов, смотреть раздел Ограничение частоты запросов API.

Интеграция Fedora Messaging

Fedora Messaging - это основанный на AMQP издатель всех изменений, происходящих в Weblate. С его помощью вы можете подключать дополнительные сервисы к изменениям, происходящим в Weblate.

Интеграция Fedora Messaging доступна в виде отдельного Python-модуля weblate-fedora-messaging. Пожалуйста, просмотрите <https://github.com/WeblateOrg/fedora_messaging/> для инструкций по настройке.

Настройка Weblate

Расширяйте и настраивайте Weblate, используя Django и Python. Вносите свои изменения в основной репозиторий Weblate’а, чтобы выгоду из них мог извлечь каждый. Кроме того, это снизит ваши затраты на поддержку этих изменений: в дальнейшем при изменении внутренних интерфейсов или рефакторинге поддержкой актуальности кода, включённого в Weblate, будут заниматься его кураторы.

Предупреждение

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

Создание модуля Python

Если вы не знакомы с Python’ом, возможно, вы захотите посмотреть статью Python для начинающих, в которой объясняются основы и указаны дальнейшие учебные пособия.

При написании собственного кода на Python (называемого модулем) его необходимо разместить в каталоге, находящемся либо где-то в системном пути (обычно это путь вида /usr/lib/python3.7/site-packages/), либо в каталоге Weblate’а, который также добавляется к путям поиска интерпретатора.

А ещё лучше превратить ваши модификации в полноценный пакет Python:

  1. Создайте каталог для вашего пакета (мы будем использовать weblate_customization).

  2. В нём создайте файл setup.py c описанием своего пакета:

    from setuptools import setup
    
    setup(
        name="weblate_customization",
        version="0.0.1",
        author="Your name",
        author_email="yourname@example.com",
        description="Sample Custom check for Weblate.",
        license="GPLv3+",
        keywords="Weblate check example",
        packages=["weblate_customization"],
    )
    
  3. Создайте каталог для модуля Python (также назовем его weblate_customization), в котором будет содержаться ваш код.

  4. В нём создайте файл __init__.py, чтобы Python смог импортировать этот модуль.

  5. Теперь этот пакет можно установить командой pip install -e. Более подробную информацию можно найти в документе «Редактируемые» установки.

  6. После установки этот модуль можно использовать в настройках Weblate’а (например, weblate_customization.checks.FooCheck).

Структура вашего модуля должна выглядеть примерно так:

weblate_customization
├── setup.py
└── weblate_customization
    ├── __init__.py
    ├── addons.py
    └── checks.py

Пример настройки Weblate’а можно найти по адресу <https://github.com/WeblateOrg/customize-example>, он охватывает все описанные ниже темы.

Пользовательские проверки качества, надстройки и автоматические исправления

Для добавления в Weblate собственного кода для автоматических исправлений, проверок или надстроек:

  1. Поместите файлы в модуль Python, содержащий вашу модификацию Weblate’а (смотрите раздел Создание модуля Python).

  2. Добавьте полное имя нужного класса Python к соответствующему параметру (WEBLATE_ADDONS, CHECK_LIST или AUTOFIX_LIST):

# Checks
CHECK_LIST += ("weblate_customization.checks.FooCheck",)

# Autofixes
AUTOFIX_LIST += ("weblate_customization.autofix.FooFixer",)

# Add-ons
WEBLATE_ADDONS += ("weblate_customization.addons.ExamplePreAddon",)

Интерфейс управления

Интерфейс управления даёт доступ к настройкам для администраторов. Он расположен по URL-адресу /manage/. Доступ к нему может получить только пользователь, вошедший в систему с правами администратора, через иконку гаечного ключа справа вверху:

_images/support.png

Он включает базовый обзор вашего Weblate:

Интерфейс администратора Django

Предупреждение

В будущем будет удалён, поскольку его использование не рекомендуется — большинством возможностей можно управлять непосредственно из Weblate’а.

Здесь вы можете управлять объектами, хранящимися в базе данных, такими как пользователи или переводы, а также другими настройками:

_images/admin.png

В разделе Отчёты вы можете проверить статус вашего сайта, настроить его для рабочей среды, или управлять ключами SSH, используемыми для доступа к репозиториям.

Управление объектами базы данных под любым разделом. Самым интересным из них является, наверное, Переводы Weblate’а, в котором можно управлять переводимыми проектами, смотрите разделы Настройки проекта и Настройки компонента.

Раздел Языки Weblate содержит определения языков, более подробное объяснение смотрите в разделе Определение языков.

Добавление проекта

Добавление проекта служит контейнером для всех компонентов. Обычно вы создаёте один проект для одной части программного обеспечения или книги (для справки по параметрам смотрите раздел Настройки проекта):

_images/add-project.png

Двуязычные компоненты

После добавления проекта в него можно добавить компоненты перевода (для справки по параметрам смотрите раздел Настройки компонента):

_images/add-component.png

Одноязычные компоненты

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

_images/add-component-mono.png

Получение поддержки по Weblate

Weblate — это свободное программное обеспечение с поддержкой сообщества, выпускаемое на условиях авторского права. Подписчики получают приоритетную поддержку без дополнительной оплаты. Предоплаченные пакеты помощи доступны для всех. Более подробную информацию о текущих предложениях поддержки вы можете найти по адресу <https://weblate.org/support/>.

Интегрированная поддержка

Добавлено в версии 3.8.

Приобретенный пакет платной поддержки может быть, по вашему желанию, интегрирован в ваш интерфейс управления подпиской Weblate, где вы найдете на него ссылку. В этом случае основные сведенья о вашей установке будут переданы Weblate.

_images/support.png

Данные передаваемые Weblate

  • URL, на котором настроен ваш экземпляр Weblate

  • Заголовок вашего сайта

  • Ваша версия Weblate

  • Колличество некоторых объектов в вашей базе данных Wablate (проектов, компонентов, языков, исходных строк и пользователей)

  • Открытый SSH-ключ

Кроме того, когда Навигатор Weblate включен:

  • Список общественных проектов (название, URL и веб-сайт)

Ни какая другая информация не передаётся.

Доступные сервисы при включении интеграции

Подсказка

Платные пакеты поддержки уже активирован сразу после приобретения. Их можно использовать и без интеграции.

Навигатор Weblate

Добавлено в версии 4.5.2.

Примечание

В настоящее время эта функция находится в стадии раннего бета-тестирования.

Навигатор Weblate - это услуга, которая облегчает пользователям поиск серверов и сообществ Weblate. Пользователи могут просматривать зарегистрированные сервисы на <https://weblate.org/discover/> и находить там проекты для участия.

Попадание в список

Подсказка

Участие в навигаторе Weblate заставляет Weblate передавать некоторую информацию о вашем сервере, смотреть раздел Данные передаваемые Weblate.

Чтобы включить сервер с активной подпиской на поддержку (смотреть раздел Интегрированная поддержка) в навигаторе Weblate, достаточно включить этот параметр в панели управления:

_images/support-discovery.png

Размещение сервера без подписки на поддержку в навигаторе Weblate:

  1. Зарегистрироваться на <https://weblate.org/user/>

  2. Зарегистрируйте свой сервер Weblate в базе данных навигатора на <https://weblate.org/subscription/discovery/>

  3. Подтвердите активацию услуги в вашем Weblate и включите в список навигатора на странице управления Weblate с помощью кнопки Включить обнаружение:

_images/support-discovery.png

Настройка списка

Вы можете настроить список, предоставив текст и изображение (570 x 260 пикселей) на <https://weblate.org/user/>.

Знакомство с интернационализацией

У вас есть проект и вы хотите перевести его на несколько языков? Это руководство вам в этом поможет. В нём приведены несколько типовых ситуаций, но большинство примеров достаточно общие, так что они могут быть применены и в других случаях.

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

И последнее, но не менее важное: иногда в переведённую строку может понадобиться добавить некий контекст. Представьте себе, что переводчик получил для перевода строку Sun. Без контекста большинство людей перевели бы её как «Солнце», подразумевая, что речь идёт о нашей ближайшей звезде, но на самом деле она могла бы быть аббревиатурой для воскресенья (Sunday).

Выбор фреймворка интернационализации

Выбирайте тот фреймворк, который является стандартом для вашей платформы, постарайтесь не изобретать заново колесо, создавая свой собственный фреймворк для работы с локализациями. Weblate поддерживает большинство широко используемых фреймворков, подробнее смотрите раздел Поддерживаемые форматы файлов (особенно его подраздел Возможности типов переводов).

Наши личные рекомендации для некоторых платформ приведены в следующей таблице. Эти рекомендации основаны на нашем опыте, но он не всеобъемлющ, поэтому, когда делаете выбор, всегда учитывайте своё окружение.

Платформа

Рекомендуемый формат

Android

Строковые ресурсы Android

iOS

Строки Apple iOS

Qt

Файлы .ts Qt Linguist

Python

GNU gettext

PHP

GNU gettext 1

C/C++

GNU gettext

C#

.XML-файлы ресурсов

Perl

GNU gettext

Ruby

Файлы Ruby YAML

Расширения браузеров

JSON-файлы WebExtension

Java

XLIFF 2

JavaScript

JSON -файлы i18next 3

1

Родная поддержка Gettext в PHP содержит множество ошибок и часто отсутствует в сборках под Windows, так что вместо неё мы рекомендуем использовать стороннюю библиотеку motranslator.

2

Также, если множественные числа вам не нужны, вы можете использовать Файлы свойств Java.

3

Также, если множественные числа вам не нужны, вы можете использовать простой JSON-файлы.

Более подробно рабочий процесс для некоторых форматов описан в следующих главах:

Интеграция с Weblate

Основы Weblate

Структура проектов и компонентов

Переводы в Weblate организованы по проектам и компонентам. Каждый проект может содержать несколько компонентов, а те — переводы на отдельные языки. Компоненту соответствует один переводимый файл (например, GNU gettext или Строковые ресурсы Android). Проекты служат для организации компонентов в логические наборы (например, для группировки всех переводов, используемых в одном приложении).

Внутри каждого проекта переводы общих строк по умолчанию распространяются на другие его компоненты. Это облегчает бремя повторного и много-версионного перевода. Если в вашем проекте перевод в разных компонентов должен отличаться, то такое «распространение» можно отключить в настройках компонента с помощью параметра «Разрешить распространение перевода».

Импорт проекта локализации в Weblate

Weblate разрабатывался с прицелом на интеграцию с системами контроля версий, как его основной функциональной особенности. Так что, самый простой способ выполнить такую интеграцию — дать Weblate право доступа к вашему репозиторию. Этот процесс импорта проведёт вас через процедуру настройки вашего перевода в виде отдельных компонентов.

В качестве альтернативы вы можете настроить локальный репозиторий Weblate, который будет содержать все переводы без необходимости интегрировать его с основным репозиторием.

Извлечение обновлённых переводов из Weblate

Для получения обновлённых строк из Weblate вы можете просто извлечь изменения из встроенного репозитория (либо напрямую из файловой системы, либо его можно сделать доступным через Экспортер Git). До этого вы можете захотеть закоммитить любые отложенные изменения (смотрите раздел Отложенные коммиты). Вы можете сделать это либо через пользовательский интерфейс (в разделе Обслуживание репозитория), либо из командной строки при помощи клиента Weblate.

Эти действия можно автоматизировать, если вы предоставите Weblate доступ на отправку изменений в ваш репозиторий и настроите URL для отправки в настройках компонента; смотреть раздел Отправка изменений из Weblate’а.

В качестве альтернативы, вы можете обновлять свои переводы до их последней версии через REST API Weblate’а.

Загрузка удалённых изменений в Weblate

Для загрузки строк, которые недавно были обновлены в вашем репозитории в Weblate, просто позвольте ему извлечь их из вышестоящего репозитория. Это можно сделать либо через пользовательский интерфейс (на странице Обслуживание репозитория), либо из командной строки при помощи клиента Weblate.

Это действие можно автоматизировать, настроив в вашем репозитории веб-обработчика, которые уведомит Weblate о появлении нового коммита; подробнее смотрите в разделе Обновление репозиториев.

Если вы не используете интеграцию с системой контроля версий, то вы можете обновлять свои переводы в соответствии с вашей кодовой базой через пользовательский интерфейс или REST API Weblate’а.

Добавление новых строк

Если ваши файлы перевода хранятся в системе контроля версий вместе с исходным кодом, то скорей всего у вас уже есть свой устоявшийся метод добавления новых строк разработчиками. Хотя вы и можете использовать любой метод на свой вкус, но рассмотрите возможность делать это с помощью метода, описанного в разделе «Контроль качества исходных строк», дабы избегать ошибок.

Если файлы перевода отделены от исходного кода, то существуют следующие способы добавления новых строк в Weblate:

  • Manually, using Add new translation string from Tools menu in the source language.

  • Programmatically, using API POST /api/translations/(string:project)/(string:component)/(string:language)/units/.

  • Загрузив исходный файл через Заменить существующий файл перевода (это перезапишет существующие строки, так что удостоверьтесь сначала, что в файле есть и старые и новые строки) или Добавить новые строки; смотреть раздел Способы импорта.

Примечание

Будет ли доступно добавление строк через Weblate зависит от параметра «Управление строками».

Обновление файлов целевых языков

For monolingual files (see Поддерживаемые форматы файлов) Weblate might add new translation strings not present in the Одноязычный базовый файл, and not in actual translations. It does not however perform any automatic cleanup of stale strings as that might have unexpected outcomes. If you want to do this, please install Очистка файлов перевода add-on which will handle the cleanup according to your requirements.

Weblate also will not try to update bilingual files in any way, so if you need po files being updated from pot, you need to do it yourself using Update source strings Способы импорта or using Обновлять PO-файлы до соответствия POT (msgmerge) add-on.

Управление репозиторием контроля версий

Weblate хранит все переводы в репозитории контроля версий. Оно может быть связано с предыдущим или быть только внутренним. Раздел Обслуживание репозитория позволяет вам работать с репозиторием.

Подсказка

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

_images/component-repository.png

Доступны следующие операции:

Коммит

Коммитить все незавершённые изменения, находящиеся в базе данных Weblate, но не в репозитории, смотреть раздел Отложенные коммиты.

Отправка

Отправляет изменения в вышестоящий репозиторий, если настроено по URL для отправки в репозиторий.

Обновление, Извлечение, Смена базы

Обновляет репозиторий Weblate с изменениями в восходящем потоке. Он использует Стиль слияния при выборе Обновления или вы можете выбрать другой из выпадающего меню.

Заблокировать

Блокировка не позволяет переводчикам вносить изменения

Сброс из Обслуживания

Сбрасывает все изменения, сделанные в Weblate, в соответствии с вышестоящем репозиторием. При этом отбрасываются все переводы, сделанные в Weblate и не присутствующие в вышестоящем репозитории.

Очистка из Обслуживания

Удаляет неотслеживаемые файлы из репозитория. Они могут быть результатом неправильной работы надстроек или ошибок.

Синхронизировать принудительно из Обслуживания

Принудительная запись всех строк в файлы перевода. Используется, когда файлы репозитория по какой-то причине не синхронизируются с Weblate.

Перевод программ с помощью GNU gettext

GNU gettext является одним из наиболее широко используемых инструментов интернационализации свободного программного обеспечения. Он предоставляет простой, но гибкий способ локализации программного обеспечения. Он имеет отличную поддержку форм множественного числа, может добавлять к переводимым строкам дополнительный контекст и на его основе построено довольно большое количество инструментов. И конечно, он имеет отличную поддержку в Weblate (смотрите описание формата файла GNU gettext).

Примечание

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

GNU gettext можно использовать со множеством различных языков (C, Python, PHP, Ruby, JavaScript и со многими другими), и обычно во фреймворках пользовательского интерфейса уже есть некоторая его поддержка. Стандартным его использованием является вызов функции gettext(), которая часто сокращается до своего псевдонима _(), чтобы сделать код более простым и лёгким для чтения.

Дополнительно он предоставляет вызовы pgettext(), позволяющий предоставлять дополнительный контекст для переводчиков, и ngettext(), который умеет обрабатывать формы множественного числа по правилам целевого языка.

Как широко распространённый инструмент, для него существует множество обёрток, значительно упрощающих его использование; вместо описанного ниже ручного вызова gettext, вы, возможно, захотите попробовать одну из них, например, intltool.

Общий обзор последовательности действий

GNU gettext использует несколько файлов для того чтобы управлять процессом локализации:

  • В PACKAGE.pot находятся строки, извлечённые из вашего исходного кода; обычно это делается с помощью xgettext или какой-нибудь высокоуровневой обёрткой для него вроде intltool.

  • В LANGUAGE.po находятся строки с переводом на конкретный язык. Его нужно обновлять с помощью msgmerge после каждого обновления PACKAGE.pot. Вы можете создать новый файл языка с помощью msginit или прямо через Weblate.

  • LANGUAGE.mo contains binary representation of LANGUAGE.po and is used at application runtime. Typically it is not kept under version control, but generated at compilation time using msgfmt. In case you want to have it in the version control, you can generate it in Weblate using Создание MO-файлов add-on.

В общем последовательность действий при работе с GNU gettext выглядит так:

digraph translations { graph [fontname = "sans-serif", fontsize=10]; node [fontname = "sans-serif", fontsize=10, shape=note, margin=0.1, height=0]; edge [fontname = "monospace", fontsize=10]; "Source code" -> "PACKAGE.pot" [label=" xgettext "]; "PACKAGE.pot" -> "LANGUAGE.po" [label=" msgmerge "]; "LANGUAGE.po" -> "LANGUAGE.mo" [label=" msgfmt "]; }

См.также

Обзор GNU gettext

Пример программы

Простая программа на C, использующая gettext, может выглядеть следующим образом:

#include <libintl.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int count = 1;
    setlocale(LC_ALL, "");
    bindtextdomain("hello", "/usr/share/locale");
    textdomain("hello");
    printf(
        ngettext(
            "Orangutan has %d banana.\n",
            "Orangutan has %d bananas.\n",
            count
        ),
        count
    );
    printf("%s\n", gettext("Thank you for using Weblate."));
    exit(0);
}

Извлечение строк для перевода

После того, как вы добавите в свой код вызововы gettext, вы можете извлечь сообщения из нег и записать их в .pot-файлы с помощью xgettext :

$ xgettext main.c -o po/hello.pot

Примечание

Существуют альтернативные программы для извлечения строк из кода, например pybabel.

После этого вызова создастся шаблонный файл, который можно использовать для начала новых переводов (используя программу msginit) или обновления существующих после изменения кода (для этого можно использовать программу msgmerge). В результате получается простой структурированный текстовый файл:

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-10-23 11:02+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"

#: main.c:14
#, c-format
msgid "Orangutan has %d banana.\n"
msgid_plural "Orangutan has %d bananas.\n"
msgstr[0] ""
msgstr[1] ""

#: main.c:20
msgid "Thank you for using Weblate."
msgstr ""

Каждая запись с msgid в начале определяет переводимую строку текста, специальная пустая запись в начале файла — это заголовок файла, содержащий метаданные о переводе.

Начало нового перевода

Имея шаблон, мы можем начать наш первый перевод:

$ msginit -i po/hello.pot -l cs --no-translator -o po/cs.po
Created cs.po.

Только что созданный файл cs.po уже содержит некоторую информацию. Самое главное заключается в том, что в нём правильно определены формы множественного числа для выбранного языка, и вы можете видеть, что, отражая этот факт, количество форм множественного числа изменилось:

# Czech translations for PACKAGE package.
# Copyright (C) 2015 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Automatically generated, 2015.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-10-23 11:02+0200\n"
"PO-Revision-Date: 2015-10-23 11:02+0200\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ASCII\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"

#: main.c:14
#, c-format
msgid "Orangutan has %d banana.\n"
msgid_plural "Orangutan has %d bananas.\n"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""

#: main.c:20
msgid "Thank you for using Weblate."
msgstr ""

Этот файл компилируется в оптимизированную двоичную форму — файл .mo, используемый функциями GNU gettext времени выполнения.

Обновление строк

Если вы добавите в свою программу ещё нескольких строк или измените в ней какие-то из них, то после этого вы снова должны будете запустить xgettext, который пересоздаст файл шаблона:

$ xgettext main.c -o po/hello.pot

Затем вы можете обновить отдельные файлы перевода, чтобы они соответствовали вновь созданным шаблонам (обновление, в том числе, переупорядочивает строки для соответствия их новому шаблону):

$ msgmerge --previous --update po/cs.po po/hello.pot

Импорт в Weblate

Для импорта такого перевода в Weblate, всё, что вам нужно — это определить следующие поля при создании компонента (подробное описание полей смотрите в разделе в Настройки компонента):

Поле

Значение

Репозиторий исходного кода

URL-адрес репозитория системы контроля версий с вашим проектом

Маска файла

po/*.po

Шаблон для новых переводов

po/hello.pot

Формат файла

Выберите gettext PO-файл

Новый язык

Выберите Создать новый язык

Вот и всё, теперь вы готовы начать переводить свою программу!

См.также

Пример использования gettext со многими языками можно найти в проекте Weblate Hello на GitHub’е: <https://github.com/WeblateOrg/hello>.

Перевод документации с помощью Sphinx

Sphinx — это инструмент для создания красивой документации. Он использует простой синтаксис reStructuredText и может генерировать вывод во многих форматах. Если вы ищете пример, то эта документация также собирается с его помощью. Очень полезным спутником при использовании Sphinx является сервис Read the Docs, который бесплатно будет собирать и публиковать вашу документацию.

Я не буду заострять внимание на написание самой документации, если вы нуждаетесь в консультации, просто следуйте инструкциям на сайте Sphinx’а. После того, как ваша документация будет написана, её перевод будет довольно простым делом, поскольку Sphinx уже поддерживает для этого всё необходимое, что хорошо описано в его документации по интернационализации. Это буквально вопрос настройки нескольких параметров и вызова инструмента sphinx-intl.

Если вы пользуетесь сервисом Read the Docs, вы запустить сборку переведённой документации на Read the Docs. Их документация по локализации покрывает практически всё, что вам нужно знать — создание ещё одного проекта, установку его языка и связывание его с основным проектом в качестве перевода.

Now all you need is translating the documentation content. Sphinx generates PO file for each directory or top level file, what can lead to quite a lot of files to translate (depending on sphinx:gettext_compact settings). You can import the index.po into Weblate as an initial component and then configure Обнаружение компонентов add-on to automatically discover all others.

Настройки компонента

Название компонента

Документация

Маска файла

docs/locales/*/LC_MESSAGES/index.po

Шаблон для новых переводов

docs/locales/index.pot

Формат файла

PO-файл gettext

Флаги перевода

rst-text

Настройка обнаружения компонентов

Регулярное выражение для сопоставления с файлами перевода

docs/locales/(?P<language>[^/.]*)/LC_MESSAGES/(?P<component>[^/]*)\.po

Настроить название компонента

Документация: {{ component|title }}

Задать базовый файл для нового перевода

docs/locales/{{ component }}.pot

Подсказка

Вы хотите чтобы Sphinx создавал только один PO-файл? Начиная со Sphinx 3.3.0 это можно сделать с помощью:

gettext_compact = "docs"

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

Перевод HTML и JavaScript с помощью сети доставки содержимого Weblate

Starting with Weblate 4.2 it is possible to export localization to a CDN using CDN локализации JavaScript’а add-on.

Примечание

Эта функциональность уже включена на Hosted Weblate. На вашей установке она требует дополнительной настройки, смотрите описание параметров LOCALIZE_CDN_URL и LOCALIZE_CDN_PATH.

При включении её в вашем компоненте она будет отправлять закоммиченные переводы (смотреть раздел Отложенные коммиты) в CDN; и их можно будет использовать для локализации прямо на ваших веб-страницах.

Создание компонента

Сначала вам нужно будет создать одноязычный компонент, который будет содержать ваши строки; общие инструкции по этому поводу смотрите в главе «Добавление проектов и компонентов перевода».

In case you have existing repository to start with (for example the one containing HTML files), create an empty JSON file in the repository for the source language (see Исходный язык), for example locales/en.json. The content should be {} to indicate an empty object. Once you have that, the repository can be imported into Weblate and you can start with an add-on configuration.

Подсказка

Если у вас уже есть существующий перевод, то вы можете поместить его в JSON-файлы для соответствующих языков, которые будут использоваться в Weblate.

Если вы из тех, кто не хочет делать всё это с существующим репозиторием (или если у вас его нет), то при создании компонента выберите Начать с нуля, а затем JSON-файл в качестве формата файла (на самом деле на этом этапе можно выбрать любой одноязычный формат).

Configuring Weblate CDN add-on

The CDN локализации JavaScript’а add-on provides few configuration options.

Порог перевода

Переводы, достигшие данного порога будут включатьcя в CDN.

Селектор CSS

Задаёт, какие строки из HTML-документов являются переводимыми, смотреть раздел Извлечение строк для Weblate CDN и Локализация HTML с помощью Weblate CDN.

Имя языковой куки

Имя cookie с именем выбранного языка. Используется в отрывках JavaScript для локализации HTML.

Извлечение строк из HTML-файлов

Список файлов в репозитории или URL’ов, в которых Weblate будет искать переводимые строки, смотреть раздел Извлечение строк для Weblate CDN.

Извлечение строк для Weblate CDN

Строки перевода должны присутствовать в Weblate. Вы можете заводить их вручную, использовать для их создания API или перечислить файлы или URL-адреса в параметре Извлечение строк из HTML-файлов и Weblate извлечёт их автоматически. Файлы должны присутствовать в репозитории или содержать удалённые URL-адреса, которые Weblate будет регулярно проверять и анализировать.

При значении параметра Селектор CSS по умолчанию извлекаются элементы с CSS-классом l10n, к примеру, из следующего фрагмента будут извлечены две строки:

<section class="content">
    <div class="row">
        <div class="wrap">
            <h1 class="section-title min-m l10n">Maintenance in progress</h1>
            <div class="page-desc">
                <p class="l10n">We're sorry, but this site is currently down for maintenance.</p>
            </div>
        </div>
    </div>
</section>

Если вы не хотите изменять существующий код, вы также можете использовать `` * `` в качестве селектора для обработки всех элементов.

Примечание

Right now, only text of the elements is extracted. This add-on doesn’t support localization of element attributes or elements with children.

Локализация HTML с помощью Weblate CDN

Для локализации HTML-документа вам необходимо загрузить скрипт weblate.js:

<script src="https://weblate-cdn.com/a5ba5dc29f39498aa734528a54b50d0a/weblate.js" async></script>

При загрузке автоматически будут найдены все соответствующие переводимые элементы (на основе настройки из параметра Селектор CSS) и их текст будет заменён переводом.

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

Можно использовать параметр Имя языковой куки для интеграции с другими приложениями (например, выберите django_language при использовании Django).

Локализация JavaScript

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

fetch(("https://weblate-cdn.com/a5ba5dc29f39498aa734528a54b50d0a/cs.json")
  .then(response => response.json())
  .then(data => console.log(data));

В этом случае придётся собственно реализовать саму логику локализации.

Localization libraries and packages

Weblate можно интегрировать в ваш фреймворк с помощью REST API Weblate’а. На этой странице перечислены сторонние библиотеки, которые интегрируют Weblate.

Подсказка

Are you building a Weblate integration for your framework? Get listed here! Either submit a pull request with the changes directly or write us at care@weblate.org to get listed.

Предупреждения компонента перевода

Показывает ошибки в настройках Weblate или в проекте перевода для любого компонента перевода. Также надстройка предлагает кое-какие инструкции по решению некоторых найденных проблем.

В настоящее время выполняются проверки на следующие проблемы:

  • Дублирование исходных строк в файлах перевода

  • Дублирование языков в переводах

  • Сбои при объединении, обновлении или при отправке исходного репозитория

  • Синтаксические ошибки в файлах перевода

  • Тарифные лимиты (смотрите раздел Выставление счетов)

  • Репозиторий содержащий слишком много исходящих или отсутствующих коммитов

  • Отсутствующие лицензии

  • Ошибки при запуске надстройки (смотреть Надстройки)

  • Неправильно сконфигурированный одноязычный перевод.

  • Сломанные Настройки компонента

  • Битые ссылки

  • Неиспользуемые снимки экрана

  • Неоднозначный код языка

  • Неиспользованный новый базовый файл в настройках компонента

  • Дублирование маски файлов, используемой для связанных компонентов

Оповещения обновляются ежедневно или при соответствующих изменениях (например, при изменении Настройки компонента или при обновлении репозитория).

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

Компонент с дубликатами исходных строк и языков выглядит вот так:

_images/alerts.png

Создание сообщества переводчиков

Following these recommendations supports the creation of a full, multilingual post-editing tool. Good translations are defined through the systemic-functional model of House which aims at a contextual correct translation. Write your own post-editing guide and alter these recommendations to fit your own definitions. In most cases the browser-plugin of languageTool is useful as the proof-reading tool.

Контрольный список локализации сообщества

Добавлено в версии 3.9.

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

_images/guide.png

Управление терминологией

Post-editing of MT with terminology assignment influences each level of the translation process. The machine translation system can be adapted to the specific vocabulary and style with a continued training or neural fuzzy repair. Import your existing translation memory into weblate or create an initial scope with your basic terminology. In the end the lector should be instructed with additional terminology documents to guarantee a good knowledge and output in the field.

Машинный перевод

Качество автоматического перевода (часто измеряемое с помощью измерения BLEU) коррелирует со временем редактирования [1]. Выберите серверную часть для машинного перевода, которая поддерживает необходимые языки и домены. Поясните, как функционирует серверная часть перевода и какое качество перевода должен ожидать постредактор.

Рецензирование переводов

После публикации переводы должны быть проверены вторым человеком. С беспристрастным и компетентным ревизором правило двух человек снижает ошибки и улучшает качество и согласованность контента.

Structured feedback

There are many Проверки и исправления in Weblate which provide structured feedback on quality of the translations.

Translation definition

In addition to the mentalistic and impact-based definitions which make a strong reduction, the text-based linguistic approach fits best with the implemented translation methods. A well-formulated theory for translation evaluation is House’s systemic-functional model, which focuses on the relation between original and translation. The model assumes that translation is an attempt to keep the semantic, pragmatic, and textual meaning of a text equivalent when crossing from one linguistic code to another.

The degree of quality of a translation is based on the degree of equivalence, the correspondence between the text profile and the text function. Because it cannot be calculated automatically, sufficient information should be collected to enable a uniform human evaluation. The two main parameters of agreement in a corresponding model are the macro-context – i.e. embedding in a larger social and literary context – and the micro-context consisting of field, tenor and mode.

Источники

  1. Marina Sanchez-Torron and Philipp Koehn in Machine Translation Quality and Post-Editor Productivity, Figure 1: https://www.cs.jhu.edu/~phi/publications/machine-translation-quality.pdf

  2. Joanna Best und Sylvia Kalina.Übersetzen und Dolmetschen: eine Orientierungs-hilfe. A. Francke Verlag Tübingen und Base, 2002. Möglichkeiten der Übersetzungskritik starting on page number 101

  3. post-editing guide, Sharon O’Brien and Fred Hollowood in MT Post-editing Guidelines, 2010 https://www.taus.net/academy/best-practices/postedit-best-practices/machine-translation-post-editing-guidelines

  4. neural fuzzy repair, Bram Bulté and Arda Tezcan in Neural Fuzzy Repair: Integrating Fuzzy Matches into Neural MachineTranslation, 2019 https://aclanthology.org/P19-1175.pdf

Управление переводами

Добавление новых переводов

New strings can be made available for translation when they appear in the base file, called Template for new translations (see Настройки компонента). If your file format doesn’t require such a file, as is the case with most monolingual translation flows, you can start with empty files).

Новые языки могут быть добавлены сразу, как пользователь их запросит через Weblate, либо же администраторам проекта будет отправлено уведомление, чтобы они одобрили запрос и добавили новый язык вручную. Это можно сделать добавив новый перевод в настройках компонента.

Примечание

Если вы добавляете файл языка в связанный удалённый репозиторий, то соответствующий перевод будет добавлен в Weblate, когда он обновит свой локальный репозиторий.

Больше информации о настройках обновления репозитория доступно в разделе «Обновление репозиториев».

Удаление существующих переводов

Языки, компоненты или проекты, в которых они находятся, могут быть удалены (из Weblate и удалённого репозитория, если он есть) через меню УправлятьУдаление соответствующего проекта, компонента или языка.

После нажатия на пункт меню Удаление сначала будет показан полный список компонентов, которые подлежат удалению. Для подтверждения удаления вам нужно будет ввести идентификатор (slug) данного объекта, где идентификатор — это «путь» к данному проекту, языку или компоненту, как он отображается в URL.

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

  • Вручную в исходном файле. Они будут также удалены и из проекта перевода при следующем обновлении репозитория Weblate.

Добавлено в версии 4.5.

  • В интерфейсе Weblate через кнопку ИнструментыУдалить в форме перевода строки. Для разных форматов здесь есть отличия, смотреть раздел Управление строками

Примечание

Если вы удаляете файл языка в связанном удалённом репозитории, то соответствующие переводы будут также удалены и из компонента, когда Weblate обновит свой локальный репозиторий.

Больше информации о настройках обновления репозитория доступно в разделе «Обновление репозиториев».

Варианты строк

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

Подсказка

Аббревиатуры (сокращённые формы, сокращения) являются хорошим примером вариантов.

Автоматическая группировка вариантов на основе ключевых строк

Добавлено в версии 3.11.

Вы можете задать регулярное выражение для группировки строк на основе ключевых строк одноязычных переводов в настройках компонента:

_images/variants-settings.png

Если Ключ сопоставляется этому выражению, то сопоставленная часть ключа удаляется, а на основе оставшейся строки создаётся корневой ключ для вариантов. После этого все строки с одинаковым корневым ключом, а также та строка, чей ключ в точности совпадает с корневым, становятся частью одной группы.

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

Пример использования

Регулярное выражение

Соответствующие ключи перевода

Идентификация по суффиксу

(Short|Min)$

monthShort, monthMin, month

Идентификация по части строки

#[SML]

dial#S.key, dial#M.key, dial.key

Назначение вариантов вручную

Добавлено в версии 4.5.

Вы можете вручную связать определённые строки с помощью флага variant:ИСТОЧНИК. Это может быть полезно, если у вас двуязычный перевод, в котором, соответственно, нет ключевых строк, на основе которых можно было бы сгруппировать их автоматически; или чтобы сгрупировать строки между ключами которых нет ничего общего, хотя они всё же должны переводится вместе.

Так дополнительные варианты для какой-либо строки можно добавить с помощью кнопки Инструменты во время перевода (если управление строками включено):

_images/glossary-tools.png

Примечание

В данном случае строка-источник варианта не должна превышать 768 символов. Это чисто техническое ограничение, которое вызванно обеспечением совместимости с базой данных MySQL.

Как варианты выглядят при переводе

Позже при переводе строки с одним вариантом группируются вместе:

_images/variants-translate.png

Метки строк

Разбивают переводимые строки компонента на категории по тексту и цвету, указанным в настройках проекта.

_images/labels.png

Подсказка

Labels can be assigned to units in Дополнительная информация об исходных строках by bulk editing, or using the Массовая правка add-on.

Рецензирование строк

Отчёты о деятельности

Отчёты о деятельности показывают изменения переводов для проектов, компонентов или отдельных пользователей.

Отчёты о деятельности для проекта или компонента доступны из его панели управления, на вкладке Инфо.

_images/activity.png

Другие отчеты доступны на вкладке Аналитика в подпункте Отчёты по переводам.

The activity of the currently signed in user can be seen by clicking on the user name from the user menu on the top right.

Проверки исходных строк

There are many Проверки качества, some of them focus on improving the quality of source strings. Many failing checks suggest a hint to make source strings easier to translate. All types of failing source checks are displayed on the source language of every component.

Проверки переведённых строк

Ошибочные неудачные проверки переведённых строк говорят о том, что проблема находится в исходной строке. Иногда переводчики вместо того, чтобы сообщать об ошибках в исходных строках, просто исправляют их в переводе; типичный пример такой ошибки — пропущенная точка в конце предложения.

Просмотр всех неудачных проверок может дать ценную обратную связь для улучшения исходных строк проекта. Чтобы упростить рецензирование исходных строк, Weblate автоматически создаёт фиктивный перевод на исходный язык и показывает в нём проверки для исходных строк:

_images/source-review.png

Одной из наиболее интересных проверок здесь является проверка Множество неудачных проверок — она возникает всякий раз, когда возникает неудачная проверка в нескольких переводах указанной строки. Обычно эта строка и оказывается тем, что вы искали — поскольку на ней у переводчиков возникли проблемы с её правильным переводом.

По каждому языку даётся подробный список:

_images/source-review-detail.png

Получение обратной связи об исходных строках

Переводчики могут комментировать как перевод, так и исходные строки. В настройках каждого компонента можно задать отправку таких комментариев на электронную почту (смотреть раздел Адрес для сообщения об ошибке в исходной строке); как правило, наилучшим подходом будет указать здесь адрес списка рассылки для разработчиков. Таким образом, вы сможете следить за возникновением проблем в переводе, вовремя о них узнавать и быстро их устранять.

См.также

Комментарии

Продвижение перевода

Weblate предоставляет вам виджеты, которые вы можете разместить на своем сайте или в других источниках для продвижения проекта перевода. Ещё он предоставляет красивую страницу приветствия для новых участников, на которой они могут получить основную информацию о переводе. Кроме того, вы можете поделиться информацией о переводе через Facebook или Twitter. Все эти возможности можно найти на вкладке Поделиться:

_images/promote.png

Во все эти плашки встроена ссылка на страницу, которая простыми словами объясняет пользователям, как переводить с помощью Weblate:

_images/engage.png

Отчёт о прогрессе перевода

Функции отчётности дают вам представление о том, как продвигался перевод за определённый период. В отчёте содержится сводка по переводам того или иного компонента за определённый период времени. Инструмент для создания отчётов находится в меню Аналитика любого компонента перевода, проекта или на панели управления:

_images/reporting.png

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

Списки переводчиков

Генерирует документ, пригодный для выражения благодарности переводчикам — отсортированный по языку и содержащий список всех участников, внесших вклад в перевод на данный язык:

* Czech

    * John Doe <john@example.com> (5)
    * Jane Doe <jane@example.com> (1)

* Dutch

    * Jane Doe <jane@example.com> (42)

Подсказка

Число в скобках указывает количество вкладов за указанный период.

Статистика участника

Генерирует количество переведенных слов и строк по имени переводчика:

======================================== ======================================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ========================
Name                                     Email                                    Count total              Source words total       Source chars total       Target words total       Target chars total       Count new                Source words new         Source chars new         Target words new         Target chars new         Count approved           Source words approved    Source chars approved    Target words approved    Target chars approved    Count edited             Source words edited      Source chars edited      Target words edited      Target chars edited
======================================== ======================================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ========================
John Done                                john@example.com                                                1                        3                       24                        3                       21                        1                        3                       24                        3                       21                        0                        0                        0                        0                        0                        0                        0                        0                        0                        0
Jane Done                                jane@example.com                                                2                        5                       25                        4                       28                        2                        3                       24                        3                       21                        0                        0                        0                        0                        0                        0                        0                        0                        0                        0
======================================== ======================================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ========================

Он может быть полезен, если вы платите переводчикам в зависимости от объёма выполненной ими работы, он даёт вам различную статистику по работе переводчиков.

Вся статистика доступна в трёх вариантах:

Итоги

Общее количество отредактированных строк.

Новые

Недавно переведённые строки, у которых раньше перевода не было.

Одобренные

Считает количество одобренных строк в процессе рецензирования (смотрите раздел Выделенные рецензенты).

Отредактированные

Отредактированные строки, которые ранее уже были переведены.

Для каждого из этих вариантов доступны следующие метрики:

Количество

Количество строк.

Правки

Number of edited characters in the string, measured in Damerau–Levenshtein distance.

Исходных слов

Количество слов в исходной строке.

Исходных символов

Количество символов в исходной строке.

Целевых слов

Количество слов в переведённой строке.

Целевых символов

Количество символов в переведённой строке.

Как внести свой вклад в Weblate

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

Перевод Weblate

Weblate непрерывно переводится с использованием самого Weblate. Не стесняйтесь принять участие в усилиях, направленных на то, чтобы сделать Weblate доступным на как можно большем количестве человеческих языков. Это приближает Weblate к пользователям!

Если вы обнаружили возможную ошибку в исходной строке, вы можете отметить её комментарием в редакторе Weblate. Таким образом, её можно обсудить и исправить. Если вы уверены, вы также можете нажать на ссылку в разделе Расположение исходной строки и отправить запрос на извлечение(pull request) со своим исправлением.

Внести вклад в документацию Weblate

Вы можете улучшить страницу документации по своему усмотрению. Сделать это легко, нажав на кнопку Редактировать на GitHub в правом верхнем углу страницы.

Пожалуйста, соблюдайте эти рекомендации при написании:

  1. Не удаляйте часть документации, если она действительна.

  2. Используйте ясный и понятный язык. Вы пишете техническую документацию, а не поэму. Не все читатели документации являются носителями языка, будьте внимательны.

  3. Не бойтесь задавать вопросы, если в чём-то не уверены. Если вопрос появился во время редактирования, не меняйте документацию, пока не получите ответ. Это значит, вы либо меняете, либо спрашиваете. Не делайте и то, и другое одновременно.

  4. Проверьте свои изменения, выполнив описанные действия в соответствии с документацией.

  5. Отправляйте запрос на извлечение(pull request) с изменениями небольшими частями, чтобы облегчить и ускорить их рассмотрение и объединение.

  6. Если вы хотите переписать и изменить структуру большой статьи, сделайте это в два этапа:

    1. Переписать

    2. После того как изменённый вариант будет просмотрен, отшлифован и объединён, измените структуру абзацев в другом запросе на извлечение(pull request).

Подсказка

Вы можете перевести документацию.

Расширение встроенных языковых определений

Определения языка находятся в weblate-language-data repository.

Вы можете добавить недостающие определения языков в languages.csv, другие файлы генерируются из этого файла.

Обсуждения Weblate

Если у вас есть идея, но вы не уверены, подходит ли она для выпуска, не волнуйтесь. Вы можете присоединиться к сообществу в GitHub обсуждениях.

Финансирование разработки Weblate

Вы можете поддержать развитие Weblate на странице приёма пожертвований. Собранные там средства используются для обеспечения бесплатного хостинга для проектов свободного программного обеспечения и дальнейшего развития Weblate. Пожалуйста, посетите `страницу приёма пожертвований`_, чтобы узнать о возможностях, таких как цели финансирования и награды, которые вы получите как гордый спонсор.

Supporters who have funded Weblate

Список спонсоров Weblate:

Хотите оказаться в этом списке? Тогда посмотрите свои опции на странице «Пожертвовать для Weblate».

Начало участия в разработке Weblate

Понять исходный код Weblate, пройдя через Исходный код Weblate, Фронтэнд Weblate и Внутреннее устройство Weblate.

Начало работы с кодовой базой

Ознакомьтесь с кодовой базой Weblate, попробовав исправить ошибки, помеченные как good first issue.

Запуск Weblate локально

Самый удобный подход к разработке Weblate — это создать собственное виртуальное окружение (virtualenv) для него с редактируемой версией исходного кода, как описано в Установка из исходников.

  1. Склонируйте исходный код Weblate:

    git clone https://github.com/WeblateOrg/weblate.git
    cd weblate
    
  2. Создайте виртуальное окружение:

    virtualenv .venv
    .venv/bin/activate
    
  3. Установите Weblate (для этого потребуются некоторые системные зависимости, просмотрите Установка из исходников):

    pip install -e .
    
  1. Установите все зависимости, полезные для разработки:

    pip install -r requirements-dev.txt
    
  2. Запустите сервер разработки:

    weblate runserver
    
  3. В зависимости от ваших настроек, возможно, вы захотите запустить обработчики Celery:

    ./weblate/examples/celery start
    
  4. Чтобы запустить тесты (смотреть раздел Запуск тестов локально):

    . scripts/test-database
    ./manage.py test
    

Запуск Weblate локально внутри Doсker

Если у вас установлен Docker и docker-compose, то вы можете развернуть среду для разработки, просто запустив:

./rundev.sh

Это создаст и запустит образ Docker для разработки. Weblate будет запущен на <http://127.0.0.1:8080/> и вы сможете зайти в него под пользователем admin с паролем admin. Новая установка будет пустой, так что дальше вам скорей всего надо будет добавить туда проекты и компоненты перевода.

Dockerfile и docker-compose.yml для этого расположены в каталоге dev-docker.

Этот скрипт также принимает некоторые параметры. Чтобы выполнить тесты, запустите его с параметром test, а затем укажите любые аргументы команды Django test, например, запуск только тестов в модуле weblate.machine:

./rundev.sh test --failfast weblate.machine

Примечание

Убедитесь, что ваш контейнер Docker запущен и работает до того как запустить тесты. Вы можете проверить это, выполнив docker ps.

Чтобы вывести логи:

./rundev.sh logs

Чтобы остановить контейнер, запущенный в фоне:

./rundev.sh stop

Запуск скрипта без аргументов приведёт к повторному созданию контейнера Docker и его перезапуску.

Примечание

Эта установка не подходит для производства, поскольку она включает в себя несколько хаков, которые небезопасны, но они облегчают разработку.

Разработка Weblate c помощью PyCharm

PyCharm — это известная среда разработки для Python, вот некоторые рекомендации, как настроить ваш проект Weblate внутри неё.

Допустим, вы только что склонировали репозиторий GitHub в папку, просто откройте его с помощью PyCharm. Как только IDE будет открыта, первым шагом будет указание интерпретатора, который вы хотите использовать:

_images/pycharm-1.png

Вы можете либо позволить PyCharm создать виртуальное окружение за вас, либо выбрать уже существующее:

_images/pycharm-2.png

Не забудьте установить зависимости после установки интерпретатора: Либо через консоль (по умолчанию консоль IDE будет напрямую использовать ваш virtualenv), либо через интерфейс, когда вы получите предупреждение о пропущенных зависимостях.

Второй шаг — ввести правильную информацию, чтобы интегрировать Django в PyCharm: Идея в том, чтобы запуск юнит-тестов происходил незамедлительно прямо из IDE. Для этого вам нужно указать путь к корню Django-проекта и путь к его настройкам:

_images/pycharm-3.png

Внимание, в параметре Django project root указывается путь к корню репозитория, а не подкаталога Weblate. Что касается настроек, вы можете использовать weblate/settings_test.py из репозитория, но вы можете создать свой собственный файл настроек и указать его в этом параметре.

Последний шаг — запустить сервер и установить точки останова в коде так, чтобы возможно было его отлаживать. Это можно сделать, создав новую конфигурацию Django Server:

_images/pycharm-4.png _images/pycharm-5.png

Подсказка

Осторожнее с параметром No reload: Это предотвращает перезагрузку сервера в реальном времени, если вы изменяете файлы. Но это позволяет сохранить существующие точки останова отладчика, когда они обычно удаляются при перезагрузке сервера.

Инициализация вашего экземпляра devel

Возможно, вы захотите использовать import_demo, чтобы создать демонстрационные переводы и createadmin, чтобы создать пользователя-администратора.

Исходный код Weblate

Weblate разрабатывается на GitHub’е. Вы можете создавать форки и открывать запросы на извлечение. Патчи в любой другой форме также приветствуются.

См.также

Чтобы понять, как Weblate устроен изнутри, посмотрите раздел Внутреннее устройство Weblate.

Coding guidelines

Любой код для Weblate’а должен писаться с оглядкой на Принципы «безопасности по проектированию» (Security by Design).

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

Any new code should utilize PEP 484 type hints. We’re not checking this in our CI yet as existing code does not yet include them.

Coding standard and linting the code

Код должен соответствовать рекомендациям по кодированию PEP-8 и должен быть отформатирован с использованием инструмента форматирования кода black.

Для проверки качества кода можно использовать flake8, рекомендуемые плагины перечислены в :file:``.pre-commit-config.yaml`, а их настройки находятся в setup.cfg.

The easiest approach to enforce all this is to install pre-commit. The repository contains configuration for it to verify the committed files are sane. After installing it (it is already included in the requirements-lint.txt) turn it on by running pre-commit install in Weblate checkout. This way all your changes will be automatically checked.

Также вы можете запустить эту проверку вручную, чтобы проверить все файлы, запустите:

pre-commit run --all

Отладка Weblate

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

Режим отладки

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

В производственной среде используйте ADMINS, чтобы получать электронные письма с отчётами об ошибках, или настройте сбор ошибок с помощью сторонней службы.

Журналы Weblate

Weblate может вести детализированные журналы того, что происходит на фоне. С настройками по умолчанию он использует syslog в результате чего файл журнала появляется в /var/log/messages или в /var/log/syslog (в зависимости от настроек вашего демона syslog).

Процесс Celery (смотреть раздел Фоновые задачи с использованием Celery) обычно также ведёт свои собственные журналы. Скажем, в примере с установкой Celery в качестве системного сервиса журналы будут записываться в несколько файлов в каталоге /var/log/celery/.

Контейнеры Docker записывают журналы в свой поток вывода (как это обычно и бывает в Docker-мире), так что вы можете просмотреть эти журналы с помощью docker-compose logs.

Не обрабатываются фоновые задачи

Многие вещи выполняются обработчиками Celery в фоновом режиме. Если такие вещи, как рассылка писем или удаление компонентов, не работают, возможно, проблема связана с ними.

В таком случае следует:

Не доходит электронная почта от Weblate

Проверить, правильно ли работает исходящая почта. Это можно сделать с помощью команды управления sendtestemail (подробности, как вызывать её в различных окружениях, смотрите в разделе Вызов команд управления) или с помощью интерфейса управления на вкладке Инструменты.

Это действие отправит почту напрямую, так что таким образом можно проверить, что SMTP настроен корректно (смотреть раздел Настройка исходящей почты). Однако большую часть почты Weblate отправляет в фоновых задачах, так что всё это может быть вызвано некоторыми проблемами с Celery. Как отладить Celery смотрите в соответствующем разделе.

Анализ падений программы

Если приложение падает, то будет полезно собрать об этом падении столько информации, сколько возможно. Этого можно достичь с помощью сторонних сервисов, которые могут собирать такую информацию автоматически. Вы можете почитать о том, как это сделать, в разделе «Сбор отчетов об ошибках».

Ошибки без оповещения

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

Проблемы с производительностью

Если в каких-то сценариях Weblate показывает недостаточную производительность, то соберите журналы, которые демонстрируют проблему, а также всё, что поможет выяснить, как и в каком месте можно улучшить код.

Если некоторые запросы выполняются слишком долго без какой-либо индикации, то вы можете установить dogslow и использовать его вместе со сбором отчётов об ошибках, что позволит получить точечные и подробные трассировки стеков вызова (traceback) в этих отчётах.

In case the slow performance is linked to the database, you can also enable logging of all database queries using following configuration after enabling DEBUG:

LOGGING["loggers"]["django.db.backends"] = {"handlers": ["console"], "level": "DEBUG"}

Внутреннее устройство Weblate

Примечание

Эта глава даст вам базовое представление о внутреннем устройстве Weblate.

Большую часть структуры своего кода Weblate наследует от Django, так как основывается на оном.

Структура каталогов

Быстрый обзор структуры каталогов главного репозитория Weblate:

docs

Исходный код данной документации, который можно собрать с помощью Sphinx.

dev-docker

Код Docker для запуска сервера разработки, смотреть раздел Запуск Weblate локально внутри Doсker.

weblate

Исходный код Weblate (точнее самого Django-приложения), смотреть раздел Внутреннее устройство Weblate.

weblate/static

Клиентские файлы (CSS, Javascript, изображения), смотреть Фронтэнд Weblate.

Модули

Weblate состоит из нескольких Django-приложений (некоторые из них необязательны, смотреть раздел Дополнительные модули Weblate):

accounts

Аккаунты пользователей, профили и уведомления.

addons

Надстройки для изменения поведения Weblate, смотреть раздел Надстройки.

api

API на основе Django REST framework.

auth

Аутентификация и разрешения.

billing

Дополнительный модуль Выставление счетов.

checks

Модуль Проверки качества строки перевода.

fonts

Модуль проверки отрисовки шрифтов.

formats

Слой абстракции от форматов файлов на основе translate-toolkit.

gitexport

Дополнительный модуль Экспортер Git.

lang

Модуль определения языка и моделей множественного числа.

legal

Дополнительный модуль Правовые вопросы.

machinery

Интеграция сервисов машинного перевода.

memory

Встроенная память переводов, смотрите раздел Память переводов.

screenshots

Модуль управления снимками экрана и распознаванием текста.

trans

Основной модуль обработки переводов.

utils

Различные вспомогательные утилиты.

vcs

Абстракция системы контроля версий.

wladmin

Настройка интерфейса администра Django.

Разработка надстроек

Надстройки — это способ внести изменений в ваш рабочий процесс локализации с помощью Weblate.

class weblate.addons.base.BaseAddon(storage=None)

Базовый класс для всех надстроек Weblate.

classmethod can_install(component, user)

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

configure(settings)

Сохранение конфигурации.

daily(component)

Обработчики, которые будут вызываться ежедневно.

classmethod get_add_form(user, component, **kwargs)

Возвращает форму с пользовательскими настройками. Вызывается при добавлении новой надстройки к компоненту.

get_settings_form(user, **kwargs)

Возвращает форму с пользовательскими настройками этой надстройки.

post_add(translation)

Обработчик, вызываемый после добавления нового перевода.

post_commit(component)

Обработчик, вызываемый после того, как изменения будут закоммиченны в репозиторий.

post_push(component)

Обработчик, вызываемый после того как изменения в будут отправлены в вышестоящий репозиторий.

post_update(component, previous_head: str, skip_push: bool)

Обработчик, вызываемый после того, как локальный репозиторий будет обновлён из вышестоящего.

Параметры
  • previous_head (str) – Текущее состояние репозитория (HEAD) перед обновлением; может быть пустым, если этот репозиторий только что склонирован.

  • skip_push (bool) – Определяет, должна ли надстройка пропустить собственно отправку изменений в вышестоящий репозиторий. Обычно этот параметр просто передаётся в конкретные методы реализации, как commit_and_push или commit_pending.

pre_commit(translation, author)

Обработчик, вызываемый перед тем, как изменения будут закоммиченны в репозиторий.

pre_push(component)

Обработчик, вызываемый перед тем как изменения в будут отправлены в вышестоящий репозиторий.

pre_update(component)

Обработчик, вызываемый перед тем, как локальный репозиторий будет обновлён из вышестоящего.

save_state()

Сохранить информацию о состоянии надстройки.

store_post_load(translation, store)

Обработчик, вызываемый после разбора файла.

В качестве аргумента ему передаётся объект класса формата файла.

Это может быть полезно для модификации параметров класса формата файла, например, изменить , как именно данный файл будет сохраняться.

unit_pre_create(unit)

Обработчик, вызываемый перед созданием новой единицы перевода.

Вот пример надстройки:

#
# Copyright © 2012–2022 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <https://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
#


from django.utils.translation import gettext_lazy as _

from weblate.addons.base import BaseAddon
from weblate.addons.events import EVENT_PRE_COMMIT


class ExampleAddon(BaseAddon):
    # Filter for compatible components, every key is
    # matched against property of component
    compat = {"file_format": {"po", "po-mono"}}
    # List of events add-on should receive
    events = (EVENT_PRE_COMMIT,)
    # Add-on unique identifier
    name = "weblate.example.example"
    # Verbose name shown in the user interface
    verbose = _("Example add-on")
    # Detailed add-on description
    description = _("This add-on does nothing it is just an example.")

    # Callback to implement custom behavior
    def pre_commit(self, translation, author):
        return

Фронтэнд Weblate

Фронтэнд в данный момент написан на Bootstrap, jQuery и паре других сторонних библиотек.

Поддерживаемые браузеры

Weblate поддерживает последние стабильные релизы всех основных браузеров и платформ.

Альтернативные браузеры, которые используют последние версии WebKit, Blink, или Gecko (не важно, напрямую ли или опосредованно через API платформы) в явном виде не поддерживаются. Однако Weblate должен (в большинстве случаев) отображаться и функционировать корректно и в них.

Более старые браузеры, хотя и могут всё ещё работать, но некоторый функционал в них может быть ограничен.

Управление зависимостями

Для обновления сторонних библиотек используется менеджер пакетов yarn. Его настройки находятся в файле scripts/yarn, а для обновления, сборки и копирования библиотек в корректное место в каталоге weblate/static/vendor, где располагаются все сторонние библиотеки фронтэнда, есть скрипт-обёртка scripts/yarn-update. Код, специфичный для Weblate, должен быть размещён непосредственно в weblate/static или в подкаталогах, специфичных для данной функции (например, weblate/static/editor).

Добавление новой сторонней библиотеки обычно заключается в:

# Add a yarn package
yarn --cwd scripts/yarn add PACKAGE
# Edit the script to copy package to the static folder
edit scripts/yarn-update
# Run the update script
./scripts/yarn-update
# Add files to git
git add .

Оформление кода

Weblate полагается на Prettier как для форматирования кода JavaScript, так и CSS-файлов.

Мы также используем ESLint для проверки кода на JavaScript.

Локализация

Если вам надо добавить какой-либо текст, который будет показываться пользователю, то он должен быть локализуемым. В большинстве случаев будет достаточно просто обернуть свой текст в вызов gettext, но для более сложных случаев есть и более интересные возможности:

document.write(gettext('this is to be translated'));

var object_count = 1 // or 0, or 2, or 3, ...
s = ngettext('literal for the singular case',
        'literal for the plural case', object_count);

fmts = ngettext('There is %s object. Remaining: %s',
        'There are %s objects. Remaining: %s', 11);
s = interpolate(fmts, [11, 20]);
// s is 'There are 11 objects. Remaining: 20'

Иконки

В данный момент Weblate использует иконки в стиле Material Design. Если вам нужны какие-то дополнительные эмблемки, то обратите внимание на Material Design Icons или на Material Design Resources.

В дополнение к этому есть скрипт scripts/optimize-svg, который уменьшает размер этих SVG-иконок, так как большинство из них встраиваются внутрь HTML, чтобы возможно было задавать стиль контурам.

Сообщение о проблемах в Weblate’е

Система отслеживания проблем <https://github.com/WeblateOrg/weblate/issues> Weblate на GitHub.

Не стесняйтесь сообщать о любых проблемах, которые у вас возникли, или предлагать улучшения для Weblate. У нас подготовлены различные шаблоны, которые помогут вам удобно составить отчёт о проблеме.

Если то, что вы нашли, является проблемой безопасности в Weblate, пожалуйста, обратитесь к разделу Проблемы безопасности ниже.

Если вы не уверены в своем отчёте об ошибке или запросе функции, вы можете попробовать Обсуждения Weblate.

Проблемы безопасности

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

В качестве альтернативы вы можете сообщать о проблемах на security@weblate.org. Эти сообщения в итоге также окажутся на HackerOne.

Если вы по каким-либо причинам не хотите использовать HackerOne, то вы можете сообщить об ошибке по электронной почте на michal@cihar.com. Вы также можете зашифровать письмо с помощью PGP-ключа 3CB 1DF1 EF12 CF2A C0EE 5A32 9C27 B313 42B7 511D. Этот ключ также доступен в Keybase.

Примечание

Дабы выполнять различные задачи, Weblate также зависит от множества сторонних компонентов. В случае если вы нашли уязвимость прямо в одном из них, то сообщите о ней непосредственно в соответствующий проект.

Некоторые из них:

Система автоматического тестирования и непрерывной интеграции Weblate

Тестами покрыта большая часть современного кода. Увеличьте это покрытия, добавляя новые тесты при добавлении какой-либо новой функциональности, дабы проверить, что она работает корректно.

Непрерывная интеграция

Текущие результаты тестов можно найти в GitHub Actions, а отчеты о проценте покрытия тестами на Codecov.

Есть несколько задач, которые проверяют разные аспекты:

  • Модульное тестирование

  • Сборка и внешние ссылки в документации

  • Проверка миграции со всех поддерживаемых релизов

  • Проверка исходного кода (линтинг)

  • Проверка установки (гарантирует, что в сгенерированных файлах всё есть и они могут быть протестированы)

Настройки для системы непрерывной интеграции расположены в каталоге .github/workflows. Она полагается на скрипты, хранящиеся в каталоге ci. Скрипты можно также выполнить вручную, но для этого нужно установить несколько переменных среды (в основном связанных с соединением с базой данных, те, что определены в файле настроек Django). Пример, как определить эти переменные, находится в scripts/test-database:

# Simple way to configure test database from environment

# Database backend to use postgresql / mysql / mariadb
export CI_DATABASE=${1:-postgresql}

# Database server configuration
export CI_DB_USER=weblate
export CI_DB_PASSWORD=weblate
export CI_DB_HOST=127.0.0.1

# Django settings module to use
export DJANGO_SETTINGS_MODULE=weblate.settings_test

Простой запуск может выглядеть как:

. scripts/test-database
./ci/run-migrate
./ci/run-test
./ci/run-docs

Запуск тестов локально

Чтобы запустить тесты локально, выполните:

DJANGO_SETTINGS_MODULE=weblate.settings_test ./manage.py test

Подсказка

Вам потребуется сервер базы данных (PostgreSQL), который будет использоваться для тестов. По умолчанию Django создаёт отдельную базу данных для запуска тестов (с префиксом test_). Например, если в ваших настройках используется база данных weblate, то тесты будут запускаться с базой данных test_weblate. Смотрите подробности по настройке в главе Настройка базы данных для Weblate.

При конфигурации среды непрерывной интеграции также используется weblate/settings_test.py (смотреть раздел Непрерывная интеграция), его параметры можно поменять через переменные среды:

# Simple way to configure test database from environment

# Database backend to use postgresql / mysql / mariadb
export CI_DATABASE=${1:-postgresql}

# Database server configuration
export CI_DB_USER=weblate
export CI_DB_PASSWORD=weblate
export CI_DB_HOST=127.0.0.1

# Django settings module to use
export DJANGO_SETTINGS_MODULE=weblate.settings_test

До того как запустить тесты, надо сначала собрать статические файлы, так как они нужны для некоторых из них:

DJANGO_SETTINGS_MODULE=weblate.settings_test ./manage.py collectstatic

Вы также можете запустить только определенные тесты:

DJANGO_SETTINGS_MODULE=weblate.settings_test ./manage.py test weblate.gitexport

Подсказка

Тесты можно также запустить внутри docker-контейнера для разработки, смотреть раздел Запуск Weblate локально внутри Doсker.

См.также

Смотрите подробности о том, как писать и запускать тесты в документации Django: Testing in Django.

Схемы данных

Для определения структуры внешних JSON-файлов Weblate использует JSON-схему.

Схема памяти переводов Weblate’а

https://weblate.org/schemas/weblate-memory.schema.json

тип

массив

элементы

Элемент памяти переводов

тип

объект

свойства

  • category

Категория строки

1 — глобальная, 2 — общая, 10000000+ — специфичная для проекта, 20000000+ — специфичная для пользователя

тип

целое число

примеры

1

минимум

0

значение по умолчанию

1

  • origin

Происхождение строки

Имя файла или название компонента

тип

строка

примеры

test.tmx

проект/компонент

значение по умолчанию

  • source

Исходная строка

тип

строка

примеры

Hello

мин. длина

1

значение по умолчанию

  • source_language

Исходный язык

ISO 639-1 / ISO 639-2 / IETF BCP 47

тип

строка

примеры

en

шаблон

^[^ ]+$

значение по умолчанию

  • target

Целевая строка

тип

строка

примеры

Привет

мин. длина

1

значение по умолчанию

  • target_language

Целевой язык

ISO 639-1 / ISO 639-2 / IETF BCP 47

тип

строка

примеры

ru

шаблон

^[^ ]+$

значение по умолчанию

дополнительные свойства

False

определения

Файл экспорта данных пользователя Weblate’а

https://weblate.org/schemas/weblate-userdata.schema.json

тип

объект

свойства

  • basic

Основные данные

тип

объект

свойства

  • username

Имя пользователя

тип

строка

примеры

admin

значение по умолчанию

  • full_name

Полное имя

тип

строка

примеры

Администратор Weblate

значение по умолчанию

  • email

Адрес электронной почты

тип

строка

примеры

noreply@example.com

значение по умолчанию

  • date_joined

Дата присоединения

тип

строка

примеры

2019-11-18T18:53:54.862Z

значение по умолчанию

  • profile

Профиль

тип

объект

свойства

  • language

Язык

тип

строка

примеры

ru

шаблон

^.*$

значение по умолчанию

  • suggested

Количество предложенных строк

тип

целое число

примеры

1

значение по умолчанию

0

  • translated

Количество переведённых строк

тип

целое число

примеры

24

значение по умолчанию

0

  • uploaded

Количество загруженных снимков экрана

тип

целое число

примеры

1

значение по умолчанию

0

  • hide_completed

Скрывать завершённые переводы с панели управления

тип

логический

примеры

False

значение по умолчанию

True

  • secondary_in_zen

Выводить ли вспомогательные переводы в дзен-режиме

тип

логический

примеры

True

значение по умолчанию

True

  • hide_source_secondary

Скрывать ли источник, если есть вспомогательный перевод

тип

логический

примеры

False

значение по умолчанию

True

  • editor_link

Ссылка на редактор

тип

строка

примеры

шаблон

^.*$

значение по умолчанию

  • translate_mode

Режим редактора переводов

тип

целое число

примеры

0

значение по умолчанию

0

  • zen_mode

Дзен-режим редактора

тип

целое число

примеры

0

значение по умолчанию

0

  • special_chars

Специальные символы

тип

строка

примеры

шаблон

^.*$

значение по умолчанию

  • dashboard_view

Вид панели управления по умолчанию

тип

целое число

примеры

1

значение по умолчанию

0

  • dashboard_component_list

Список компонентов по умолчанию

значение по умолчанию

null

любое из

тип

null

тип

целое число

  • languages

Языки перевода

тип

массив

значение по умолчанию

элементы

Код языка

тип

строка

примеры

ru

шаблон

^.*$

значение по умолчанию

  • secondary_languages

Вспомогательные языки

тип

массив

значение по умолчанию

элементы

Код языка

тип

строка

примеры

uk

шаблон

^.*$

значение по умолчанию

  • watched

Отслеживаемые проекты

тип

массив

значение по умолчанию

элементы

Плашка проекта

тип

строка

примеры

weblate

шаблон

^.*$

значение по умолчанию

  • auditlog

Журнал аудита

тип

массив

значение по умолчанию

элементы

Записи

тип

объект

свойства

  • address

IP-адрес

тип

строка

примеры

127.0.0.1

шаблон

^.*$

значение по умолчанию

  • user_agent

Агент пользователя (User agent)

тип

строка

примеры

PC / Linux / Firefox 70.0

шаблон

^.*$

значение по умолчанию

  • timestamp

Отметка времени

тип

строка

примеры

2019-11-18T18:58:30.845Z

шаблон

^.*$

значение по умолчанию

  • activity

Действие

тип

строка

примеры

login

шаблон

^.*$

значение по умолчанию

определения

Выпуск новых версий Weblate

Расписание выпусков

Weblate Придерживается двухмесячного цикла основных выпусков (x.y). Между ними обычно происходят выпуски с исправлениями ошибок (x.y.z), которые исправляют проблемы, проскочившие в основные выпуски.

Изменение мажорной версии означает, что при обновлении эту версию нельзя пропускать. В таких случаях всегда необходимо сначала обновиться до версии x.0 перед тем, как обновляться до старших выпусков x.y.

Планирование выпусков

Список исправленных ошибок и новых возможностей для предстоящего выпуска собирается с помощью целей выпуска (milestones) на GitHub; вы можете посмотреть нашу дорожную карту на <https://github.com/WeblateOrg/weblate/milestones>.

Процесс выпуска

Что нужно проверить перед выпуском:

  1. Проверить новые языки, на которые был сделан перевод командой ./scripts/list-translated-languages.

  2. Установить финальную версию командой ./scripts/prepare-release.

  3. Make sure screenshots are up to date make -j 12 -C docs update-screenshots.

  4. Объедините все возможные незаконченные переводы wlc push; git remote update; git merge origin/weblate

Выполнить выпуск:

  1. Произвести выпуск: ./scripts/create-release --tag (смотрите, что для этого необходимо ниже).

Что нужно сделать вручную после выпуска:

  1. Обновить образ Docker.

  2. Закрыть целевую версию (milestone) на GitHub.

  3. Как только образ докер будет проверен, добавить метку и загрузить его.

  4. Обновить схему Helm до новой версии.

  5. Добавить новую версию в .github/workflows/migrations.yml, чтобы миграция на неё покрывалась тестами.

  6. Увеличить версию в ссылках на скачивание на сайте.

  7. Увеличить версию в репозитории с помощью команды ./scripts/set-version.

Чтобы создать метки с помощью скрипта ./scripts/create-release. Вам понадобится:

  • GnuPG с закрытым ключом, используемым для подписи выпусков

  • Доступ на отправку изменений в git-репозиторий Weblate (он отправляет метки)

  • Настроенная утилита hub и права на создание выпусков в репозитории Weblate

  • SSH-доступ к серверу скачивания Weblate (файлы для скачивания с Web-сайта копируются туда)

Безопасность и конфиденциальность

Совет

В Weblate, безопасность поддерживает такую среду, которая защищает конфиденциальность наших пользователей.

Разработка Weblate придерживается Лучшим практикам Основной инфраструктурной инициативы Linux Foundation.

Отслеживание зависимостей для реагирования на уязвимости

Проблемы безопасности в наших зависимостях отслеживаются с помощью бота Dependabot. Это касается библиотек Python и JavaScript, и в последнем стабильном выпуске обновлены зависимости, чтобы избежать уязвимостей.

Подсказка

В сторонних библиотеках могут быть присутствовать уязвимости, которые не влияют на работу Weblate, поэтому они не решаются выпуском исправленных версий Weblate.

Безопасность Docker-контейнера

Контейнеры Docker’а регулярно сканируются сканерами Anchore и Trivy.

Это позволяет нам выявлять уязвимости на самой ранней стадии и выпускать исправления сразу же.

Вы можете просмотреть результаты этих сканирований на GitHub’е — они хранятся в виде артефактов на нашем сервере непрерывной интеграции в формате обмена результатами статического анализа SARIF ().

Contributing to Weblate modules

Besides the main repository, Weblate consists of several Python modules. All these follow same structure and this documentation covers them all.

For example, this covers:

Coding guidelines

Любой код для Weblate’а должен писаться с оглядкой на Принципы «безопасности по проектированию» (Security by Design).

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

Any new code should utilize PEP 484 type hints. We’re not checking this in our CI yet as existing code does not yet include them.

Running tests

The tests are executed using py.test. First you need to install test requirements:

pip install -r requirements-test.txt

You can then execute the testsuite in the repository checkout:

py.test

Coding standard and linting the code

Код должен соответствовать рекомендациям по кодированию PEP-8 и должен быть отформатирован с использованием инструмента форматирования кода black.

Для проверки качества кода можно использовать flake8, рекомендуемые плагины перечислены в :file:``.pre-commit-config.yaml`, а их настройки находятся в setup.cfg.

The easiest approach to enforce all this is to install pre-commit. The repository contains configuration for it to verify the committed files are sane. After installing it (it is already included in the requirements-lint.txt) turn it on by running pre-commit install in Weblate checkout. This way all your changes will be automatically checked.

Также вы можете запустить эту проверку вручную, чтобы проверить все файлы, запустите:

pre-commit run --all

О Weblate

Цели проекта

Web-based continuous localization tool with tight Интеграция с системой контроля версий supporting a wide range of file formats, making it easy for translators to contribute.

Название проекта

«Weblate» образовано слиянием слов «web» и «translate» (переводить).

Веб-сайт проекта

Стартовая страница проекта — https://weblate.org. Облачный сервис расположен на https://hosted.weblate.org. Данную документацию можно прочесть по адресу https://docs.weblate.org/ru.

Логотипы проекта

Логотип проекта и другая графика доступна в: https://github.com/WeblateOrg/graphics.

Руководство

Этот проект курируется Михалом Чигаржем (Michal Čihař), с которым можно связаться через: michal@cihar.com.

Авторы

Weblate был создан Михалом Чиuгаржем (Michal Čihař) в 2012 году. С этого момента уже тысячи людей внесли в него свой вклад.

Лицензия

Авторское право © 2012–2022 Михал Чигарж (Michal Čihař) michal@cihar.com

Это свободная программа: вы можете перераспространять ее и/или изменять ее на условиях Стандартной общественной лицензии GNU в том виде, в каком она была опубликована Фондом свободного программного обеспечения; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.

Эта программа распространяется в надежде, что она будет полезной, но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННЫХ ЦЕЛЕЙ. Подробнее можно просмотреть в Стандартной общественной лицензии GNU.

Вы должны были получить копию Стандартной общественной лицензии GNU вместе с этой программой. Если это не так, просмотрите <https://www.gnu.org/licenses/>.

Weblate 4.12.1

Released on April 29th 2022.

  • Fixed pull request message title.

  • Improved syntax error handling in Fluent format.

  • Fixed avatar display in notification e-mails.

  • Add support for web monetization.

  • Fixed removal of stale source strings when removing translations.

All changes in detail.

Weblate 4.12

Released on April 20th 2022.

All changes in detail.

Weblate 4.11.2

Released on March 4th 2022.

  • Fixed corrupted MO files in the binary release.

All changes in detail.

Weblate 4.11.1

Released on March 4th 2022.

  • Fixed missing sanitizing of arguments to Git and Mercurial - CVE-2022-23915, see GHSA-3872-f48p-pxqj for more details.

  • Fixed loading fuzzy strings from CSV files.

  • Added support for creating teams using the API.

  • Fixed user mention suggestions display.

  • The project tokens access can now be customized.

All changes in detail.

Weblate 4.11

Released on February 25th 2022.

  • Fixes stored XSS - CVE-2022-24710, see GHSA-6jp6-9rf9-gc66 for more details.

  • Исправлена установка надстроек с помощью API.

  • Переименовано Строки, требующие действий в Незавершённые строки.

  • Исправлены ложные срабатывания от Синтаксис ICU MessageFormat.

  • Обозначение замка и соглашение с участником в списке других происшествий.

  • Исправлено обновление файлов PO с устаревшими строками или отсутствующими множественными числами.

  • Улучшена совместимость надстройки уплотнения с Gerrit.

  • Automatically initialize user languages based on the Accept-Language header.

  • Improved error handling on string removal.

  • Weblate now requires Python 3.7 or newer.

  • Fixed some write operations with project token authentication.

  • Fixed string state tracking when the strings changes in the repository.

  • Track string changes from the repository.

  • Sticky header on translations listing to improve navigation.

  • Fixed untranslating strings in Файлы свойств Java.

  • Fixed Git operation with non-ascii branch names.

  • New add-on Предварительно заполнять перевод источником.

  • Added Merge without fast-forward Стиль слияния.

  • Fixed Автоматический перевод add-on trigger on newly added strings.

  • Improved punctuation checks for Burmese.

  • Added support for defining custom teams at project level to grant users access, see По-проектная настройка доступа.

  • Added documentation links to alerts.

  • При необходимости контейнер Docker автоматически включает TLS/SSL для исходящей электронной почты.

  • Added support for searching for resolved comments.

  • Added support for borgbackup 1.2.

  • Fixed applying of Automatically translated label.

All changes in detail.

Weblate 4.10.1

Выпущено 22 декабря 2021 года.

  • Документированы изменения, внесённые при обновлении до Django 4.0.

  • Исправлено отображение метки Автоматически переведённая.

  • Исправлено отображение ветки в API в компонентах с общим репозиторием.

  • Улучшен анализ предупреждения о неудачной отправке изменений.

  • Исправлено ручное редактирование страницы при изменении просмотра.

  • Улучшена точность Используется кашида.

  • Контейнер Docker для Weblate теперь использует Python 3.10.

All changes in detail.

Weblate 4.10

Выпущено 16 декабря 2021 года.

  • Добавлена поддержка формальности и местозаполнителей с помощью DeepL.

  • Массовая правка и поиск и замена теперь доступны на уровне проекта и языка.

  • Добавлена фильтрация для поиска и замены.

  • Исправлено: привилегия «Выполнять автоматический перевод» не является частью группы Языки.

  • «Выполнять автоматический перевод» теперь в группе Администрирование и новой группе Автоматический перевод.

  • Исправлены проблемы генерации файлов XLSX со специальными символами.

  • В серверную часть аутентификации GitHub добавлена возможность проверять, принадлежит ли пользователь к определённой организации или группе GitHub.

  • Усовершенствованы сообщения о некорректных параметрах, передаваемых в API.

  • Добавлена поддержка токенов доступа на уровне проекта в API.

  • Исправлено удаление строк в некоторых случаях.

  • Исправлен перевод вновь добавленных строк.

  • Автоматическая пометка переведённых строк, чтобы облегчить их фильтрацию.

Все изменения в деталях.

Weblate 4.9.1

Выпущен 19 ноября 2021 года.

  • Исправлена загрузка одноязычных файлов после смены шаблона.

  • Улучшено управление пробелами во флагах.

  • Добавлена поддержка фильтра в API для скачивания.

  • Исправлено отображение статистики при добавлении новых переводов.

  • Устранение проблем с изменением SSH-ключа GitHub.

Все изменения в деталях.

Weblate 4.9

Выпущен 10 ноября 2021 года.

  • Предоставлена более подробная информация о событиях в истории.

  • Улучшено отображение истории.

  • Улучшена производительность на страницах перевода.

  • Добавлена поддержка ограничения загрузки файлов переводов.

  • Теперь safe-html может понимать Markdown при использовании md-text.

  • Тег max-length теперь игнорирует разметку XML при использовании с xml-text.

  • Исправлены размеры отображаемых текстов в Максимальный размер перевода.

  • Уменьшена длина заголовка app store до 30, чтобы облегчить предстоящие изменения в политике Google.

  • Добавлена поддержка настройки вызова SSH с помощью SSH_EXTRA_ARGS.

  • Добавлены проверки для ICU MessageFormat.

  • Улучшена обработка условий ошибок в бэкендах машинного перевода.

  • Выделены необычные пробельные символы в строках.

  • Добавлена возможность оставаться на переведённой строке во время редактирования.

  • Добавлена поддержка настройки вызова Borg с помощью BORG_EXTRA_ARGS.

  • Исправлено создание MO-файлов для одноязычных переводов.

  • Добавлена конечная точка API для скачивания всех переводов компонентов в виде ZIP-файла.

  • Добавлена поддержка Python 3.10.

  • Добавлена поддержка повторной отправки приглашения по электронной почте из интерфейса управления.

Все изменения в деталях.

Weblate 4.8.1

Выпущен 10 сентября 2021 года.

  • Исправлено удаление пользователей в интерфейсе администратора Django.

  • Более подробная документация параметров надстроек.

  • Исправлена ошибка JavaScript в глоссарии.

  • Добавить ограничение на количество совпадений при проверке согласованности.

  • Улучшение обработки заполнителей в машинных переводах.

  • Исправлено создание надстроек с помощью API.

  • Добавлен параметр PRIVACY_URL для добавления ссылки на политику конфиденциальности в нижний колонтитул.

  • Скрыты адреса электронной почты участников от администраторов проекта.

  • Улучшено объединение gettext PO в случае конфликтов.

  • Улучшена подсветка глоссария.

  • Улучшено поведение флага safe-html при проверке XML.

  • Исправлены сообщения о коммите для связанных компонентов.

Все изменения в деталях.

Weblate 4.8

Выпущен 21 августа 2021 года.

  • Добавлена поддержка формата Apple stringsdict.

  • Оператор точного поиска теперь чувствителен к регистру в PostgreSQL.

  • Исправлено сохранение пояснений глоссария в некоторых случаях.

  • Улучшения в документации.

  • Улучшения производительности.

  • Улучшена совместимость надстройки уплотнения с Gerrit.

  • Исправлено добавление строк в компоненты одноязычного глоссария.

  • Улучшенная производительность в вариантах обработки.

  • Исправлена надстройка уплотнения, которая иногда пропускала разбор изменений в вышестоящий репозиторий.

  • Сохранение расширения файла при загрузке.

  • Добавлена поддержка формата Fluent.

  • Добавлена поддержка использования табуляции для отступов в форматах JSON.

Все изменения в деталях.

Weblate 4.7.2

Выпущен 15 июля 2021 года.

  • Поддержка большего количества псевдонимов для языка в настройках проекта.

  • Исправлена проверка поисковой строки в API.

  • Исправлены URL-адреса экспортера Git после смены домена.

  • Исправлена надстройка очистки для файлов Windows RC.

  • Исправлен возможный сбой при обновлении XLIFF.

Все изменения в деталях.

Weblate 4.7.1

Выпущен 30 июня 2021 года.

  • Улучшено всплывающее окно для добавления терминов в глоссарий.

  • Добавлена поддержка машинного перевода с помощью LibreTranslate.

  • Добавлено ограничение скорости при создании новых проектов.

  • Улучшена производительность обновления файлов.

Все изменения в деталях.

Weblate 4.7

Выпущен 17 июня 2021 года.

  • Улучшена проверка работоспособности конфигурации.

  • Добавлена поддержка формата object-pascal-format, используемого в PO-файлах gettext, смотреть раздел Формат Object Pascal.

  • Переименовано Соседние ключи в Похожие ключи, чтобы лучше описать цель.

  • Добавлена поддержка меток.

  • Улучшена интеграция с аутентификацией SAML.

  • Исправлена интеграция Gerrit для лучшей обработки угловых случаев.

  • Weblate теперь требует Django 3.2.

  • Исправлено приглашение пользователей при отключённой аутентификации по электронной почте.

  • Улучшены определения языков.

  • Добавлена поддержка блокировки пользователей от внесения вклада в проект.

  • Исправлено автоматическое создание языков глоссария.

  • Расширена документация о надстройках.

  • Улучшение производительности для компонентов со связанными репозиториями.

  • Добавлена поддержка бесплатного API переводчика DeepL .

  • Для управления пользователями больше не нужен интерфейс администратора Django.

Все изменения в деталях.

Weblate 4.6.2

Выпущен 8 мая 2021 года.

  • Исправлен сбой после перемещения общего компонента между проектами.

  • Исправлено добавление новых строк в пустые файлы свойств.

  • Исправлено выравнивание значков копирования в языках RTL.

  • Расширенная статистика строк на вкладке информации.

  • Исправлена обработка файлов переводов, игнорируемых в Git.

  • Улучшение производительности метрик.

  • Исправлена возможная ошибка при сохранении глоссариев.

  • Исправлено поведение проверки согласованности в языках с разными правилами множественного числа.

Все изменения в деталях.

Weblate 4.6.1

Выпущен 2 мая 2021 года.

  • Удалён устаревший код защиты от спама.

  • Повышение точности проверки множественности источников.

  • Обновлён список языков пользовательского интерфейса в Docker.

  • Улучшены сообщения об ошибках при создании запросов на извлечение(pull request).

  • Исправлено создание запросов на извлечение(pull request) на Pagure.

  • Исправлено срабатывание автоматически устанавливаемых надстроек.

  • Исправлены возможные проблемы с кэшированием при обновлении.

  • Исправлено добавление новых единиц в одноязычные переводы с помощью загрузки.

Все изменения в деталях.

Weblate 4.6

Выпущен 19 апреля 2021 года.

  • Команда управления auto_translate теперь имеет параметр для указания режима перевода.

  • Добавлена поддержка Текстовые файлы.

  • Добавлены тенденции и метрики для всех объектов.

  • Added support for directly copying text from secondary languages.

  • Добавлена фильтрация по дате при просмотре изменений.

  • Улучшены графики деятельности.

  • Теперь можно настроить отправителя для писем контактной формы.

  • Улучшена проверка параметров в API создания компонентов.

  • Ограничение скорости больше не применяется к суперпользователям.

  • Улучшена производительность и надёжность надстройки автоматического перевода.

  • Ограничение скорости теперь может быть настроено в Docker-контейнере.

  • API для создания компонентов теперь автоматически использует Внутренние URL-адреса Weblate.

  • Упрощена индикация состояния при перечислении строк.

  • Хеширование паролей теперь по умолчанию использует Argon2.

  • Простой индикатор прогресса указывает на состояние перевода.

  • Переименован Добавить отсутствующие языки для уточнения цели.

  • Исправлено сохранение состояния строки в XLIFF.

  • Добавлен поиск по всем языкам.

  • Начальная поддержка развёртывания Масштабирование горизонтально для Docker.

Все изменения в деталях.

Weblate 4.5.3

Выпущен 1 апреля 2021 года.

  • Исправлен сбор метрик.

  • Исправлен возможный сбой при добавлении строк.

  • Улучшены примеры поисковых запросов.

  • Исправлена возможная потеря новых добавленных строк при загрузке замены.

Weblate 4.5.2

Выпущен 26 марта 2021 года.

  • Настраиваемое расписание для автоматического перевода.

  • Добавлена проверка формата Lua.

  • Игнорировать строки формата при проверке Повторяющиеся слова.

  • Разрешена загрузка снимка экрана со страницы перевода.

  • Добавлена принудительная синхронизация файлов для обслуживания репозитория.

  • Исправлены автоматические предложения для языков с более длинным кодом.

  • Улучшена производительность при добавлении новых строк.

  • Исправлено несколько ошибок в проверке качества.

  • Несколько улучшений производительности.

  • Добавлена интеграция с Навигатор Weblate.

  • Исправлено поведение проверок со строками, доступными только для чтения.

Все изменения в деталях.

Weblate 4.5.1

Выпущен 5 марта 2021 года.

  • Исправлено редактирование флагов глоссария в некоторых угловых случаях.

  • Расширено использование метрик для улучшения производительности нескольких страниц.

  • Правильный исходный язык в файлах TMX.

  • Улучшена обработка загрузки одноязычных PO с помощью API.

  • Улучшено поведение предупреждений для компонентов глоссария.

  • Улучшена проверка ссылок в формате Markdown.

  • Указывайте глоссарий и язык источника в навигационной цепочке.

  • Постраничное перечисление компонентов огромных проектов.

  • Улучшенная производительность при удалении переводов, компонентов или проектов.

  • Улучшена производительность массовой правки.

  • Исправлено сохранение состояний «На правку» и «Одобренный» для файлов ODF.

  • Улучшенный интерфейс для настройки загрузки переводческих файлов

Все изменения в деталях.

Weblate 4.5

Выпущен 19 февраля 2021 года.

  • Добавлена поддержка формата lua-format, используемого в PO-файлах gettext.

  • Добавлена поддержка разделяемых компонентов между проектами.

  • Исправлено поведение проверки «несколько переменных без названий» в случае, если использовались разные флаги форматирования.

  • Из проектов удалено поле «список рассылки»; вместо него рекомендуется использовать общие инструкции для переводчиков.

  • Добавлена надстройка «Генератор псевдолокалей».

  • Добавлена поддержка файлов формата TermBase eXchange.

  • Добавлена поддержка ручного объявления вариантов строк с помощью флага variants.

  • Улучшена производительность проверок согласованности.

  • Улучшена производительность памяти переводов при работе с очень длинными строками.

  • Добавлена поддержка поиска по пояснениям.

  • Строки теперь можно добавлять и удалять также и в двуязычных форматах.

  • Расширен список поддерживаемых языков для машинного перевода Amazon Translate.

  • Автоматическое включение проверок Java MessageFormat для файлов свойств Java.

  • Добавлен новый метод загрузки для добавления новых строк к переводу.

  • Добавлен простой интерфейс просмотра перевода.

  • Глоссарии теперь хранятся как обычные компоненты.

  • Удалён особый API для глоссариев, поскольку теперь для них используется API компонента.

  • Добавлен упрощённый интерфейс для переключения некоторых флагов.

  • Добавлена поддержка непереводимых и нежелательных терминов в глоссарии.

  • Добавлена поддержка определения терминологии в глоссарии.

  • Переключатель направления текста перемещён, чтобы освободить побольше места для визуальной клавиатуры.

  • Добавлен параметр для автоматического отслеживания проектов, в которые пользователь внёс свой вклад.

  • Добавлена проверка на соответствие перевода термину в глоссарии.

  • Добавлена поддержка настройки цвета навигационного текста.

Все изменения в деталях.

Weblate 4.4.2

Выпущен 14 января 2021 года.

  • В дистрибутиве исправлен один повреждённый MO-файл.

Weblate 4.4.1

Выпущен 13 января 2021 года.

  • Исправлена отмена изменений в строках с множественным числом.

  • Исправлено отображение помощи для настроек проекта.

  • Улучшено управление пользователями.

  • Улучшена обработка контекста в одноязычных PO-файлах.

  • Исправлено поведение надстройки очистки с форматами HTML, ODF, IDML и Windows RC.

  • Исправлен парсинг расположения из CSV-файлов.

  • Использование сжатия содержимого при скачивании файлов.

  • Улучшена процедура импорта ZIP-файлов.

  • Улучшено распознавание форматов файлов при загрузке.

  • Теперь Weblate старается избегать дупликации запросов на слияние на Pagure.

  • Улучшена производительность при отображении призрачных переводов.

  • Переписана реализация поля редактирования переводов, чтобы она использовала родную область ввода браузера.

  • Исправлено нарушение работы надстройки очистки при добавлении новых строк.

  • Добавлен API для надстроек.

Все изменения в деталях.

Weblate 4.4

Выпущен 15 декабря 2020 года.

  • Улучшена проверка значений при создании нового компонента.

  • Weblate теперь требует Django 3.1.

  • Добавлена поддержка настройки внешнего вида через интерфейс управления.

  • Исправлена обработка строк, доступных только для чтения, при массовых правках.

  • Улучшена интеграция с CodeMirror.

  • Добавлена надстройка для удаления пустых строк из файлов перевода.

  • Редактор CodeMirror теперь используется и для переводов.

  • Подсветка синтаксиса в редакторе перевода для XML, HTML, Markdown и reStructuredText.

  • Подсветка местозаполнителей в редакторе перевода.

  • Улучшена поддержка нестандартных языковых кодов.

  • Добавлены предупреждения при использовании неоднозначных языковых кодов.

  • При добавлении нового языка перевода пользователю теперь показывается отфильтрованный список языков.

  • Расширены возможности поиска изменений в истории.

  • Улучшены страницы с информацией о тарифном плане и рабочий процесс на тарифном плане для свободных проектов.

  • Расширен API по работе со статистикой переводов.

  • Улучшена вкладка «другие языки» на страницах перевода.

  • Добавлен API для задач.

  • Улучшена производительность загрузки файлов.

  • Улучшено отображение специальных символов, определённых пользователем.

  • Улучшена производительность автоматического перевода.

  • Несколько незначительные улучшения пользовательского интерфейса.

  • Улучшено именование скачиваемых ZIP-файлов.

  • Добавлена опциональная возможность получать уведомления от неотслеживаемых проектов.

Weblate 4.3.2

Выпущен 4 ноября 2020 года.

  • Исправлен сбой при определённых масках файлов компонентов.

  • Улучшена точность проверки «Повторяющиеся слова».

  • Добавлена поддержка запросов на извлечение Pagure.

  • Улучшены сообщения об ошибках, которые выводятся при неудавшейся регистрации.

  • Отменено отображение комментариев разработчиков как Markdown.

  • Упрощена настройка Git-репозиториев с названием ветки по умолчанию отличным от «master».

  • Вновь созданные внутренние репозитории теперь используют «main» в качестве ветки по умолчанию.

  • Уменьшение количества ложно-положительных результатов для проверки «Перевод без изменения» при переводе ReST (reStructuredText).

  • Исправлены проблемы с отображением CodeMirror в некоторых ситуациях.

  • Группа «Шаблоны» переименованы в группу «Источники», дабы сделать её смысл более очевидным.

  • Исправлены запросы на извлечения GitLab в репозиториях с более длинными путями.

Все изменения в деталях.

Weblate 4.3.1

Выпущен 21 октября 2020 года.

  • Улучшена производительность автоматического перевода.

  • Исправлено истечение срока действия сессии для авторизованных пользователей.

  • Добавлена возможность скрыть информацию о версии Weblate.

  • Улучшена совместимость с сервером Bitbucket.

  • Улучшена производительность обновления памяти переводов.

  • Уменьшино использование памяти.

  • Улучшена производительность просмотра в виде матрицы.

  • Добавлено подтверждение перед удалением пользователей из проекта.

Weblate 4.3

Выпущен 15 октября 2020 года.

  • В API включена статистика пользователей.

  • Исправлена сортировка компонентов на страницах с постраничной разбивкой результатов.

  • Определение исходного языка для глоссария.

  • Переписана поддержка GitHub’овских и GitLab’овских запросов на извлечение.

  • Исправлен счётчик статистики после удаления предложения.

  • Расширен общедоступный профиль пользователя.

  • Исправлены настройки принудительных проверок.

  • Улучшена документация по встроенному резервному копированию.

  • Атрибут исходного языка перемещён из проекта в компонент.

  • Добавлена проверка форматирования локализации Vue.

  • Обычная проверка заполнителей теперь поддерживает регулярные выражения.

  • Улучшен внешний вид матричного режима.

  • «Автоматизированный перевод» теперь называется «автоматическими предложениями».

  • Добавлена поддержка взаимодействия с несколькими экземплярами GitLab’а или GitHub’а.

  • API расширен для покрытия обновления проектов, а также обновления и удаления единиц перевода и глоссариев.

  • API единицы перевода теперь правильно обрабатывает строки с формами множественного числа.

  • Создать компонент теперь можно, загрузив ZIP-файл или документ.

  • Единообразие в кодах состояний ответа API.

  • Поддержка разметки Markdown в соглашении участника.

  • Улучшено отслеживание исходных строк.

  • Улучшена совместимость с форматами JSON, YAML и CSV.

  • Добавлена поддержка удаления строк.

  • Улучшена производительность скачивания файлов.

  • Улучшен интерфейс управления репозиториями.

  • Автоматическое включение java-формата для Android.

  • Добавлена поддержка локализованных снимков экрана.

  • Добавлена поддержка Python 3.9.

  • Исправлен перевод HTML-файлов при некоторых условиях.

Все изменения в деталях.

Weblate 4.2.2

Выпущен 2 сентября 2020 года.

  • Исправлено сопоставление исходных строк для форматов на основе JSON.

  • Исправлено перенаправление входа для некоторых конфигураций аутентификации.

  • Исправлена аутентификация через LDAP с синхронизацией групп.

  • Исправлено падение при сообщении о прогрессе автоматического перевода.

  • Исправлено уплотнение коммитов Git’а при включённом добавлении завершителей.

  • Исправлено создание компонентов из локальной системы контроля версий с помощью API.

Weblate 4.2.1

Выпущен 21 августа 2020 года.

  • Исправлено сохранение форм множественного числа для некоторых локалей в ресурсах Android’а.

  • Исправлена ошибка в надстройке очистки для некоторых файлов XLIFF.

  • Теперь доступно создание сети доставки содержимого (CDN) локализации внутри образа Docker.

Weblate 4.2

Выпущен 18 августа 2020 года.

  • Улучшены страницы пользователей и добавлен список пользователей.

  • Прекращена поддержка перехода с выпусков серии 3.x, перехода через версии 4.1 или 4.0.

  • Добавлены экспорты в несколько одноязычных форматов.

  • Улучшены графики деятельности.

  • Количество отображаемых соседних строк теперь поддаётся настройке.

  • Добавлена поддержка блокировки компонентов, в которых возникли ошибки в репозитории.

  • Упрощена основная навигация (кнопки заменены на иконки).

  • Улучшена обработка кода языка в интеграции с Google Translate.

  • Надстройка Git для уплотнения коммитов теперь генерирует завершители Co-authored-by:.

  • Улучшен анализатор поисковых запросов.

  • Улучшена обратная связь с пользователями при проверке строк формата.

  • Улучшена производительность при массовых изменениях состояния.

  • Добавлены перенаправления для совместимости после переименования проекта или компонента.

  • Добавлены уведомления об одобрении строк, блокировке компонентов и изменении лицензии.

  • Добавлена поддержка ModernMT.

  • Разрешено избегать перезаписи одобренных переводов при загрузке файлов.

  • Прекращена поддержка некоторых перенаправлений URL-адресов, существовавших ради совместимости.

  • Добавлена проверка для шаблонных литералов ECMAScript.

  • Добавлен параметр для отслеживания компонента.

  • Из ключей единиц перевода JSON удалена ведущая точка.

  • Удалена отдельная очередь Celery для памяти переводов.

  • Разрешено одновременно переводить все компоненты одного языка.

  • Разрешено настраивать HTTP -заголовки Content-Security-Policy.

  • Добавлена поддержка задания псевдонимов для языков на уровне проекта.

  • Новая надстройка для помощи в локализации HTML или JavaScript, смотрите раздел CDN локализации JavaScript’а.

  • Теперь домен Weblate настраивается в настройках, смотрите описание параметра SITE_DOMAIN.

  • Добавлена поддержка поиска по компонентам и проектам.

Weblate 4.1.1

Выпущен 19 июня 2020 года.

  • Исправлено изменение конфигурации автоматического исправления или надстроек в Docker.

  • Исправлено возможное падение на странице «О Weblate».

  • Улучшена установка скомпилированных файлов локали.

  • Исправлено добавление слов в глоссарий.

  • Исправлены горячие клавиши для автоматизированного перевода.

  • Удалён отладочный вывод, вызывающий при некоторых настройках отбрасывание событий журнала.

  • Исправлена индикация блокировки в списке проектов.

  • Исправлено перечисление ключей GPG при некоторых настройках.

  • Добавлен параметр для выбора используемой версии API DeepL.

  • Добавлена поддержка работы в качестве провайдера SAML-сервиса, смотрите Аутентификация через SAML.

Weblate 4.1

Выпущен 15 июня 2020 года.

  • Добавлена поддержка создания новых переводов с включенным кодом страны.

  • Добавлена поддержка поиска исходных строк со снимками экрана.

  • Расширен состав информации, доступный в статистике.

  • Улучшено редактирование поиска на страницах перевода.

  • Улучшена обработка одновременных обновлений репозитория.

  • В форму создания проекта включен исходный язык.

  • В список переводчиков включено количество изменений.

  • Исправлена возникающая в некоторых случаях ошибка выбора языка пользовательского интерфейса.

  • Разрешение внесения методов регистрации в белый список при закрытых регистрациях.

  • Улучшен поиск смежных терминов в глоссарии.

  • Улучшены соответствия с памятью переводов.

  • Группировка одинаковых результатов автоматизированного перевода.

  • Добавление прямой ссылки для редактирования снимка экрана прямо со страницы перевода.

  • Улучшен диалог подтверждения удаления.

  • В скачиваемый ZIP-файл включены шаблоны.

  • В объявлениях добавлена поддержка Markdown и настройка уведомлений.

  • Расширенная информация в списках проверок.

  • Добавлена поддержка новых форматов файлов: Строки Laravel PHP, Файлы HTML, Формат OpenDocument, Формат IDML, Файлы ресурсов Windows, Переводы в INI-файлах, Переводы в INI-файлах Inno Setup, Файлы свойств GWT, JSON-файлы go-i18n и Файл ARB.

  • Последовательное использование статуса «пропущена» в качестве статуса пропущенных проверок.

  • Добавлена поддержка для настройки включённых надстроек по умолчанию.

  • Исправлено сочетание клавиш редактора для пропуска проверок.

  • Улучшен машинный перевод строк с заполнителями.

  • Показ призрачного перевода для языков пользователя, чтобы упростить ему начало перевода.

  • Улучшен разбор кода языка.

  • Показ переводов на язык пользователя на первом месте в списке.

  • Переименование «форм» на более обобщённые «варианты».

  • Добавлены новые проверки качества: Несколько переменных без названий, Давно не переводилась и Повторяющиеся слова.

  • Вновь введена поддержка стирания памяти переводов.

  • Исправлен параметр для включения в исходной строке игнорирования проверок.

  • Добавлена поддержка настройки различных веток, в которые следует отправлять изменения.

  • API теперь сообщает об ограничении в частоте запросов в заголовках HTTP.

  • Добавлена поддержка Google Translate V3 API (расширенная).

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

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

  • Отображаемый текст, если он включён, показывается всегда.

  • API теперь поддерживает фильтрацию изменений.

  • Добавлена поддержка обмена глоссариями между проектами.

Weblate 4.0.4

Выпущен 7 мая 2020 года.

  • Исправлено выполнение тестового набора в некоторых окружениях с Python’ом 3.8.

  • Исправление опечаток в документации.

  • Исправлена возникавшая в некоторых случаях ошибка создания компонентов с помощью API.

  • Исправлены ошибки JavaScript, ломающие навигацию на мобильных устройствах.

  • Исправлено падение при отображении некоторых проверок.

  • Исправлен вывод списка снимков экрана.

  • Исправлены ежемесячные выдержки с уведомлениями.

  • Исправлено поведение промежуточного перевода с единицами перевода, не существовавшими в переводе.

Weblate 4.0.3

Выпущен 2 мая 2020 года.

  • Исправлено возможное падение в отчётах.

  • Упоминания пользователей в комментариях теперь не чувствительны к регистру.

  • Исправлена миграция PostgreSQL для не суперпользователей.

  • Исправлено изменение URL-адреса репозитория при создании компонента.

  • Исправлено падение при исчезновении вышестоящего репозитория.

Weblate 4.0.2

Выпущен 27 апреля 2020 года.

  • Улучшена производительность статистики перевода.

  • Улучшена производительность смены меток.

  • Улучшена производительность массовой правки.

  • Улучшена производительность памяти переводов.

  • Исправлено возможное падение при удалении компонента.

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

  • Улучшено предупреждение о слишком длинной очереди Celery.

  • Исправлены возможные ложные срабатывания при проверке согласованности.

  • Исправлена взаимоблокировка при изменении репозитория связанного компонента.

  • В список изменений, CSV и отчёты включено расстояние редактирования.

  • Обход ложных срабатываний проверки интервала между знаками препинания для канадского французского языка.

  • Исправлен экспорт в формат XLIFF с заполнителями.

  • Исправлено ложное срабатывание с проверкой на символ нулевой ширины.

  • Улучшены отчеты об ошибках конфигурации.

  • Исправлена загрузка двуязычных исходных текстов.

  • Автоматическое определение поддерживаемых языков для машинного перевода DeepL.

  • Исправлено отображение индикатора выполнения в некоторых пограничных случаях.

  • Исправлено срабатывание некоторых проверок на непереведенных строках.

Weblate 4.0.1

Выпущен 16 апреля 2020 года.

  • Исправлена установка пакета из PyPI.

Weblate 4.0

Выпущен 16 апреля 2020 года.

  • Weblate теперь требует Python 3.6 или новее.

  • Добавлен обзор управления предупреждений компонентов.

  • Добавлено предупреждение компонента о сломанных URL-адресах браузера репозитория.

  • Улучшены страницы входа и регистрации.

  • Управление доступом к проекту и настройки рабочего процесса интегрированы в настройки проекта.

  • Добавлена проверка и подсветка для интерполяций и вложенных строк i18next.

  • Добавлена проверка и подсветка для процентных заполнителей.

  • Отображение неудачных проверок в предложениях.

  • Запись изменений исходной строки в историю.

  • Обновление переводчика Microsoft Translator на третью версию его API.

  • Повторная реализация серверной части памяти переводов.

  • В Поиск добавлена поддержка нескольких is: поисков.

  • Разрешено делать так, чтобы проверка Перевод без изменения не попадала во внутренний чёрный список.

  • Улучшено извлечение комментариев из одноязычных po файлов.

  • «Доски сообщений» переименованы в «объявления».

  • Исправлены случайные проблемы с регистрационными письмами.

  • Улучшена надстройка обновления LINGUAS-файла: теперь она обрабатывает большее количество синтаксических вариантов.

  • Исправлено редактирование одноязычного исходного файла XLIFF.

  • В Поиск добавлена поддержка точного соответствия.

  • Расширенный API, охватывающий снимки экрана, пользователей, группы, списки компонентов и расширенное создание проектов.

  • Добавлена поддержка загрузки исходных текстов в двуязычные переводы.

  • Добавлена поддержка промежуточного языка от разработчиков.

  • Добавлена поддержка рецензирования исходных строк.

  • Расширенные параметры скачивания памяти переводов со всей платформы.

Серия Weblate 3.x

Weblate 3.11.3

Выпущен 11 марта 2020 года.

  • Исправлен поиск полей с определённым приоритетом.

  • Исправлен предопределённый запрос для недавно добавленных строк.

  • Исправлен поиск, возвращающий повторяющиеся совпадения.

  • Исправлена отрисовка уведомлений в Gmail.

  • Исправлен возврат изменений из истории.

  • Добавлены ссылки на события в выдержках с уведомлениями.

  • Исправлено электронное письмо для подтверждения удаления учётной записи.

  • Добавлена поддержка аутентификации через Slack в контейнере Docker.

  • Устранение отправки уведомлений для языков, на которые пользователь не подписан.

  • Включение в обзор производительности очередей Celery.

  • Исправлены ссылки на документацию для надстроек.

  • Уменьшение количества ложно-отрицательных результатов для проверки «Перевод без изменения».

  • Повышение версии зависимости bleach для закрытия уязвимости CVE-2020-6802.

  • Исправлено перечисление изменений в истории на уровне проекта.

  • Исправлено аннулирование статистики в некоторых граничных случаях.

  • Исправлен поиск определённых состояний строки.

  • Улучшено поведение проверки строк формата при пропущенном проценте.

  • Исправлена аутентификация с использованием некоторых сторонних провайдеров.

Weblate 3.11.2

Выпущен 22 февраля 2020 года.

  • Исправлена отрисовка предложений.

  • Исправлены некоторые строки, для которых ошибочно сообщалось, что в нет слов.

Weblate 3.11.1

Выпущен 20 февраля 2020 года.

  • Документированы изменения в настройке Celery.

  • Улучшена проверка имени файла при создании компонентов.

  • Исправлены минимальные версии некоторых зависимостей.

  • Исправлено добавление групп в определённых версиях Django.

  • Исправлена ручная отправка изменений в вышестоящий репозиторий.

  • Улучшен поиск соответствия в словаре.

Weblate 3.11

Выпущен 17 февраля 2020 года.

  • Разрешено использование URL-адреса для отправки в систему контроля версий во время создания компонента через API.

  • Проверка ширины отрисованного текста теперь показывает изображение с отрисованным текстом.

  • Исправлены ссылки в электронных письмах с уведомлениями.

  • Улучшен внешний вид простых текстовых электронных писем.

  • Отображение проигнорированных проверок и разрешение сделать их снова активными.

  • Отображение соседних ключей в одноязычных переводах.

  • Добавлена поддержка группировки строковых форм.

  • Рекомендация обновления до новой версии Weblate в проверках системы.

  • Предоставление более подробного анализа для предупреждения о повторяющемся языке.

  • Включение более подробной информации о лицензиях на страницах проекта.

  • Автоматическое преобразование поверхностных локальных копий в полные, если это необходимо.

  • Исправлено скачивание строк, требующих действий.

  • Новое предупреждение о повторном использовании одной и той же маски файлов.

  • Улучшено извлечение мест подстановки в XML.

  • Теперь параметр SINGLE_PROJECT может включать принудительное перенаправление на выбранный проект.

  • Добавлена возможность указания, что описанная в комментарии проблема решена.

  • Добавлена массовая правка флагов.

  • Добавлена поддержка меток.

  • Добавлена надстройка «Массовая правка».

  • Добавлен параметр для Принудительные проверки.

  • Увеличен умолчательный срок действия ссылок подтверждения.

  • Улучшена интеграция с Matomo.

  • Исправлена проверка Уже переведено для корректной обработки изменений в исходных строках.

  • Расширение настроек автоматического обновления, контролируемых параметром AUTO_UPDATE.

  • Надстройки LINGUAS теперь выполняют полную синхронизацию переводов с Weblate.

Weblate 3.10.3

Выпущен 18 января 2020 года.

  • Поддержка translate-toolkit 2.5.0.

Weblate 3.10.2

Выпущен 18 января 2020 года.

  • К проектам добавлена индикация блокировки.

  • Исправлена ошибка в CSS, вызывавшая мерцание в некоторых веб-браузерах.

  • Исправлен поиск в системах с неанглийскими локалями.

  • Улучшено сопоставление репозитория для обработчиков GitHub и Bitbucket.

  • Исправлена миграция данных на некоторых установках Python 2.7.

  • Разрешена настройка поверхностного клонирования в Git’е.

  • Улучшена обработка фоновых уведомлений.

  • Исправлена ошибка отправки сломанных форм при использовании браузерной кнопки «назад».

  • Новая надстройка для настройки форматирования YAML.

  • Исправлена проверка «Одинаковые формы множественного числа»: теперь она не срабатывает в языках с единственной формой множественного числа.

  • Исправлен поиск с использованием регулярных выражений по некоторым полям.

Weblate 3.10.1

Выпущен 9 января 2020 года.

  • Расширенный API с созданием перевода.

  • Исправлено несколько граничных случаев при миграции данных.

  • Совместимость с Django 3.0.

  • Улучшена производительность очистки данных.

  • Добавлена поддержка настройки security.txt.

  • Улучшены хлебные крошки в журнале изменений.

  • Улучшен список переводов в панели управления.

  • Улучшены HTTP-ответы для веб-обработчиков.

  • Добавлена поддержка запросов на слияние GitLab в контейнере Docker.

Weblate 3.10

Выпущен 20 декабря 2019 года.

  • Улучшен пользовательский интерфейс приложения.

  • Добавлена проверка на двойной пробел.

  • Исправлено создание новых языков.

  • Избежание отправки уведомлений из журнала аудита на удалённые адреса электронной почты.

  • Добавлена поддержка строк только для чтения.

  • Добавлена поддержка Markdown’а в комментариях.

  • Разрешение размещения текста инструкции по переводу в информации о проекте.

  • Добавлено копирование в буфер обмена для дополнительных языков.

  • Улучшена поддержка Mercurial.

  • Улучшена производительность извлечения из Git-репозитория.

  • Добавлен поиск по возрасту строки.

  • Показ исходного языка для всех переводов.

  • Показ контекста для соседних строк.

  • Добавлена поддержка уведомлений об операциях с репозиторием.

  • Улучшены списки перевода.

  • Расширены возможности поиска.

  • Добавлена поддержка автоматического перевода строк, помеченных на правку.

  • Избежание отправки повторных уведомлений для предупреждений в связанных компонентах.

  • Улучшение умолчательного сообщения о запросе на слияние.

  • Улучшение индикации состояния строки в Дзен-режиме.

  • Добавлена поддержка большего количества языков в Яндекс.Переводчике.

  • Улучшен внешний вид электронных писем уведомлений.

  • Предоставлена возможность выбора лицензии на перевод.

Weblate 3.9.1

Выпущен 28 октября 2019 года.

  • Из резервных копий удалены кое-какие ненужные файлы.

  • Исправлено возможное падение в отчётах.

  • Исправлена падение при миграции из одной базы данных в другую.

  • Добавлена поддержка принудительной отправки изменений в Git-репозитории.

  • Снижение риска аннулирования токена регистрации.

  • Исправлено удаление учётной записи, упёршейся в ограничение на частоту запросов.

  • Добавлен поиск по приоритету.

  • Исправлено возможное падение при добавлении строк в JSON-файл.

  • Проверка и исправление небезопасного HTML теперь учитывает разметку исходной строки.

  • Избегание отправки уведомлений приглашённым, но в то же время удалённым пользователям.

  • Исправлено SSL-соединение с redis в Celery, находящимся в контейнере Docker’а.

Weblate 3.9

Выпущен 15 октября 2019 года.

  • Включение в скачиваемые файлы метаданных Weblate.

  • Улучшен пользовательский интерфейс для неудачных проверок.

  • Указание недостающих строк в проверках формата.

  • Отдельная проверка на пробелы между знаками препинания французского языка.

  • Добавлена поддержка исправления некоторых ошибок проверки качества.

  • Добавлено отдельное разрешение на создание новых проектов.

  • Расширена статистика по количеству символов.

  • Улучшение поддержки языковых кодов в стиле Java.

  • Добавлена новая обобщённая проверка на заполнители.

  • Добавлена поддержка заполнителей WebExtension JSON.

  • Добавлена поддержка формата плоского XML-файла.

  • API расширен методами удаления и создания проекта, компонента и перевода.

  • Добавлена поддержка веб-обработчиков Gitea и Gitee.

  • Добавлена новая пользовательская проверка на основе регулярных выражений.

  • Разрешение настройки внесения вклада в общую память переводов.

  • Скачивание ZIP-архива добавлено для большего количества файлов перевода.

  • Разбор атрибутов maxwidth и font в формате XLIFF сделан совместимым со стандартом.

  • Добавлена новая проверка и исправление для безопасной HTML-разметки при переводе веб-приложений.

  • В компоненте добавлено предупреждение при обнаружении неподдерживаемой конфигурации.

  • Добавлена надстройка автоматического перевода для начального перевода.

  • Автоматический перевод расширен для добавления предложений.

  • Отображение в обзоре параметров надстройки.

  • Sentry теперь поддерживается через современный Sentry SDK вместо Raven.

  • Изменены примеры настроек, чтобы они лучше соответствовали окружению рабочей среды.

  • Добавлено автоматическое резервное копирование с помощью BorgBackup.

  • Разбиение надстройки очистки для RESX на две надстройки очистки и обновления, чтобы избежать нежелательных обновлений файлов.

  • Добавлены расширенные возможности поиска.

  • Пользователям разрешено скачивать свои собственные отчёты.

  • Для помощи в настройке компонентов добавлено руководство по локализации.

  • Добавлена поддержка запросов на слияние GitLab.

  • Улучшено отображение статуса репозитория.

  • Выполнение автоматического перевода в фоновом режиме.

Weblate 3.8

Выпущен 15 августа 2019 года.

  • Добавлена поддержка упрощённого создания похожих компонентов.

  • Добавлена поддержка разбора флагов перевода из форматов файлов, основанных на XML.

  • Журналирование исключений в журнал Celery.

  • Улучшена производительность надстроек, работающих с репозиторием.

  • Улучшен внешний вид электронных писем уведомлений.

  • Исправлено поведение при сбросе пароля.

  • Улучшена производительность на большинстве страниц перевода.

  • Исправлен список языков, неизвестных Weblate’у.

  • Добавлена поддержка клонирования надстроек в обнаруженные компоненты.

  • Добавлена поддержка замены содержимого файла загруженным файлом.

  • Добавлена поддержка перевода содержимого не из системы контроля версий.

  • Добавлен виджет изображения OpenGraph для его использования в социальных сетях.

  • Добавлена поддержка анимированных снимков экрана.

  • Улучшена обработка одноязычных файлов XLIFF.

  • Избегание отправки нескольких уведомлений на одно событие.

  • Добавлена поддержка фильтра по изменениям.

  • Расширенные предопределённые периоды отчётности.

  • Добавлена поддержка веб-обработчиков для репозиториев Azure Repos.

  • Новые необязательные уведомления об ожидающих предложениях или непереведённых строках.

  • В письма с уведомлениями добавлена ссылка для отписки от них в одно нажатие.

  • Исправлены ложные срабатывания в проверке «Уже переведено».

  • Новый интерфейс управления для администраторов.

  • Приоритет строки теперь можно задать с помощью флагов.

  • Добавлены представления управления языком.

  • Добавлены проверки на формат строк для библиотеки Qt и Ruby.

  • Добавлена конфигурация, лучше подходящая для установок с единственным проектом.

  • Уведомление о появлении новой строки при изменении исходной в одноязычном переводе.

  • Добавлено отдельное представление для памяти переводов с возможностью поиска.

Weblate 3.7.1

Выпущен 28 июня 2019 года.

  • Обновление документации.

  • Исправлены некоторые ограничения для версий зависимостей.

  • Обновлена база данных языков.

  • Обновления локализации.

  • Различные мелкие исправления пользовательского интерфейса.

  • Улучшена обработка неподдерживаемых, но обнаруженных файлов перевода.

  • Более подробный отчёт о не удовлетворённых требованиях к формату файлов.

Weblate 3.7

Выпущен 21 июня 2019 года.

  • Добавлена отдельная очередь Celery для уведомлений.

  • Использование согласованного с приложением вида для просмотра API.

  • В отчёты включена статистика по утверждённым переводам.

  • Сообщение о прогрессе при обновлении компонента перевода.

  • Разрешено прерывать запущенное фоновое обновление компонентов.

  • Расширение языка шаблонов для манипуляций именами файлов.

  • Использование шаблонов для ссылки на редактор и адреса браузера репозитория.

  • Показ максимальной длины и текущего количества символов при редактировании перевода.

  • В проверке «Перевод без изменения» улучшена обработка аббревиатур.

  • Обновлена страница входа новых участников.

  • Добавлена поддержка настройки надстройки msgmerge.

  • При отправке уведомлений добавлена задержка открытия SMTP-соединения.

  • Улучшено журналирование ошибок.

  • В надстройке генерирования файлов MO разрешено использование пользовательских расположений.

  • Добавлены надстройки для очистки старых предложений или комментариев.

  • Добавлен параметр для включения горизонтального режима в Дзен-редакторе.

  • Повышена производительность импорта множества взаимосвязанных компонентов.

  • Исправлены примеры установки, бывшие в некоторых случаях неправильными.

  • Улучшено отображение предупреждений в изменениях.

  • Добавлен новый виджет горизонтальной статистики.

  • Улучшена проверка строк формата для форм множественного числа.

  • Добавлен инструмент управления шрифтами.

  • Новая проверка размеров отрисовываемого текста.

  • Добавлена поддержка форматов субтитров.

  • Включена общая статистика по языкам.

  • Добавлены отчёты на уровне проекта и на глобальном уровне.

  • Улучшен пользовательский интерфейс при отображении статуса перевода.

  • Новая цветовая схема и логотип Weblate’а.

  • Новый внешний вид растровых плашек.

Weblate 3.6.1

Выпущен 26 апреля 2019 года.

  • Улучшена обработка одноязычных файлов XLIFF.

  • Исправлены выдержки с уведомлениями в некоторых граничных случаях.

  • Исправлено предупреждение об ошибке скрипта надстройки.

  • Исправлено создание файлов MO для одноязычных файлов PO.

  • Исправлено отображение не установленных проверок.

  • Обозначение управляемых проектов в списке проектов.

  • Разрешено обновление для восстановления из отсутствующего репозитория системы контроля версий.

Weblate 3.6

Выпущен 20 апреля 2019 года.

  • Добавлена поддержка скачивания данных пользователя.

  • Теперь надстройки автоматически запускаются при установке.

  • Улучшены инструкции по разрешению конфликтов слияния.

  • Надстройка очистки теперь совместима с переводами метаданных App store.

  • Настраиваемый синтаксис кода языка при добавлении новых переводов.

  • Предупреждение об использовании Python’а 2 в связи с запланированным прекращением его поддержки в апреле 2020 года.

  • Извлечение специальных символов из исходной строки для их показа и быстрой вставке при переводе.

  • Расширенная статистика по участникам, отражающая как количество источников, так и количество переводов.

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

  • Исправлено описание переключателя отключения манипуляции заголовком Language-Team.

  • Уведомление пользователей, упомянутых в комментариях.

  • Из настройки компонента удалено автоопределение формата файла.

  • Исправлено создание файлов MO для одноязычных файлов PO.

  • Добавлены выдержки с уведомлениями.

  • Добавлена поддержка заглушения уведомлений компонента.

  • Добавлены уведомления о новых предупреждениях, сообщениях на досках сообщений или компонентах.

  • Теперь можно настроить уведомления для управляемых проектов.

  • Улучшена обработка трёхбуквенных кодов языков.

Weblate 3.5.1

Выпущен 10 марта 2019 года.

  • Исправлен пример Celery-модуля systemd.

  • Исправлены уведомление из HTTP-репозиториев с логинами.

  • Исправлены состояния гонки при редактировании исходных строк для одноязычных переводов.

  • При неудачном выполнении надстроек их вывод включается в логи.

  • Улучшена проверка настроек при добавлении нового языка.

  • Разрешено редактирование формата в настройках компонента.

  • Обновлены инструкции по установки: теперь предпочтительная версия Python 3.

  • Улучшения производительности и последовательности при загрузке переводов.

  • Терминологическая служба Майкрософт сделана совместимой с текущими выпусками Zeep.

  • Обновления локализации.

Weblate 3.5

Выпущен 3 марта 2019 года.

  • Улучшена производительность встроенной памяти переводов.

  • Добавлен интерфейс управления глобальной памятью переводов.

  • Улучшена посылка предупреждений при плохом состоянии компонента.

  • Добавлен интерфейс управления совместной доской сообщений.

  • Теперь можно настраивать сообщения коммитов в надстройках.

  • Уменьшено количество коммитов при обновлении вышестоящего репозитория.

  • Исправлены возможные потери метаданных во время перемещения компонента между проектами.

  • Улучшена навигация в Дзен-режиме.

  • Добавлены несколько новых проверок качества (для Markdown и URL).

  • Добавлена поддержка файлов метаданных app store.

  • Добавлена поддержка переключения между интеграцией с GitHub или Gerrit.

  • Добавлена проверка на буквы кашиды.

  • Добавлен параметр для уплотнения коммитов на основе их авторства.

  • Улучшена поддержка формата файла XLSX.

  • Совместимость с Tesseract 4.0.

  • Надстройка «Тарифный план» теперь удаляет проекты неоплачиваемые в течении 45 дней.

Weblate 3.4

Выпущен 22 января 2019 года.

  • Добавлена поддержке заполнителей XLIFF.

  • Celery теперь может поддерживать множество очередей заданий.

  • Добавлена поддержка переименования и перемещения проектов и компонентов.

  • В отчёты включено количество символов.

  • Добавлена возможность управляемого добавления компонентов перевода при использовании автоматического обнаружения файлов перевода.

  • Настраиваемые сообщения merge-коммитов для Git.

  • Добавлена визуальная индикация предупреждений в компонентах при навигации.

  • Улучшена производительность загрузки файлов перевода.

  • Новая надстройка для уплотнения коммитов перед их отправкой.

  • Улучшено отображение изменений перевода.

  • Стиль слияния по умолчанию изменен на «rebase». Также теперь его можно настроить.

  • Улучшена обработка нестандартных подтегов в кодах языка.

  • Улучшена производительность обновления полнотекстовых индексов.

  • Расширен API загрузки файлов. Теперь он поддерживает больше параметров.

Weblate 3.3

Выпущен 30 ноября 2018 года.

  • Добавлена поддержка удаления компонентов и проектов.

  • Улучшена производительность для некоторых одноязычных переводов.

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

  • Показывать имя ресурса строки XLIFF в качестве контекста (если оно доступно) .

  • Добавлена поддержка состояний XLIFF.

  • Добавлена поддержка файлов защищенных от записи в DATA_DIR.

  • Улучшен экспорт изменений в CSV.

Weblate 3.2.2

Выпущен 20 октября 2018 года.

  • Удаление зависимости от Babel, т.к. она более не нужна.

  • Обновлены определения языков.

  • Улучшена документация по надстройкам, LDAP и Celery.

  • Исправлено включение флагов «конец строк в формате DOS» и «автоматический формат сообщений java».

  • Исправлен запуск тестов setup.py из пакета PyPi.

  • Улучшена обработка строк со множественным числом.

  • Исправлены проблемы с API загрузки переводов в некоторых крайних случаях.

  • Исправлено обновление настроек Git, если они не были изменеы вручную.

Weblate 3.2.1

Выпущен 10 октября 2018 года.

  • Задокументирована зависимость от backports.csv при работе на Python 2.7.

  • Исправлен запуск тестов от root.

  • Улучшена обработка ошибок в модуле gitexport.

  • Исправлено отображение прогресса для вновь добавленных языков.

  • Корректно сообщать об ошибках в рабочих процессах Celery в Sentry.

  • Исправлено создание новых переводов с помощью Qt Linguist.

  • Исправлены периодические ошибки обновления полнотекстовых индексов.

  • Улучшена валидация при создании новых компонентов.

  • Добавлена поддержка подчистки старых предложений.

Weblate 3.2

Выпущен 6 октября 2018 года.

  • Добавлена команда управления install_addon для автоматизации установки надстроек.

  • Сделана доступной более тонкая настройка ограничения частоты запросов.

  • Добавлена поддержка экспорта и импорта файлов Excel.

  • Улучшена очистка компонентов, если надстройка обнаруживает множество компонентов.

  • Переписан бэкэнд машинного перевода для Microsoft Terminology.

  • Weblate теперь использует Celery и разгружает на него часть обработки.

  • Улучшены возможности поиска и добавлен поиск по регулярным выражениям.

  • Добавлена поддержка машинного перевода с помощью Youdao Zhiyun API.

  • Добавлена поддержка машинного перевода с помощью Baidu API.

  • Интегрированы задачи по поддержке работоспособности и очистки с помощью Celery.

  • Улучшена производительность загрузки переводов почти на 25%.

  • Удалена поддержка слияния заголовков при загрузках.

  • Удалена поддержка настраиваемых сообщений коммитов.

  • Настраиваемые режимы редактирования (дзен/полный).

  • Добавлена поддержка сообщений об ошидках с помощью Sentry.

  • Добавлена поддержка автоматических ежедневных обновлений репозиториев.

  • Добавлена возможность создания проектов и компонентов пользователями.

  • Встроенная память переводов теперь автоматически сохраняет сделанные переводы.

  • Пользователи и проекты могут импортировать свои уже существующие памяти переводов.

  • Улучшено управление связанными строками скриншотов.

  • Добавлена поддержка проверки Java MessageFormat.

Просмотрите подробный список исправленных проблем в описании целей версии 3.2 на GitHub.

Weblate 3.1.1

Выпущен 27 июля 2018 года.

  • Исправлены ошибки в тестах, выдаваемых на некоторых установках.

Weblate 3.1

Выпущен 27 июля 2018 года.

  • Обновления с версий более старых, чем 3.0.1, не поддерживаются.

  • Разрешено переопределение сообщений коммитов через настройки.

  • Улучшена совместимость web-обработчиков с Weblate, устанавливаемом на собственном хостинге.

  • Добавлена поддержка Amazon Translate.

  • Совместимость с Django 2.1.

  • Проверки системы Django теперь используются для диагностики проблем с установкой.

  • Удалена поддержка сервиса libravatar, который скоро прекращает работу.

  • Новая надстройка, позволяющая помечать не изменённые переводы «на правку».

  • Добавлена поддержка перепрыгивания в указанное место при переводе.

  • Скачанные переводы теперь могут быть настроены.

  • Улучшен алгоритм вычисления похожести строк при сопоставлении с памятью переводов.

  • Добавлена поддержка подписи git-коммитов с помощью GnuPG.

Weblate 3.0.1

Выпущен 10 июня 2018 года.

  • Исправлены возможные проблемы перехода с версии 2.20.

  • Обновления локализации.

  • Удалены устаревшие примеры обработчиков (hooks).

  • Улучшено кеширование документации.

  • Исправлено отображение документации для администраторов.

  • Исправлена обработка длинных названий языков.

Weblate 3.0

Выпущен 1 июня 2018 года.

  • Переписан контроль доступа.

  • Подчистка кода в некоторых местах, что привело к перемещению и переименованию модулей.

  • Новая надстройка для автоматического обнаружения компонентов.

  • Команда управления import_project теперь принимает несколько иные параметры.

  • Добавлена базовая поддержка файлов ресурсов Windows.

  • Новая надстройка, которая позволяет сохранять имена участников в заголовках PO-файлов.

  • Удалены покомпонентные скрипты-обработчики, используйте вместо этого надстройки.

  • Добавлена поддержка сбора соглашений участников с правилами/лицензиями.

  • Изменения прав доступа теперь отслеживаются в истории.

  • Новая надстройка, которая гарантирует, что у всех компонентов и проекте будут одинаковые переводы.

  • Поддержка большего количества переменных в шаблонах сообщений коммитов.

  • Добавлена поддержка добавления дополнительного текстового содержимого.

Серия Weblate 2.x

Weblate 2.20

Выпущен 4 апреля 2018 года.

  • Улучшена скорость клонирования репозиториев subversion.

  • Изменена блокировка репозиториев — теперь используются сторонние библиотеки.

  • Добавлена поддержка скачивания только строк, для которых требуются действия.

  • Добавлена поддержка поиска по нескольким языковым кодам одновременно.

  • Новая надстройка, позволяющая настроить правила переноса строк в выходных gettext-файлах.

  • Новая надстройка для настройки форматирования JSON.

  • Добавлена поддержка аутентификации «на предъявителя» для API, совместимая с RFC 6750.

  • Добавлена поддержка автоматического перевода с помощью различных сервисов машинного перевода.

  • Добавлена поддержка HTML-разметки в сообщениях на совместной доске.

  • Добавлена поддержка массового изменения состояния строк.

  • Теперь необходим Translate-toolkit 2.3.0 или новее; старые версии более не поддерживаются.

  • Добавлена встроенная память переводов.

  • Добавлен обзор списка компонентов и страницы списков покомпонентного обзора.

  • Добавлена поддержка машинного перевода с помощью DeepL.

  • Результаты машинного перевода теперь кешируются внутри Weblate.

  • Добавлена поддержка переупорядочивания зафиксированных изменений.

Weblate 2.19.1

Выпущен 20 февраля 2018 года.

  • Исправлены проблемы с миграцией при обновлении с 2.18.

  • Улучшена валидация API загрузки файлов.

Weblate 2.19

Выпущен 15 февраля 2018 года.

  • Исправлен импорт некоторых форматов файлов.

  • Отображать информацию о браузере в журнале аудита в формате удобным для человека.

  • Добавлен файловый экспорт в TMX.

  • Различные улучшения производительности загрузки файлов перевода.

  • Добавлена возможность отключить управление доступом в самос Weblate в пользу управления доступом в Django.

  • Улучшена производительность глоссария на больших строках.

  • Совместимость с django_auth_ldap 1.3.0.

  • Ошибки в конфигурации теперь сохраняются и сообщения о них поступают постоянно.

  • Флаги игнорирования теперь уважаются при автоматических исправлениях пробелов.

  • Улучшена совместимость с некоторыми установками Subversion.

  • Улучшен встроенный сервис машинного перевода.

  • Добавлена поддержка SAP Translation Hub.

  • Добавлена поддержка терминологической службы Майкрософт.

  • Удалена поддержка рекламы в уведомлениях по e-mail.

  • Улучшено составление отчетов о прогрессе переводов на уровне языков.

  • Улучшена поддержка различных форм множественного числа.

  • Добавлена поддержка репозиториев Subversion, которые не используют stdlayout.

  • Добавлены надстройки для изменения рабочего процесса переводчиков.

Weblate 2.18

Выпущен 15 декабря 2017 года.

  • Улучшен сбор и отображение статистики участников.

  • Улучшена настройка виртуальной клавиатуры со специальными символами.

  • Добавлена поддержка формата файлов DTD.

  • Изменены горячие клавиши так, чтобы они с меньшей вероятностью конфликтовали с горячими клавишами браузера/ОС.

  • Улучшена поддержка флага «Одобрено» в файлах XLIFF.

  • Добавлена возможность не переносить длинные строки в PO-файлах gettext.

  • Добавлена кнопка для копирования постоянной ссылки на текущую переводимую строку.

  • Прекращена поддержка Django 1.10 и добавлена поддержка Django 2.0.

  • Удалена блокировка переводимых строк во время перевода.

  • Добавлена поддержка добавления новых строк к одноязычным переводам.

  • Добавлена поддержка рабочего процесса перевода с выделенными рецензентами.

Weblate 2.17.1

Выпущен 13 октября 2017 года.

  • Исправлен запуск тестов в некоторых специфических ситуациях.

  • Обновления локалей.

Weblate 2.17

Выпущен 13 октября 2017 года.

  • Теперь Weblate по умолчанию делает поверхностные (shallow) Git-клоны.

  • Улучшена производительность при обновлении больших файлов перевода.

  • Добавлена поддержки блокировки регистрации с определённых адресов e-mail.

  • Пользователи теперь могут удалять свои собственные комментарии.

  • Добавлена возможность предварительтельного просмотра при использовании «найти и заменить».

  • Настройки форм поиска и загрузки теперь постоянны для каждого клиента.

  • Расширены возможности поиска.

  • Более тонкая попроектная настройка ACL.

  • Изменено значение по умолчанию для BASE_DIR.

  • Добавлен второй, дополнительный, шаг при удалении аккаунта, дабы предупредить случайные удаления.

  • Теперь можно редактировать настройки доступа к проекту.

  • Добавлена опционально защита от спама в предложениях с помощью Akismet.

Weblate 2.16

Выпущен 11 августа 2017 года.

  • Различные улучшения производительности.

  • Добавлена поддержка вложенного формата JSON.

  • Добавлена поддержка формата WebExtension JSON.

  • Исправлена аутентификация при экспорте в git.

  • Улучшен импорт CSV в некоторых случаях.

  • Улучшен внешний вид виджета «Другие переводы».

  • Проверки максимальной длины текста теперь принуждают соблюдать её прямо в форме.

  • Время ожидания коммита теперь можно настроить покомпонентно.

  • Различные подчистки пользовательского интерфейса.

  • Исправлен поиск по компоненту/проекту/сайту.

Weblate 2.15

Выпущен 30 июня 2017 года.

  • Теперь показывается большее количество связанных переводов в «других переводах».

  • Добавлена возможность просматривать переводы текущей строки на другие языки.

  • Теперь для литовского языка по умолчанию используются 4 формы множественного числа.

  • Исправлена загрузка различных форматов одноязычных файлов перевода.

  • Улучшены сообщения об ошибках при неудачной аутентификации.

  • При удалении слов из глоссария состояние страницы теперь сохраняется.

  • Добавлена прямая ссылка на редактирования вторичных языков перевода.

  • Добавлены проверки качества для форматирования строк Perl.

  • Добавлена поддержка отклонения повторно используемых паролей.

  • Расширена панель инструментов для редактирования RTL-языков (с письмом справа налево).

Weblate 2.14.1

Выпущен 24 мая 2017 года.

  • Исправлена возможная ошибка при пагинации результатов поиска.

  • Исправлена миграция со старых версий в некоторых крайних случаях.

  • Исправлена возможная межсайтовая подделка запроса (CSRF) при отметке проектов для отслеживания или снятия этой метки.

  • Смена пароля более не аутентификация пользователя.

  • Исправлена возможный обход CAPTCHA при забытом пароле.

Weblate 2.14

Выпущен 17 мая 2017 года.

  • Добавление записей в глоссарий через AJAX-запросы.

  • Разлогинивание теперь делается через POST-запрос, дабы избежать межсайтовой подделки запросов (CSRF).

  • Сброс API-токена теперь делается через POST-запрос, дабы избежать межсайтовой подделки запросов (CSRF).

  • Weblate теперь устанавливает политику безопасности контента (Content-Security-Policy) по умолчанию.

  • URL локального редактора теперь проверяется, дабы предотвратить self-XSS атаку.

  • Пароль теперь по умолчанию проверяется по списку обычных уязвимостей.

  • Уведомления пользователей о важных действиях с их аккаунтами, как смена пароля.

  • Экспорт в CSV теперь экранирует потенциальные формулы.

  • Различные незначительные улучшения безопасности.

  • Попытки аутентификации теперь ограничены по частоте.

  • Содержимое предложений теперь сохраняется в истории.

  • Сохранение важных действий с аккаунтов в журнале аудита.

  • Запрос подтверждения пароля при удалении аккаунта или добавлении новых ассоциаций.

  • Теперь показывается время, когда было сделано какое-либо предложение.

  • Добавлена новая проверка качества для завершающей точки с запятой.

  • Теперь гарантируется, что ссылками на поиск можно делиться.

  • В API добавлена информация об исходных строках и снимках экрана.

  • Теперь разрешена перезапись переводов при загрузке через API.

Weblate 2.13.1

Выпущен 12 апреля 2017 года.

  • Исправлено формирование списка управляемых проектов в профиле.

  • Исправлены проблемы с миграцией, из-за которых пропадали некоторые разрешения.

  • Исправлено формирование списка текущих форматов файлов на странице скачивания переводов.

  • Теперь возвращается ошибка HTTP 404, когда пользователь пытается получить доступ к проекту, на который у него нет достаточных привилегий.

Weblate 2.13

Выпущен 12 апреля 2017 года.

  • Исправлены проверки качества в шаблонах перевода.

  • Добавлены проверки качества, которые запускаются при потере переводов.

  • Добавлена возможность просматривать текущие предложения конкретного пользователя.

  • Добавлена возможность автоматически создавать списки компонентов.

  • Теперь можно настроить панель управления по умолчанию для неаутентифицировавшихся пользователей.

  • Добавлена возможность просмотреть 25 случайных строк требующих рецензирования.

  • История теперь отражает изменения строк.

  • Улучшено отображение ошибок при добавлении новых переводов.

  • Добавлен поиск по конкретному языку внутри одного проекта.

  • Групповые списки контроля доступа (Group ACL) теперь можгут быть ограничены рамками конкретного проекта.

  • Попроектные списки контроля доступа (ACL) теперь реализованы через групповые списки контроля доступа (Group ACL) .

  • Добавлена возможность более тонкого контроля привилегий.

  • Различные мелкие улучшения пользовательского интерфейса.

Weblate 2.12

Выпущен 3 марта 2017 года.

  • Улучшен интерфейс администратора для групп.

  • Добавлена поддержка API Яндекс Переводчика.

  • Улучшена скорость поиска по всему сайту.

  • Добавлен поиск по проекту и по компоненту.

  • Добавлена операция «поиск и замена» по проекту и по компоненту.

  • Улучшено отображение противоречивых переводов.

  • Добавлена поддержка открытия файлов с исходным кодом в локальном редакторе.

  • Добавлена поддержка добавления специальных символов на виртуальную клавиатуру.

  • Улучшено управление снимками экрана: добавлена поддержка распознавания текста для сопоставления их с исходными строками.

  • В сообщения коммитов по умолчанию теперь включается ссылка и информация о переводе.

  • Добавлена поддержка форматов переводов Joomla.

  • Улучшена надёжность при импорте разных форматов.

Weblate 2.11

Выпущен 31 января 2017 года.

  • Теперь на странице языка располагается детальная информация о языке.

  • Улучшена реализация поддержки Mercurial.

  • Добавлена возможность задавать приоритет перевода компонентов.

  • Более единообразное использование групповых списков контроля доступа (Group ACL) даже с более редкоиспользуемыми разрешениями.

  • Добавлена переменная WL_BRANCH для скриптов-обработчиков.

  • Улучшена документация для разработчиков.

  • Улучшена совместимость с разными версиями Git в надстройке для экспорта в Git.

  • Добавлена попроектная и покомпонентная статистика.

  • Добавлены отображения кодов языков для улучшения поддержки API перевода Microsoft.

  • Работа по полнотекстовому удалению перемещена в фоновую задачи ради ускорения удаления переводов.

  • Исправлено отображение исходных строк с формами множественного числа для языков с единственной формой.

  • Улучшена обработка ошибок при импорте проекта.

  • Различные улучшения производительности.

Weblate 2.10.1

Выпущен 20 января 2017 года.

  • Исправлена утечка информации о существовании аккаунта в форме сброса пароля (CVE-2017-5537).

Weblate 2.10

Выпущен 15 декабря 2016 года.

  • Добавлена проверка качества, которая проверяет, что формы множественного числа переведены по-разному.

  • Исправлены обработчики для GitHub для репозиториев, требующих аутентификацией.

  • Добавлен опциональный модуль для экспорта в Git.

  • Поддержка API переводчика Microsoft Cognitive Services.

  • Упрощён пользовательский интерфейс проектов и компонентов.

  • Добавлен автоматический корректор для удаления управляющих символов.

  • В проекты добавлен обзор каждого отдельного языка.

  • Добавлена поддержка экспорта в CSV.

  • Добавлено скачивание статичтики в формате CSV.

  • Добавлен «просмотр в виде матрицы», для быстрого обзора всех переводов.

  • Добавлен базовый API для изменений и строк.

  • Добавлена поддержка машинного перевода через сервера Apertium APy.

Weblate 2.9

Выпущен 4 ноября 2016 года.

  • Расширены параметры для команды управления createadmin.

  • Расширена команда import_json так, чтобы она могла корректно обрабатывать существующие компоненты.

  • Добавлена поддержка YAML-файлов.

  • Владельцы проектов теперь могут настраивать компоненты перевода и изменять детали проекта.

  • Термин «Подписка» (на проекты) заменён на «Отслеживание» (проектов).

  • Проекты теперь можно отмечать для отслеживания прямо с их страницы.

  • Добавлен многоязычный виджет статуса.

  • Дополнительные языки теперь подсвечиваются, если не показывается исходная строка.

  • Удаление предложений теперь сохраняется в истории.

  • Улучшен интерфейс выбора языка в профиле.

  • Исправлен показ сообщений совместной доски для компонентов.

  • Теперь вкладка настроек остаётся открытой после их сохранения.

  • Теперь коментарии к исходным строкам отображаются более заметно.

  • Теперь вспомогательный модуль для слияния PO-файлов Gettext в git репозиториях устанавливается автоматически.

  • Добавлен инструмент «поиск и замена».

  • Добавлена поддержка загрузки визуального контента (снимков экрана) связанного с переводами.

Weblate 2.8

Выпущен 31 августа 2016 года.

  • Улучшения в документации.

  • Переводы.

  • Обновлены библиотеки JavaScript в комплекте.

  • Добавлена команда управления list_translators.

  • Django 1.8 более не поддерживается.

  • Исправлена совместимость с Django 1.10.

  • Добавлена поддержка Subversion.

  • Проверка корректности XML отделена от проверки на то что теги XML не совпадают.

  • API теперь принимает во внимание параметр HIDE_REPO_CREDENTIALS.

  • Теперь в Дзен-режиме показываются изменения в исходной строке.

  • Alt+PageUp/PageDown/Home/End теперь работают и в Дзен-режиме.

  • Добавлена всплывающая подсказка, отображающая точное время изменений.

  • Добавлена возможность выбирать фильтры и начинать поиск прямо со страницы перевода.

  • Добавлено удаление переводов через пользовательский интерфейс.

  • Улучшено поведение при вставке маркеров-заполнителей.

  • Исправлены проблемы с автоматической блокировкой в Дзен-режиме.

Weblate 2.7

Выпущен 10 июля 2016 года.

  • Удалена возможность машинного перевода с помощью Google web translate.

  • Улучшены сообщения коммитов при добавлении перевода.

  • Исправлен API Google Translate для иврита.

  • Совместимость с Mercurial 3.8.

  • Добавлена команда управления import_json.

  • Корректное упорядочивание новых переводов.

  • Теперь также показывается полный текст предложения.

  • Расширен API (добавлена информация по детальному статусу репозиториев, статистике, …).

  • Тесты более не требуют доступ к сети, чтобы проверить, корректность работы с репозиториями.

Weblate 2.6

Выпущен 28 апреля 2016 года.

  • Исправлена проверка компонентов с языковым фильтром.

  • Улучшена поддержка файлов XLIFF.

  • Исправлен машинный перевод для неанглоязычных исходных текстов.

  • Добавлен REST API.

  • Совместимость с Django 1.10.

  • К сообщениям совместной доски добавлены категории.

Weblate 2.5

Выпущен 10 марта 2016 года.

  • Исправлен автоматический перевод для владельцев проектов.

  • Улучшенная производительность выполнения коммитов и отправки в репозиторий.

  • Новая команда управления для добавления предложений из командной строки.

  • Добавлена поддержка объединения комментариев при загрузке файлов.

  • Добавлена поддержка некоторых расширений GNU к формату функции printf C.

  • Улучшения в документации.

  • Добавлена поддержка генерации списка переводчиков.

  • Добавлена поддержка генерации статистики участников.

  • Поиск по всему сайту теперь можно вести только по одному языку.

  • Улучшение проверок качества для армянского языка.

  • Добавлена поддержка создания компонентов перевода без существующих переводов.

  • Поддержка добавления новых переводов при работе с Qt TS.

  • Улучшена поддержка перевода PHP-файлов.

  • Улучшена производительность для проверок качества.

  • Исправлен поиск неудачных проверок по всему сайту.

  • Добавлена возможность задать исходный язык.

  • Улучшена поддержка файлов XLIFF.

  • Расширен список параметров команды import_project.

  • Улучшено таргетирование сообщений на совместной доске.

  • Поддержка автоматического перевода строк уже переведённых в другом проекте.

  • Оптимизирован полнотекстовый поисковый индекс.

  • Добавлена команда управления для автоматического перевода.

  • Добавлена подсветка маркеров-заполнителей.

  • Добавлены горячие клавиши для заполнителей, проверок и машинных переводов.

  • Улучшена блокировка переводов.

  • Добавлена проверка качества интерполяций AngularJS.

  • Добавлена многообещающая система списков контроля доступа, основанная на группах.

  • Прояснение терминологии для строк «на правку» (ранее известных как «неточные»).

  • Clarified terminology on strings needing action and untranslated strings.

  • Поддержка Python 3.

  • Удалена поддержка Django 1.7.

  • Удалена зависимость от msginit при создании новых PO-файлов gettext.

  • Добавлена возможность настраивать вид панели управления.

  • Улучшены уведомления при ушибках разбора.

  • К команде import_project добавлен параметр, который позволяет импортировать компоненты с дублирующимися именами.

  • Улучшена поддержка перевода PHP-файлов.

  • Добавлен экспорт в XLIFF для словарей.

  • Добавлен экспорт в XLIFF и gettext PO для всех переводов.

  • Улучшения в документации.

  • Добавлена поддержка настраиваемых автоматических групповых назначений.

  • Улучшено добавление новых переводов.

Weblate 2.4

Выпущен 20 сентября 2015 года.

  • Улучшена поддержка PHP-файлов.

  • Возможность добавления списков контроля доступа (ACL) для анонимных пользователей.

  • Улучшена настраиваемость команды import_project.

  • Добавлена возможность делать дамп истории в CSV.

  • Добавлены меры, чтобы предупредить ошибочное копирование/вставку графических отображений пробельных символов.

  • Добавлена поддержка веб-обработчиков Bitbucket.

  • Более жёсткий контроль неточных строк при загрузке переводов.

  • Некоторые адреса URL поменялись, возможно, вам придётся обновить свои закладки.

  • Скрипты обработчики теперь выполняются из корневого каталога системы контроля версий.

  • Скрипты-обработчики теперь имеют доступ к переменным среды, указывающим на текущий компонент.

  • Добавлена команда управления для оптимизации полнотекстового индекса.

  • Добавлена поддержка отправки отчётов об ошибках в Rollbar.

  • У проектов теперь может быть несколько владельцев.

  • Владельцы проектов теперь сами могут управлять списком владельцев проектов.

  • Добавлена поддержка формата javascript-format, используемого в PO-файлах gettext.

  • Поддержка добавления новых переводов в XLIFF.

  • Улучшено автоопределения формата файлов.

  • Расширены возможности горячих клавиш.

  • Для некоторых языков улучшено сопоставление строк словарю.

  • Улучшена вёрстка большинства страниц.

  • Поддержка добавления слов в словарь во время перевода.

  • Добавлена поддержка фильтрации того, какие языки будут управляться Weblate.

  • Добавлена поддержка перевода и импорта CSV-файлов.

  • Переписана обработка статических файлов.

  • Прямые ссылки на логи/регистрацию в сторонних сервисах, если такой есть только один.

  • Ожидающие изменения теперь будут коммититься при удалении аккаунта.

  • Добавлена команда управления для изменения имени сайта.

  • Добавлен параметр, в котором можно настроить коммитера по умолчанию.

  • Добавлены обработчики, вызываемые после добавления нового перевода.

  • Добавлена возможность задать несколько файлов, которые будут добавлены к коммиту.

Weblate 2.3

Выпущен 22 мая 2015 года.

  • Прекращена поддержка Django 1.6 и миграция с помощью South.

  • Поддержка добавления новых переводов при использовании файлов свойств Java.

  • Добавлена возможность принимать предложения без редактирования.

  • Улучшена поддержка Google OAuth 2.0.

  • Добавлена поддержка файлов Microsoft .resx.

  • Подправлен файл robots.txt, предлагаемый по умолчанию, так чтобы он не разрешал значительное расползание переводов.

  • Упрощено принятие предложений.

  • Добавлены владельцы проектов — пользователи, которые будут получать важные уведомления.

  • Добавлена возможность отключить редактирование шаблонов одноязычных переводов.

  • Более детализированный вид статуса репозитория.

  • Прямые ссылки на редактирование шаблонов при изменении переводов.

  • Теперь разрешено назначать больше привилегий для владельцев проектов.

  • Теперь возможно показывать второй язык в Дзен-режиме.

  • Возможность прятать исходную строку в пользу вторичного языка.

Weblate 2.2

Выпущен 19 февраля 2015 года.

  • Улучшения производительности.

  • Полнотекстовый поиск по полям «расположение» и «комментарии».

  • Новый график активности на основе SVG/JavaScript.

  • Поддержка Django 1.8.

  • Поддержка удаления комментариев.

  • Добавлена собственная SVG-плашка.

  • Добавлена поддержка Google Analytics.

  • Улучшено управление именами файлов перевода.

  • Добавлена поддержка одноязычных JSON-переводов.

  • Блокировка компонентов теперь сохраняется в истории.

  • Поддержка редактирования исходного (шаблонного) языка одноязычных переводов.

  • Добавлена базовая поддержка Gerrit.

Weblate 2.1

Выпущен 5 декабря 2014 года.

  • Добавлена поддержка репозиториев Mercurial.

  • Шрифт Glyphicon заменён на Awesome.

  • Добавлены иконки для сервисов аутентификации через социальные сети.

  • Цвета кнопок и иконки теперь более последовательны и согласованы.

  • Улучшения в документации.

  • Исправления различных ошибок.

  • Автоматическое скрытие дополнительных столбцов в списке переводов на маленьких экранах.

  • Изменена конфигурация путей файлов.

  • Улучшено управление и хранение SSH-ключей.

  • Улучшена блокировка репозиториев.

  • Добавлены настраиваемые проверки качества для исходных строк.

  • Добавлена возможность прятать завершенные переводы с панели управления.

Weblate 2.0

Выпущен 6 ноября 2014 года.

  • Новый отзывчивый пользовательский интерфейс, созданный с помощью Bootstrap.

  • Переписан модуль работы с системами контроля версий.

  • Улучшения в документации.

  • Добавлена совместная доска для публикации сообщений для всего сайта.

  • Добавлена возможность задавать приоритеты строк.

  • Добавлена поддержка форматов файлов JSON.

  • Исправлены проблемы с генерацией mo-файлов в определённых случаях.

  • Добавлена поддержка уведомлений для GitLab.

  • Добавлена поддержка отключения предложений для переводов.

  • Поддержка Django 1.7.

  • У проектов с ACL теперь есть управление пользователями.

  • Расширены возможности поиска.

  • Предоставление большего количества подсказок переводчикам о множественном числе.

  • Исправлена блокировка Git-репозиториев.

  • Совместимость с более старыми версиями Git.

  • Улучшена поддержка списков контроля доступа (ACL).

  • Добавлены кнопки кавычек специфичные для конкретных языков и другие специальные символы.

  • Добавлена поддержка экспорта статистики в JSONP.

Серия Weblate 1.x

Weblate 1.9

Выпущен 6 мая 2014 года.

  • Совместимость с Django 1.6.

  • Совместимость с Django 1.4 более не поддерживается.

  • Команды управления для блокировки/разблокировки переводов.

  • Улучшена поддержка TS-файлов (Qt).

  • Пользователи теперь могут удалять свои аккаунты.

  • Аватары теперь могут быть отключены.

  • Атрибуты «первое имя» и «второе имя» объединены в один.

  • Аватары теперь загружаются и кешируются на стороне сервера.

  • Добавлена поддержка плашки shields.io.

Weblate 1.8

Выпущен 7 ноября 2013 года.

  • Проверьте инструкции по обновлению в руководстве.

  • Более приятный вид сводки проектов.

  • Улучшен внешний вид ссылок на социальные сети, по которым можно поделиться переводом.

  • Больше контроля над анонимными пользователями.

  • Поддержка входа через сторонние сервисы, просмотрите подробности в руководстве.

  • Теперь пользователи могут совершать вход и по адресу электронной почты вместо имени пользователя.

  • Улучшения в документации.

  • Улучшен процесс рецензирования исходных строк.

  • Поиск по всем строкам.

  • Улучшено отслеживание исходных строк.

  • Защита регистрации с помощью каптчи.

Weblate 1.7

Выпущен 7 октября 2013 года.

  • Проверьте инструкции по обновлению в руководстве.

  • Проверка форматирования строк для Python с фигурными скобками.

  • Покомпонентная настройка проверок качества.

  • Детальная статистика по каждому переводу.

  • Изменён способ связывания предложений, проверок и комментариев со строками.

  • Пользователи теперь могут добавлять свой текст к сообщениям коммитов.

  • Поддержка подписки на запросы на добавление новых языков.

  • Поддержка добавления новых переводов.

  • Виджеты и диаграммы теперь отрисовываются с помощью Pillow вместо Pango + Cairo.

  • Добавлен виджет плашки статуса.

  • Удалены неверные проверки направления письма в тексте.

  • Изменения в словаре теперь логируются в истории.

  • Улучшения производительности страницы перевода.

Weblate 1.6

Выпущен 25 июля 2013 года.

  • Улучшена обработка ошибок при регистрации.

  • Просмотр изменений.

  • Исправлена сортировка предложений машинного перевода.

  • Улучшена поддержка машинного перевода MyMemory.

  • Добавлена поддержка машинного перевода Amagama.

  • Различные оптимизации часто используемых страницах.

  • Выделение искомых фраз в результатах поиска.

  • Поддержка автоматических исправлений при сохранении сообщения.

  • Отслеживание истории переводов и возможность откатиться к более старой версии.

  • Добавлена поддержка Google Translate API.

  • Добавлена поддержка управления SSH-ключами серверов.

  • Разнообразные улучшения валидации форм.

  • Разнообразные улучшения проверок качества.

  • Улучшена производительность при импорте.

  • Добавлена поддержка голосований за предложения.

  • Подчищен интерфейс администратора.

Weblate 1.5

Выпущен 16 апреля 2013 года.

  • Проверьте инструкции по обновлению в руководстве.

  • Добавлены общедоступные страницы пользователей.

  • Улучшено описания в формах редактирования строк со множественным числом.

  • Добавлена поддержка экспорта глоссария в TBX.

  • Добавлена поддержка уведомлений Bitbucket.

  • Графики активности теперь доступны для каждого отдельного перевода, языка и пользователя.

  • Расширены параметры команды администратора import_project.

  • Совместимость с Django 1.5.

  • Аватары теперь показываются с помощью libravatar.

  • Добавлена возможность экспорта в JSON в формате удобном для человека.

  • Различные улучшения производительности.

  • Отображение количества неудачных проверок и неточных строк в индикаторах готовности перевода также и для проектов и языков.

  • Добавлена поддержка добавления своих предкоммитных обработчиков и коммита дополнительных файлов.

  • Переписан поиск ради лучшей производительности и удобства пользователя.

  • Новый интерфейс машинного перевода.

  • Добавлена поддержка перевода одноязычных PO-файлов.

  • Расширено количество кешируемых метаданных ради увеличения скорости разнообразного поиска.

  • Теперь отображается также и количество слов.

Weblate 1.4

Выпущен 23 января 2013 года.

  • Исправлено удаление комментариев/строк при удалении соответствующих строк.

  • Добавлен параметр для отключения автоматического распространения переводов.

  • Добавлена возможность подписываться на уведомления о неудачном слиянии (в системах контроля версий).

  • Теперь проекты, которым нужен особый ttkit-загрузчик, импортируются корректно.

  • Добавлена карта сайта, чтобы облегчить поисковым ботам доступ ко всем страницам.

  • Добавлены прямые ссылки на строки в уведомления по электронной почте и ленты.

  • Различные улучшения в интерфейсе администратора.

  • В интерфейс администратора добавлены подсказки по настройке Weblate для рабочей среды.

  • Добавлены виджеты и страница взаимодействия для отдельных языков.

  • Улучшена обработка блокировки переводов.

  • Теперь отображается больше отрывков кода для вставки виджетов на сторонние сайты.

  • Отображение количества неудачных проверок и неточных строк в индикаторах готовности перевода.

  • Больше опций для форматирования сообщений коммитов.

  • Исправлена обработка ошибок сервисов машинного перевода.

  • Улучшено поведение блокировки при автоматическом переводе.

  • Поддержка показа изменений относительно предыдущей исходной строки.

  • Добавлена поддержка поиска подстрок.

  • Разнообразные улучшения проверок качества.

  • Добавлена поддержка попроектных списков контроля доступа (ACL).

  • Базовое покрытие кодовой базы юнит-тестами.

Weblate 1.3

Выпущен 16 ноября 2012 года.

  • Возможность работы поверх PostgreSQL.

  • Удаление языков, удаленных в вышестоящем git-репозитории.

  • Улучшена обработка проверок качества.

  • Добавлены новые проверки (для BB-кода, разметки XML и переводов строк).

  • Поддержка возможности смены базы (rebase) вместо слияния (merge).

  • Возможность переместить Weblate (запускать его установленным по другому пути, например, /weblate).

  • Возможность выбрать тип файла вручную, если автоопределение с этим не справилось.

  • Улучшена поддержка ресурсов Android.

  • Поддержка генерации SSH-ключей из веб-интерфейса.

  • Экспорт данных сделан более заметным.

  • Новые кнопки для ввода некоторых специальных символов.

  • Поддержка экспорта словарей.

  • Поддержка блокирования всей установки Weblate.

  • Проверки для исходных строк и поддержка их рецензирования.

  • Поддержка комментариев пользователей и для переводов и для исходных строк.

  • Улучшено отслеживание журнала изменений.

  • За изменениями теперь можно следить с помощью RSS.

  • Улучшена поддержка языков с письмом с право налево.

Weblate 1.2

Выпущен 14 августа 2012 года.

  • Weblate теперь использует South для миграции базы данных, посмотрите инструкции, если вы обновляетесь.

  • Исправлены мелкие проблемы со связанными git-репозиториями.

  • Новая страница введения для вовлечения людей в процесс перевода с помощью Weblate.

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

  • Добавлена возможность отката (reset) репозитория к его состоянию в удалённом источнике (origin).

  • Проекты или компоненты теперь могут быть заблокированы от перевода.

  • Возможность отключить некоторые переводы.

  • Теперь параметры добавления новых переводов можно настроить.

  • Настройка git-коммитов для каждого отдельного проекта.

  • Простая защита от спама.

  • Улучшена вёрстка главной страницы.

  • Поддержка автоматической отправки изменений при каждом коммите.

  • Поддержка уведомлений по e-mail для переводчиков.

  • Теперь в настройках перечисляются только используемые языки.

  • Улучшена обработка неизвестных языков при импорте проекта.

  • Поддержка блокировки перевода переводчиком.

  • Возможность поддержки в актуальном состоянии заголовка Language-Team в PO-файле.

  • Добавление некоторой статистики на страницу «О Weblate».

  • Поддержка (и требование) django-registration 0.8.

  • Кеширование количества строк с неудачными проверками.

  • Проверка зависимостей во время установки.

  • Улучшения в документации.

Weblate 1.1

Выпущен 4 июля 2012 года.

  • Улучшение нескольких переводов.

  • Улучшены проверки при создании компонентов.

  • Добавлена поддержка совместного использования git-репозитория несколькими компонентами.

  • Теперь более необязательно делается коммит при каждой попытке извлечения (pull) из удалённого репозитория.

  • Добавлена поддержка выделения индекса в отдельный процесс.

Weblate 1.0

Выпущен 10 мая 2012 года.

  • Улучшены проверки при добавлении/сохранении компонентов.

  • Экспериментальная поддержка файлов компонентов Android (требуется патченный ttkit).

  • Обновления вызванные обработчиками теперь запускаются в фоне.

  • Улучшены инструкции установки.

  • Улучшена навигация по словарю.

Серия Weblate 0.x

Weblate 0.9

Выпущен 18 апреля 2012 года.

  • Исправлен импорт неизвестных языков.

  • Улучшен список соседних сообщений.

  • Улучшено несколько проверок.

  • Обновление документации.

  • Добавлены определения для ещё нескольких языков.

  • Всякая разная чистка кода.

  • Улучшения в документации.

  • Изменение макета файла.

  • Обновление вспомогательных скриптов до версии Django 1.4.

  • Улучшение навигации во время перевода.

  • Улучшение обработки переименования po-файлов.

  • Улучшены проверки при создании компонентов.

  • Полная интеграция установки в команду syncdb.

  • На всех страницах перевода добавлен список последних изменений.

  • Check for untranslated strings ignores format string only messages.

Weblate 0.8

Выпущен 3 апреля 2012 года.

  • Собственный полнотекстовый поиск заменён на Whoosh.

  • Различные исправления и улучшения проверок.

  • Новая команда updatechecks.

  • Множество обновлений переводов.

  • Добавлен словарь для хранения наиболее часто используемых терминов.

  • Добавлена конечная точка /admin/report/ для обзора состояния репозиториев.

  • Сервисы машинного перевода больше не блокируют загрузку страницы.

  • Интерфейс управления теперь также содержит полезные действия для обновления данных.

  • Запись в журнал сделанных пользователями изменений.

  • Возможность откладывания коммита в Git, чтобы генерировать поменьше коммитов от одного пользователя.

  • Возможность просмотра неудачных проверок.

  • Автоматический перевод с использованием уже переведённых строк.

  • Новая страница «О Weblate» теперь показывает использованные версии программного обеспечения.

  • Совместимость с Django 1.4.

  • Возможность отправки изменений в удалённый репозиторий из веб-интерфейса.

  • Добавлено рецензирование переводов, выполненных другими участниками.

Weblate 0.7

Выпущен 16 февраля 2012 года.

  • Прямая поддержка GitHub’овских уведомлений.

  • Добавлена поддержка очистки осиротевших проверок и переводов.

  • Отображение соседних строк во время перевода.

  • Отображение похожих строк во время перевода.

  • Улучшен поиск строк.

Weblate 0.6

Выпущен 14 февраля 2012 года.

  • Добавлены различные проверки для переведённых сообщений.

  • Настраиваемый контроль доступа.

  • Улучшена обработка переводов с новыми строками.

  • Добавлена сортировка таблиц на стороне клиента.

  • Если вы обновляетесь, пожалуйста, ознакомьтесь с инструкциями по обновлению.

Weblate 0.5

Выпущен 12 февраля 2012 года.

  • Поддержка машинного перевода с использованием следующих онлайн-сервисов:
    • Apertium

    • Microsoft Translator

    • MyMemory

  • Несколько новых переводов.

  • Улучшено слияние изменений из вышестоящего репозитория.

  • Улучшенная обработка одновременных git pull и перевода.

  • Распространение теперь работает и для неточных изменений.

  • Распространение теперь работает и для загрузок файлов.

  • Исправлено скачивание файлов при использовании FastCGI (и, возможно, других протоколов).

Weblate 0.4

Выпущен 8 февраля 2012 года.

  • В документацию добавлено руководство по использованию.

  • Исправлены обработчики API, которые не требовали CSRF-защиты.

Weblate 0.3

Выпущен 8 февраля 2012 года.

  • Улучшенное отображение исходной строки для переводов форм множественного числа.

  • Новая документация в формате Sphinx.

  • Отображение при переводе дополнительных языков.

  • Улучшенная страница ошибок со списком существующих проектов.

  • Новая статистика по языкам.

Weblate 0.2

Выпущен 7 февраля 2012 года.

  • Улучшена проверка некоторых форм.

  • Предупреждение пользователей при обновлении профиля.

  • Запоминание URL-адреса для входа в систему.

  • Именование областей текста при вводе форм множественного числа.

  • Автоматическое расширение области перевода.

Weblate 0.1

Выпущен 6 февраля 2012 года.

  • Первый выпуск.

Указатели и таблицы