
Weblate — это основанная на веб-технологиях свободная система непрерывной локализации, выпускаемая на условиях авторского лева, используемая более чем 2500 свободными проектами и компаниями в более чем 165 странах.
Установите его или воспользуйтесь сервисом Hosted Weblate, расположенном по адресу weblate.org.
Поддержать¶
Weblate — это свободное программное обеспечение с необязательной дополнительной профессиональной поддержкой и предложением облачного хостинга. Дополнительную информацию можно получить на сайте https://weblate.org/hosting/.
Документация¶
Её можно найти в подкаталоге docs
каталога с исходным кодом, или посмотреть на сайте https://docs.weblate.org/
Ошибки¶
Пожалуйста, отправляйте запросы о добавлении новых возможностей и сообщения о проблемах сюда:
Лицензия¶
Авторское право © 2012–2020 Михал Чигарж (Michal Čihař) michal@cihar.com
Это свободная программа: вы можете перераспространять ее и/или изменять ее на условиях Стандартной общественной лицензии GNU в том виде, в каком она была опубликована Фондом свободного программного обеспечения; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
Эта программа распространяется в надежде, что она будет полезной, но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННЫХ ЦЕЛЕЙ. Подробнее можно просмотреть в Стандартной общественной лицензии GNU.
Вы должны были получить копию Стандартной общественной лицензии GNU вместе с этой программой. Если это не так, смотрите https://www.gnu.org/licenses/.
Основы Weblate¶
Структура проектов и компонентов¶
Переводы в Weblate организованы по проектам и компонентам. Каждый проект может содержать несколько компонентов, а те — переводы на отдельные языки. Компоненту соответствует один переводимый файл (например, GNU gettext или Строковые ресурсы Android). Проекты служат для организации компонентов в логические наборы (например, для группировки всех переводов, используемых в одном приложении).
Внутри каждого проекта переводы общих строк по умолчанию распространяются на другие его компоненты. Это облегчает бремя повторного и много-версионного перевода. Если в вашем проекте перевод в разных компонентов должен отличаться, то такое «распространение» можно отключить в настройках компонента с помощью параметра «Разрешить распространение перевода».
См.также
Регистрация и профиль пользователя¶
Регистрация¶
По умолчанию любой может просматривать проекты, смотреть или предлагать переводы. Право сохранять изменения имеют только зарегистрированные пользователи и они упоминаются как авторы каждого сделанного ими перевода.
Вы можете зарегистрироваться, выполнив несколько простых шагов:
Заполните свои учётные данные в форму регистрации.
Активируйте регистрацию, пройдя по ссылке из письма, которое придёт вам на электронную почту.
По желанию настройте свой профиль, выбрав, какие языки вы знаете.
Панель управления¶
При входе в систему вы увидите сводку с проектами и их компонентами, а также информацию о прогрессе перевода по каждому из них.
Добавлено в версии 2.5.
По умолчанию показываются компоненты отслеживаемых вами проектов со ссылками на предпочитаемые вами языки.
Подсказка
Вы можете переключаться на различные представления с помощью вкладок навигации.

Меню содержит следующие параметры:
Пункт Проекты > Просмотр всех проектов в главном меню позволит перейти на страницу, где можно посмотреть статус перевода всех проектов, которые есть на данном экземпляре Weblate.
Выбор какого-либо из ваших основных языков в главном меню Языки выдаст страницу, где отображается статус перевода всех проектов, на этот конкретный язык.
На вкладке Отслеживаемые переводы панели управления показывается статус перевода тех проектов, которые вы отслеживаете, и только на те языки, которые вы выбрали своими основными.
Кроме того, в выпадающем списке может отображаться любое количество списков компонентов — наборов компонентов различных проектов, которые заранее настроил администратор Weblate; смотрите подробности в разделе Списки компонентов.
Вы можете изменить внешний вид панели управления под себя на вкладке Настройки в параметрах своего профиля.
Примечание
Если Weblate настроен для перевода одного проекта (установлен параметр SINGLE_PROJECT
в файле settings.py
, смотрите раздел Конфигурация), то вместо того, чтобы отображать панель управления, Weblate будет сразу перенаправлять пользователь на страницу этого проекта (или его компонента).
Профиль пользователя¶
Чтобы перейти к настройкам своего профиля, щелкните по иконке пользователя в верхней правой части экрана (в верхнем меню) и выберите пункт Параметры.
В профиле пользователя содержатся ваши предпочтения. Имя и адрес электронной почты будут использоваться в коммитах системы контроля версий, поэтому укажите в них верную информацию.
Примечание
Во всех пунктах настроек, связанных с языками, можно выбрать только те языки, которые в данный момент уже используются в переводах.
Подсказка
Чтобы сделать доступными и другие языки, на которые вы хотите переводить, запросите их добавление или добавьте их, нажав на соответствующую кнопку.
Языки¶
Язык интерфейса¶
Выберите язык, на который вы желаете переводить.
Языки перевода¶
Выберите, на какие языки вы предпочитаете переводить, и они будут показаны на главной странице отслеживаемых проектов, так что доступ ко всем переводам на каждый из этих языков для вас упростится.

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

Настройки¶
Вид панели управления по умолчанию¶
На вкладке Настройки можно выбрать, какой из доступных видов панели управления будет показан по умолчанию. При выборе пункта Список компонентов необходимо будет выбрать из раскрывающегося списка Список компонентов по умолчанию, какой именно список компонентов будет отображаться.
См.также
Ссылка на редактор¶
Ссылка на исходный код показывается в web-браузере, настроенном по умолчанию в разделе Настройки компонента.
Подсказка
Установив Ссылку на редактор, вы будете использовать свой локальный редактор для открытия исходного кода файла из системы контроля версий с переведёнными строками. Вы можете использовать шаблонную разметку.
Обычно хорошим выбором является что-то вроде editor://open/?file={{filename}}&line={{line}}
.
См.также
Более подробную информацию о регистрации пользовательских URL-протоколов для редактора вы можете найти в документации к Nette (на английском языке).
Уведомления¶
На вкладке Уведомления можно подписаться на различные уведомления. Уведомления по выбранным событиям для отслеживаемых или управляемых проектов будут высылаться вам по электронной почте.
Некоторые уведомления отправляются только для событий, связанных с вашим языком (например, уведомление о новых строках для перевода), в то время как другие срабатывают на уровне компонента (например, уведомление об ошибках слияния). Эти две группы уведомлений в настройках визуально разделены.
Вы можете включать или отключать уведомления для отслеживаемых и управляемых проектов, а в дальнейшем их можно настроить (или полностью отключить) для каждого отдельного проекта или компонента. Посетите страницу компонента и выберите соответствующий пункт в меню Отслеживание.
Если параметр Автоматически добавлять проект в отслеживаемые при правке включён, то при редактировании какого-либо проекта он будет автоматически добавлен в ваш список отслеживаемых. Значение по умолчанию зависит от параметра DEFAULT_AUTO_WATCH
.
Примечание
Вы не будете получать уведомления о собственных действиях.

Учётная запись¶
Вкладка Учётная запись позволяет вам настроить основные данные учётной записи, подключить различные сервисы, которые вы можете использовать для входа в Weblate, полностью удалить свою учётную запись или скачать свои данные пользователя (смотрите раздел Файл экспорта данных пользователя Weblate’а).
Примечание
Список сервисов зависит от ваших настроек Weblate и может включать такие популярные сайты, как GitLab, GitHub, Google, Facebook или Bitbucket, а также других провайдеров OAuth 2.0.

Профиль¶
Все поля на этой странице являются необязательными и в любое время могут быть удалены, и заполнив их, вы даёте нам согласие на показ этих данных везде, где появляется ваш профиль пользователя.
Аватар может показываться для каждого пользователя (это зависит от параметра ENABLE_AVATARS
). Эти изображения получаются от сервиса https://gravatar.com/.
Лицензии¶
Доступ к API¶
Вы можете получить или пересоздать свой токен доступа здесь.
Журнал аудита¶
Журнал аудита отслеживает действия, произведённые с вашей учётной записи. Для каждого важного действия с вашей учётной записью в нём регистрируются IP-адрес и браузер. Критические действия вдобавок инициируют уведомление на основной адрес электронной почты.
См.также
Перевод с помощью Weblate¶
Благодарим вас за проявленный интерес к переводу с помощью Weblate. Проекты могут быть настроены либо на прямой перевод, либо на принятие предложений, внесённых пользователями без учётных записей.
В целом, существует два режима перевода:
Проект принимает прямые переводы
Проект принимает только предложения, которые автоматически подтверждаются по достижении определённого числа голосов
Для получения более подробной информации о процессе перевода, пожалуйста, ознакомьтесь с разделом Рабочие процессы перевода.
Варианты видимости проекта перевода:
Видимый публично, в который внести свой вклад может любой желающий
Видимый только для определённой группы переводчиков
См.также
Проекты перевода¶
В проекте перевода содержатся относящиеся к нему компоненты — ресурсы связанные с одним и тем же программным обеспечением, книгой или проектом.

Ссылки на перевод¶
Когда вы зайдёте в компонент, там будет список со ссылками, которые ведут к собственно переводу. Далее перевод подразделяется на отдельные проверки, такие как Непереведённые строки или Строки, требующие действий. Если весь проект переведён и в нём не обнаружено ошибок, то в нём всё равно будет доступна ссылка Все строки. Также вы можете воспользоваться полем поиска для того чтобы найти определённую строку или термин.

Предложения¶
Примечание
Фактические разрешения могут отличаться в зависимости от ваших настроек Weblate.
Анонимные пользователи могут только вносить предложения (по умолчанию). Тоже самое могут делать и зарегистрированные пользователи, если они неуверенны в собственном переводе. Эти предложения в дальнейшем сможет просмотреть и отрецензировать другой переводчик.
Предложения ежедневно сканируются с целью удаления дубликатов и предложений, совпадающих с текущим переводом.
Комментарии¶
Можно разместить три типа комментариев: для переводов, исходных строк или для сообщения об ошибках в исходных строках, когда эта функциональность включена с помощью Включить рецензии исходных строк. Выберите тот, который соответствует теме, которую вы хотите обсудить. Комментарии к исходным строкам в любом случае хороши для предоставления обратной связи по исходной строке, например, чтобы перефразировать её или задать вопросы по ней.
Во всех типах комментариев вы можете использовать синтаксис Markdown и упоминать других пользователей, используя синтаксис @упоминаний
.
Варианты¶
Варианты используются для группировки вариантов строки с различной длиной. Таким образом, пользовательский интерфейс вашего проекта может использовать различные строки в зависимости от размеров экрана или окна.
См.также
Метки¶
Метки используются для категоризации строк в проекте для дальнейшего изменения рабочего процесса локализации (например, для определения категорий строк).
См.также
Перевод¶
На странице перевода отображаются исходная строка и собственно область редактирования перевода. Если переводится строка со множественным числом, то показываются несколько исходных строк и областей редактирования, каждая из которых снабжена меткой, описывающей и приводящей числовые примеры для этой формы множественного числа в данном языке.
Все специальные пробельные символы подчёркиваются красным цветом и обозначаются серыми видимыми символами-заменителями. Более одного последовательного пробела также подчёркиваются красным цветом, чтобы предупредить переводчика о потенциальной проблеме форматирования.
На этой странице также могут быть показаны различные кусочки дополнительной информации, большая часть которой берётся из исходного кода проекта (например, контекст, комментарии разработчика или место, где используется сообщение). Если переводчик в параметрах своего профиля выбрал дополнительные языки, то над исходной строкой будет также показан перевод на каждый из этих языков (смотрите раздел Вспомогательные языки).
Под переводом будут показаны предложения, внесённые другими пользователями, которые вы, в свою очередь, можете принять(✓), принять с изменениями(🖉) или удалить(🗑).
Формы множественного числа¶
Слова, изменяющие свою форму в зависимости от того, какое число находится рядом с ними, называются в Weblate «формами множественного числа». Каждый язык имеет своё определение множественного числа. В английском языке, например, существует всего одна такая форма. Если слово стоит в единичном числе, к примеру, «автомобиль» — «car» — неявно подразумевается именно одна машина, а во множественном — «автомобили» — «cars» — подразумеваются уже две или более машины, либо же просто понятие «автомобили» как существительное. Такие языки, как, например, чешский, арабский или русский, имеют больше форм множественного числа, а правила употребления этих форм отличаются от правил английского.
Weblate полностью поддерживает каждую из этих форм, на каждом соответствующем языке (переводя каждое множественное число отдельно). Количество полей и как они, в свою очередь, используются в переведенной заявке или проекте, зависит от настроенной формулы множественного числа. Weblate показывает основную информацию. Правила Множественного Языка Консорциума Unicode содержат более подробное описание.
См.также

Горячие клавиши¶
Изменено в версии 2.18: Горячие клавиши в версии 2.18 были исправлены, чтобы они с меньшей вероятностью конфликтовали с клавишами по умолчанию браузера или системы.
При переводе можно использовать следующие горячие клавиши:
Горячие клавиши |
Описание |
---|---|
Alt+Home |
Переход к первому переводу в текущем поиске. |
Alt+End |
Переход к последнему переводу в текущем поиске. |
Alt+PageUp или Ctrl ↑ или Alt ↑ или Cmd ↑ |
Переход к предыдущему переводу в текущем поиске. |
Alt+PageDown или Ctrl+↓ или Alt+↓ или Cmd+↓ |
Переход к последующему переводу в текущем поиске. |
Alt+Enter или Ctrl+Enter или Cmd+Enter |
Сохранение текущего перевода. |
Ctrl+Shift+Enter или Cmd+Shift+Enter |
Снятие с перевода пометки «на правку» и его сохранение. |
Ctrl+E или Cmd+E |
Фокусировка на редакторе перевода. |
Ctrl+U или Cmd+U |
Фокусировка на редакторе комментариев. |
Ctrl+M или Cmd+M |
Показ вкладки Автоматические предложения, смотреть раздел Автоматические предложения. |
Ctrl+1 — Ctrl+9 или Cmd+1 — Cmd+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 |
Переключение флага На правку. |
Визуальная клавиатура¶
Чуть выше поля перевода показывается небольшой ряд визуальной клавиатуры. Она может быть полезна для того, чтобы помнить о местной пунктуации (поскольку строка является локальной для каждого языка) или иметь под рукой символы, которые иначе трудно набрать.
Показываемые символы разделены на три категории:
Пользовательские символы, определённые в его профиле
Предоставляемые Weblate символы для конкретного языка (например, кавычки или символы, специфичные для текста справа-налево)
Символы, настроенные через параметр
SPECIAL_CHARS

Контекст перевода¶
Это контекстное описание содержит инфо, относящуюся к текущей строке.
- Атрибуты строки
Такие вещи, как идентификатор сообщения, его контекст (
msgctxt
) или местоположение в исходном коде.- Снимки экрана
В Weblate могут быть загружены снимки экрана, чтобы лучше информировать переводчиков о том, где и как используется строка, смотрите раздел Визуальный контекст для строк.
- Соседние строки
Отображает соседние сообщения из файла перевода. Обычно они также используются в аналогичном контексте и оказываются полезными для поддержания согласованности перевода.
- Другие вхождения
В случае, если сообщение появляется в нескольких местах (например, в нескольких компонентах), эта вкладка показывает их все, если в них найдены противоречия (смотрите раздел Противоречия). Вы можете выбрать, какую из строк использовать.
- Память переводов
Показывает похожие строки, переведённые в прошлом, смотрите раздел Память переводов.
- Глоссарий
Отображает термины из глоссария проекта, используемые в текущем сообщении.
- Недавние изменения
Список людей, которые недавно изменили это сообщение, используя Weblate.
- Проект
Информация о проекте, например, инструкции для переводчиков, или каталог, или ссылка на строку в репозитории системе контроля версий, используемой проектом.
Если вам нужны прямые ссылки, формат перевода должен это поддерживать.
История переводов¶
Каждое изменение по умолчанию (если это не отключено в настройках компонента) сохраняется в базе данных и может быть отменено. Также при необходимости через нижележащую систему управления версиями можно отменить всё, что угодно.
Длина переведённой строки¶
Weblate может ограничивать длину перевода несколькими способами, чтобы гарантировать, что переведённая строка не будет слишком длинной:
По умолчанию установлена ограничение в соответствии с которым перевод может быть не более чем в десять раз длиннее исходной строки. Его можно отключить с помощью параметра
LIMIT_TRANSLATION_LENGTH_BY_SOURCE_LENGTH
. Если вы упёрлись в это ограничение, то это может быть вызвано тем, что одноязычный перевод ошибочно сконфигурирован как двуязычный, в результате чего Weblate считает, что исходной строкой является ключ перевода, а не собственно исходная строка. Дополнительную информацию смотрите в разделе Двуязычные и одноязычные форматы.Максимальная длина в символах, определяемая в файле перевода или флагом, смотрите раздел Максимальная длина перевода.
Максимальный отрисовываемый размер текста в пикселях, определяемый флагами, смотрите раздел Максимальный размер перевода.
Автоматические предложения¶
На основе своих настроек и языка, на который вы переводите, Weblate подберёт несколько сервисов машинного перевода и памяти переводов и обеспечит вам доступ к предложениям от оных. Все машинные переводы будут доступны на одной вкладке на странице перевода.
См.также
Список поддерживаемых инструментов можно найти в разделе Машинный перевод.
Автоматический перевод¶
Для автоматического начального перевода вашего проекта на основе внешних источников вы можете использовать Автоматический перевод, который доступен в меню Инструменты для определённой пары компонента и языка:

Возможны два режима работы этого инструмента:
Использование в качестве источника для переводов других компонентов Weblate.
Использование выбранных сервисов машинного перевода с переводами выше определённого порога качества.
Вы также можете выбрать, какие строки должны быть переведены автоматически.
Предупреждение
Имейте в виду, что если использовать широкие фильтры, вроде фильтра Все строки, это приведёт к перезаписи существующих переводов.
Инструмент полезен в ряде ситуаций, например, при объединении переводов различных компонентов (к примеру, приложения его веб-сайта) или при начальном переводе нового компонента с использованием существующих переводов (памяти переводов).
Ограничение частоты запросов¶
Чтобы избежать злоупотребления интерфейсом, ограничение на частоту запросов применяется к некоторым операциям, таким как поиск, отправка контактных форм или перевод. В случае воздействия, вы будете на определённый период заблокированы, по истечению которого вы сможете заново выполнить операцию.
Ограничения по умолчанию и точная настройка описаны в руководстве по администрированию, смотреть раздел Ограничение частоты запросов.
Поиск и замена¶
Для эффективного изменения какого-то термина или для производства какого-либо массового исправления в строках, ваш нужен Поиск и замена — Он расположен в меню Инструменты.
Подсказка
Не волнуйтесь о том, что вы можете запортить строки. Этот процесс проходит в два шага: сначала он выведет вам предварительный просмотр изменений и только потом они будут применены.
Массовая правка¶
Массовая правка позволяет выполнять операцию одновременно с несколькими строками. Вы определяете строки путём их поиска и задаёте, что нужно сделать для совпадающих строк. Поддерживаются следующие операции:
Изменение состояния строки (например, для утверждения всех нерецензируемых строк).
Корректировка флагов перевода (смотрите раздел Настройка поведения с помощью флагов)
Корректировка меток строк (смотрите раздел Метки строк)
Подсказка
Этот инструмент называется Массовая правка и доступен он из меню Инструменты проекта, компонента или перевода.
См.также
Скачивание и загрузка переводов¶
Вы можете экспортировать файлы из перевода, внести в них изменения и снова их импортировать. Это позволяет поработать над переводом в автономном режиме, а затем влить изменения обратно в существующий перевод. Это работает, даже если существующий перевод за это время был изменён.
Примечание
Доступные параметры могут быть ограничены настройками управления доступа.
Скачивание переводов¶
Из панели проекта или компонента переводимые файлы можно загрузить в меню файлов.
Первый вариант - загрузить файл в исходном формате в том виде, в котором он хранится в репозиторие. В этом случае все изменения в переводе коммитятся, и получается актуальный файл без каких-либо преобразований.
Вы также можете скачать перевод, преобразованный в один из широко используемых форматов локализации. Преобразованные файлы будут обогащены данными, предоставленными в Weblate, такими как дополнительный контекст, комментарии или флаги. Несколько форматов файлов доступны через меню Files ↓ Настройка загрузки:
gettext (PO)
XLIFF с расширениями gettext
XLIFF 1.1
TermBase eXchange
eXchange памяти переводов
gettext MO (доступно только при переводе с использованием gettext PO)
CSV
Excel Open XML
JSON (доступно только для одноязычных переводов)
Ресурс строк Android (доступен только для одноязычных переводов)
Строки iOS (доступно только для одноязычных переводов)
Подсказка
Содержимое, доступное в преобразованных файлах, отличается в зависимости от особенностей формата файла, вы можете найти обзор в Возможности типов переводов.

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

Поддерживаемые форматы файлов¶
Можно загрузить любой файл в поддерживаемом формате, но всё же рекомендуется использовать тот же самый формат файла, который используется для перевода, в противном случае некоторые возможности могут быть перенесены неправильно.
См.также
Загруженный файл объединяется с существующим для обновления перевода, по умолчанию перезаписывая существующие записи (это можно отключить или включить в диалоге загрузки).
Способы импорта¶
При загрузке файлов перевода вы можете выбирать из следующих вариантов:
- Добавить как перевод (
translate
) Импортированные переводы добавляются как переводы. Это наиболее распространённое использование и поведение по умолчанию.
Используются только переводы из загруженного файла и никакого дополнительного содержания.
- Добавить как предложение (
suggest
) Импортированные переводы добавляются как предложения, делайте это тогда, когда хотите, чтобы загруженные строки были отрецензированы.
Используются только переводы из загруженного файла и никакого дополнительного содержания.
- Добавить перевод как «На правку» (
fuzzy
) Импортированные переводы добавляются как переводы, требующие правки. Это может быть полезно, когда вы хотите, чтобы переводы не только использовались, но также были и отрецензированы.
Используются только переводы из загруженного файла и никакого дополнительного содержания.
- Заменить существующий файл перевода (
replace
) Существующий файл заменяется новым содержимым. Это может привести к потере существующих переводов, используйте этот вариант с осторожностью.
- Обновить исходные строки (
source
) Обновляет исходные строки в двуязычном файле перевода. Это поведение похоже на то, что делает надстройка Обновлять PO-файлы до соответствия POT (msgmerge).
Этот вариант поддерживается только для некоторых форматов файлов.
- Добавить новые строки (
add
) Добавляет новые строки для перевода, пропуская те, что уже существуют.
Если вы хотите и добавить новые строки, и обновить существующие переводы, то загрузите файл второй раз в режиме Добавить как перевод.
Этот вариант доступен только если включено управление строками.
Из загруженного файла используются только источник, перевод и ключ (контекст).
Разрешение конфликтов¶
Определяет, что делать с загружаемыми строками, которые уже переведены.
Строки, отмеченные как «На правку»¶
Также существует параметр, контролирующий то, что делать со строками в импортируемом файле, нуждающимися в редактировании . Такие строки можно обработать одним из трёх следующих способов: «Не импортировать», «Импортировать строки, как отмеченные „На правку“» или «Импортировать как переведённое».
Переопределение авторства¶
С разрешениями администратора вы также можете указать авторство загружаемого файла. Это может быть полезно в случае, если вы получили файл другим способом и хотите объединить переводы из него с существующими с правильным указанием фактического автора.
Глоссарий¶
Каждый проект может включать один или несколько глоссариев в качестве краткого обозначения для хранения терминологии. Глоссарий облегчает поддержание последовательности перевода.
Глоссарием для каждого языка можно управлять отдельно, но они хранятся вместе как единый компонент, что помогает администраторам проектов и многоязычным переводчикам поддерживать определённую межъязыковую согласованность. Термины из глоссария, содержащие слова из текущей переведённой строки, отображаются в боковой панели редактора перевода.
Управление глоссариями¶
Изменено в версии 4.5: Глоссарии теперь являются обычными компонентами перевода, так что вы можете использовать все возможности Weblate при работе с ними: комментировать, сохранять в удалённом репозитории или добавлять пояснения.
Можно использовать любой компонент в качестве глоссария, включив соответствующий параметр. Вы можете создать несколько глоссариев для одного проекта.
Пустой глоссарий для проекта создаётся автоматически вместе с самим проектом. Глоссарии используются совместно всеми компонентами одного проекта, а также, по желанию, вы можете использовать его совместно с другими проектами, сделав его разделяемым компонентом из соответствующего компонента глоссария.
Компонент-глоссарий выглядит также как и любой другой компонент в Weblate с добавлением цветного ярлыка:

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

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

Непереводимые термины¶
Добавлено в версии 4.5.
Пометка определённых переводов терминов глоссария только для чтения
путём массового редактирования, ввода флага через Инструменты ↓ Пометить «только для чтения» означает, что они не могут быть переведены. Используйте это для названий брендов или других терминов, которые не должны быть изменены в других языках. Такие термины визуально выделяются в боковой панели глоссария.
См.также
Нежелательные переводы¶
Добавлено в версии 4.5.
Пометка определённых переводов терминов глоссария как нежелательный
, путём массового редактирования, ввода флага через Инструменты ↓ Пометить как «Нежелательный перевод» означает, что они не должны использоваться. Используйте это для уточнения перевода, когда некоторые слова неоднозначны или могут иметь неожиданное значение.
См.также
Терминология¶
Добавлено в версии 4.5.
Пометка определённых переводов терминов глоссария как терминология
путём массового редактирования, ввода флага или через Инструменты ↓ Пометить как «терминологию» добавляет записи для них во все языки глоссария. Используйте это для важных терминов, которые должны быть хорошо продуманы и сохранять последовательное значение на всех языках.
См.также
Варианты¶
Варианты - это общий способ группировки строк. При переводе все варианты терминов перечисляются в боковой панели глоссария.
Подсказка
Вы можете использовать это для добавления сокращений или более коротких выражений для термина.
См.также
Проверки и исправления¶
Проверки качества помогают выявить распространённые ошибки переводчиков, что гарантирует хорошее состояние перевода. В случае ложно-положительных срабатываний проверки могут быть проигнорированы.
После отправки перевода с неудачной проверкой, она сразу же показывается пользователю:

Автоматические исправления¶
В дополнение к проверкам качества, Weblate может автоматически исправлять некоторые распространённые ошибки в переведённых строках. Используйте эту возможность с осторожностью, чтобы не допустить добавления новых ошибок.
См.также
Проверки качества¶
Weblate использует широкий спектр проверок качества строк. В следующем разделе они все описываются более подробно. Также существуют проверки, специфичные для конкретных языков. Если какая-то проверка срабатывает ошибочно, пожалуйста, отправьте сообщение об ошибке.
Проверки перевода¶
Выполняется при каждом изменении перевода, помогая переводчикам поддерживать высокое качество перевода.
BBcode-разметка¶
BBcode в переводе не соответствует источнику
BBCode представляет собой простую разметку, полезную для, например, выделения важных частей сообщения жирным шрифтом или курсивом.
Эта проверка гарантирует, что они также будут присутствовать в переводе.
Примечание
На данный момент метод обнаружения тегов BBcode достаточно прост, поэтому данная проверка может привести к ложным срабатываниям.
Повторяющиеся слова¶
Одно и то же слово повторяется в тексте дважды подряд:
Добавлено в версии 4.1.
Проверяет, что в переводе не встречаются последовательные дубликаты слова. Обычно это указывает на ошибку в переводе.
Подсказка
Эта проверка включает в себя правила, специфичные для конкретных языков, чтобы избежать ложных срабатываний. В случае ложного срабатывания этой проверки в вашем случае, сообщите нам об этом. Смотрите раздел Сообщение о проблемах в Weblate’е.
Не соответствует глоссарию¶
Добавлено в версии 4.5.
Этот перевод не содержит термин, указанный в глоссарии.
Эту проверку можно включить с помощью флага check-glossary
(смотреть раздел Настройка поведения с помощью флагов). Но прежде чем делать это учтите следующее:
Эта проверка использует строгое сравнение строк, ожидается, что глоссарий будет содержать термины со всеми их вариантами.
Проверка каждой строки на соответствие словарю — дорогое удовольствие: это значительно замедлит все операции Weblate, которые подразумевают запуск проверок, включая импорт строк или переводов.
Двойной пробел¶
Перевод содержит двойной пробел
Проверяет наличие в переводе двойного пробела, чтобы избежать ложных срабатываний на других проверках, связанных с пробелами.
Проверка возвращает ложь, если в исходной строке найден двойной пробел, что означает, что двойной пробел был внесён в неё преднамеренно.
Форматированные строки¶
Проверяет, что форматирование в исходной строке и в переводе одинаково. Упущение в переводе строк формата обычно вызывает серьёзные проблемы, поэтому форматирование в переводе обычно должно соответствовать форматированию исходной строки.
Weblate поддерживает проверку строк формата на нескольких языках. Проверка не включается автоматически, только если строка соответствующим образом помечена (например, флагом c-format для C-формата). Gettext добавляет эту разметку автоматически, но для других форматов файлов или если ваши PO-файлы не сгенерированы программой xgettext вам, вероятно, придётся добавить её вручную.
Её можно добавлять как индивидуально в каждую единицу перевода (смотрите раздел Дополнительная информация об исходных строках), так и в конфигурации компонента. Определение формата для компонента целиком проще, но может привести к ложным срабатываниям, если строка не интерпретируется как строка формата, но при этом внутри неё используется синтаксис строки формата.
Подсказка
В случае, если конкретная проверка формата в Weblate отсутствует, вы можете использовать общую проверку Символы-заполнители.
Помимо проверки, эти флаги также включают подсветку строк формата, чтобы их было легко вставлять в перевод:

Интерполяционная строка AngularJS¶
Интерполяционные строки AngularJS не сооответствуют источнику
Именованная строка формата |
|
Флаг для включения |
angularjs-format |
C-формат¶
Строка в формате C не соответствует источнику
Простая строка формата |
|
Позиционная строка формата |
|
Флаг для включения |
c-format |
C#-формат¶
Строка в формате C# не соответствует источнику
Позиционная строка формата |
|
Флаг для включения |
c-sharp-format |
См.также
Шаблонные литералы ECMAScript¶
Шаблонные литералы ECMAScript не соответствует источнику
Интерполяция |
|
Флаг для включения |
es-format |
См.также
Интерполяция i18next¶
Интерполяция i18next не соответствует источнику
Добавлено в версии 4.0.
Интерполяция |
|
Вложение |
|
Флаг для включения |
i18next-interpolation |
См.также
Java-формат¶
Строка в формате Java не соответствует источнику
Простая строка формата |
|
Позиционная строка формата |
|
Флаг для включения |
java-format |
См.также
Java MessageFormat¶
Строка в формате Java MessageFormat не соответствует источнику
Позиционная строка формата |
|
Флаг для включения |
Флаг java-messageformat включает эту проверку безусловно |
Флаг auto-java-messageformat включает проверку только если в исходной строке содержится строка формата |
См.также
JavaScript-формат¶
Строка в формате JavaScript не соответствует источнику
Простая строка формата |
|
Флаг для включения |
javascript-format |
Lua-формат¶
Строка в формате Lua не соответствует источнику
Простая строка формата |
|
Флаг для включения |
lua-format |
Формат Object Pascal¶
Строка формата объекта Pascal не соответствует источнику
Простая строка формата |
|
Флаг для включения |
object-pascal-format |
Символы-заполнители в процентной нотации¶
Символы-заполнители в процентной нотации не соответствуют источнику
Добавлено в версии 4.0.
Простая строка формата |
|
Флаг для включения |
percent-placeholders |
См.также
Perl-формат¶
Строка в формате Perl’а не соответствует источнику
Простая строка формата |
|
Позиционная строка формата |
|
Флаг для включения |
perl-format |
PHP- формат¶
Строка в формате PHP не соответствует источнику
Простая строка формата |
|
Позиционная строка формата |
|
Флаг для включения |
php-format |
Python-формат: фигурные скобки¶
Форматирование фигурных скобок в Python не соответствует источнику
Простая строка формата |
|
Именованная строка формата |
|
Флаг для включения |
python-brace-format |
Python-формат¶
Строка в формате Python’а не соответствует источнику
Простая строка формата |
|
Именованная строка формата |
|
Флаг для включения |
python-format |
Qt-формат¶
Строка в формате Qt не соответствует источнику
Позиционная строка формата |
|
Флаг для включения |
qt-format |
См.также
Формат множественного числа Qt¶
Строка в формате множественного числа Qt не соответствует источнику
Строка в формате множественного числа |
|
Флаг для включения |
qt-plural-format |
Ruby-формат¶
Строка формата Ruby не соответствует источнику
Простая строка формата |
|
Позиционная строка формата |
|
Именованная строка формата |
|
Именованная шаблонная строка |
|
Флаг для включения |
ruby-format |
См.также
Формат схемы¶
Строка формата схемы не соответствует источнику
Простая строка формата |
|
Флаг для включения |
scheme-format |
Форматирование Vue I18n¶
Форматирование Vue I18n не соответствует источнику
Именованная строка формата |
|
Форматирование локализации Rails |
|
Связанные сообщения локализации |
|
Флаг для включения |
vue-format |
См.также
Форматированные строки, Формат сообщений локализации Vue I18n, `Связанные сообщения локализации Vue I18n<https://kazupon.github.io/vue-i18n/ru/guide/messages.html#%D1%81%D0%B2%D1%8F%D0%B7%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D1%8F-n%D0%BE%D0%BA%D0%B0n%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8>`_
Уже переведено¶
Эта строка уже переводилась
Означает, что строка уже переведена. Это может произойти, если переводы откатывались в системе контроля версий или иным образом терялись.
Противоречия¶
Эта строка имеет более одного перевода в этом проекте, либо же в некоторых компонентах она не переведена.
Weblate проверяет переводы одинаковых строк по всем переводам в проекте, чтобы помочь вам поддерживать переводы согласованными.
Проверка срабатывает, когда в проекте обнаруживаются различные переводы одной и той же строки. Также это может привести к несогласованности в отображаемых проверках. Другие переводы этой строки можно найти на вкладке Другие вхождения.
Примечание
Также эта проверка срабатывает в том случае, если строка в одном компоненте переведена, а в другом — нет. Она может использоваться, чтобы по-быстрому вручную обработать строки, не переведённые в некоторых компонентах; для этого надо просто на вкладке Другие вхождения нажать на кнопку Использовать этот перевод, отображаемую напротив каждой строки.
Для автоматизации перевода новых добавленных строк, которые уже переведены в другом компоненте, вы можете использовать надстройку Автоматический перевод.
Используется кашида¶
Декоративные буквы кашиды не должны использоваться
Добавлено в версии 3.5.
Декоративные буквы кашида не должны использоваться в переводе. Также они известны как татвиль.
См.также
Ссылки Markdown¶
Ссылки Markdown-разметки не соответствуют источнику
Добавлено в версии 3.5.
Ссылки Markdown-разметки не соответствуют источнику.
См.также
Сноски Markdown¶
Ссылки на сноски Markdown не соответствуют источнику
Добавлено в версии 3.5.
Ссылки на сноски Markdown не соответствуют источнику.
См.также
Синтаксис Markdown¶
Синтаксис Markdown-разметки не соответствует источнику
Добавлено в версии 3.5.
Синтаксис Markdown-разметки не соответствует источнику
См.также
Максимальная длина перевода¶
Перевод не должен превышать заданную длину
Проверяет, что переводы имеют приемлемую длину, чтобы укладываться в доступное пространство. Эта проверка проверяет только длину символов перевода.
В отличие от других проверок, флаг для этой проверки должен быть установлен в виде пары ключ:значение
, например, max-length:100
.
Подсказка
Эта проверка смотрит на количество символов, что может быть не самой лучшей метрикой при использовании для отображения текста пропорциональных шрифтов. Проверка Максимальный размер перевода проверяет фактическую отрисовку текста.
Также для расширения позиций-заполнителей перед проверкой строки может быть полезен флаг replacements:
.
Максимальный размер перевода¶
Отрисованный текст перевода не должен превышать заданный размер
Добавлено в версии 3.7.
Отрисованный текст перевода не должен превышать заданный размер. Эта проверка отрисовывает текст с переносом по строкам и проверяет, вписывается ли он в заданные границы.
Для этой проверки требуется один или два параметра — максимальная ширина и максимальное количество строк. В случае, если количество строк не указано, считается, что текст должен уместиться в одну строку.
Также директивами font-*
вы можете настроить используемый шрифт (смотрите раздел Настройка поведения с помощью флагов), например, следующие флаги перевода говорят, что текст, отрисовываемый шрифтом ubuntu размера 22, должен вписаться в две строки и 500 пикселей:
max-size:500:2, font-family:ubuntu, font-size:22
Подсказка
Возможно, вы захотите установить директивы font-*
в настройках компонента, чтобы для всех строк компонента был настроен один и тот же шрифт. В случае, если вам нужно будет настроить их для отдельной строки, вы сможете переопределить их значения для этой строки.
Также для расширения позиций-заполнителей перед проверкой строки может быть полезен флаг replacements:
.
Несовпадающие \n¶
Количество \n в переводе не соответствует источнику
Экранированные символы новой строки обычно важны при форматировании вывода программы. Проверка срабатывает, если количество символов \n
в переводе не совпадает с их количеством в исходной строке.
Несовпадающие двоеточия¶
Источник и перевод не заканчиваются оба двоеточием
Проверяет, что двоеточия в исходной строке и в переводе одинаковы. Также проверяется наличие двоеточий для тех языков, в которых они не используются (китайский или японский).
См.также
Несовпадающие многоточия¶
Источник и перевод не заканчиваются оба многоточием
Проверяет, что конечные многоточия в исходной строке и в переводе одинаковы. Эта проверка проверяет только настоящие многоточия (символы …
), но не три подряд идущих точки (...
).
Как правило, на печати многоточие отрисовывается лучше, чем три подряд стоящих точки и лучше звучит при преобразовании текста в речь.
См.также
Несовпадающие восклицательные знаки¶
Источник и перевод не заканчиваются оба восклицательным знаком
Проверяет, что восклицательные знаки в исходной строке и в переводе одинаковы. Также проверяется наличие восклицательных знаков для тех языков, в которых они не используются (китайский, японский, корейский, армянский, лимбу, бирманский или нко).
См.также
Несовпадающие точки¶
Источник и перевод не заканчиваются оба точкой
Проверяет, что точки в исходной строке и в переводе одинаковы. Также проверяется наличие точек для тех языков, в которых они не используются (китайский, японский, деванагари или урду).
См.также
Несовпадающие вопросительные знаки¶
Источник и перевод не заканчиваются оба вопросительным знаком
Проверяет, что вопросительные знаки в исходной строке и в переводе одинаковы. Также проверяется наличие вопросительных знаков для тех языков, в которых они не используются (армянский, арабский, китайский, корейский, японский, эфиопский, ваи или коптский).
См.также
Несовпадающие точки с запятой¶
Источник и перевод не заканчиваются оба точкой с запятой
Проверяет, что точки с запятой в конце предложений в исходной строке и в переводе одинаковы. Эта проверка может быть полезна, например, для сохранения форматирования в записях файлов .desktop
.
См.также
Несовпадающие переводы строк¶
Количество символов новой строки в переводе не соответствует источнику
Символы новой строки обычно важны при форматировании вывода программы. Проверка срабатывает, если количество литералов``n`` в переводе не совпадает с их количеством в исходной строке.
Нет форм множественного числа¶
Некоторые формы множественного числа не переведены
Проверяет, что были переведены все формы множественного числа исходной строки. Сведения о том, как используется каждая форма множественного числа, можно найти в определении строки.
Отсутствие перевода в форме множественного числа в некоторых случаях приводит к тому, что при использовании формы множественного числа ничего не будет отображаться.
Символы-заполнители¶
В переводе пропущены некоторые символы-заполнители:
Добавлено в версии 3.9.
Изменено в версии 4.3: В качестве заполнителя вы можете использовать регулярное выражение.
В переводе пропущены некоторые символы-заполнители. Эти символы либо извлекаются из файла перевода, либо определяются вручную с помощью флага placeholders
; если их несколько, они разделяются двоеточием, а строки с пробелами могут быть заключены в кавычки:
placeholders:$URL$:$TARGET$:"some long text"
Если у вас есть регулярный синтаксис для имён заполнителей, то вы можете применить регулярные выражения:
placeholders:r"%[^% ]%"
См.также
Пробелы и пунктуация¶
Отсутствует неразрывный пробел перед знаком двойной пунктуации
Добавлено в версии 3.9.
Проверяет наличие неразрывного пробела перед знаком двойной пунктуации (восклицательным знаком, вопросительным знаком, точкой с запятой или двоеточием). Это правило используется только в некоторых избранных языках, вроде французского или бретонского, где по типографским правилам обязателен пробел перед знаком двойной пунктуации.
Регулярное выражение¶
Перевод не соответствует регулярному выражению:
Добавлено в версии 3.9.
Перевод не соответствует регулярному выражению. Это выражение либо извлекается из файла перевода, либо определяется вручную с помощью флага regex
:
regex:^foo|bar$
Одинаковые формы множественного числа¶
Некоторые формы множественного числа переведены одинаково
Проверка срабатывает, если некоторые формы множественного числа в переводе переведены одинаково. В большинстве языков они должны быть разными.
Пустая строка в начале¶
Источник и перевод не начинаются оба с новой строки
Обычно символы новой строки в исходных текстах появляются по уважительной причине, их пропуск или добавление могут привести к проблемам с форматированием при использовании переведённого текста.
См.также
Пробелы в начале¶
Источник и перевод не начинаются оба одинаковым числом пробелов
Пробелы в начале строки обычно используются для набивания отступов в интерфейсе, поэтому их важно сохранить.
Пустая строка в конце¶
Источник и перевод не заканчиваются оба новой строкой
Обычно символы новой строки в исходных текстах появляются по уважительной причине, их пропуск или добавление могут привести к проблемам с форматированием при использовании переведённого текста.
См.также
Пробелы в конце¶
Источник и перевод не заканчиваются оба пробелом
Проверяет, что количество конечных пробелов в исходной строке и в переводе одинаково.
Конечные пробелы обычно используется для добавления отступа до соседних элементов, поэтому их удаление может поломать макет.
Перевод без изменения¶
Источник и перевод тождественны
Возникает, если исходная строка и соответствующая строка перевода идентичны, по крайней мере в одной из форм множественного числа. Некоторые строки, обычно встречающиеся во всех языках, игнорируются, а различная разметка удаляется. Это уменьшает количество ложных срабатываний.
Эта проверка может помочь найти ошибочно не переведённые строки.
Поведение этой проверки по умолчанию заключается в исключении из проверки слов из встроенного чёрного списка. Это такие слова, которые зачастую не переводятся. Это полезно для того, чтобы избежать ложных срабатываний на коротких строках, которые состоят только из одного слова, одинакового в нескольких языках. Этот чёрный список можно отключить, добавив в строку или в компонент флаг strict-same
.
Небезопасный HTML-код¶
Перевод использует небезопасную HTML-разметку
Добавлено в версии 3.9.
Перевод использует небезопасную HTML-разметку. Эта проверка должна быть включена с помощью флага safe-html
(смотрите раздел Настройка поведения с помощью флагов). Также имеется соответствующий автоматический исправляльщик, который может автоматически почистить разметку.
См.также
Проверка HTML осуществляется с помощью разработанной Mozilla библиотеки `Bleach <https://bleach.readthedocs.io/`_.
URL-адреса¶
Перевод не содержит URL
Добавлено в версии 3.5.
Перевод не содержит URL-адрес. Эта проверка срабатывает только в том случае, если единица перевода помечена как содержащая URL-адрес. В этом случае перевод должен быть корректным URL-адресом.
XML-разметка¶
XML-теги в переводе не соответствуют источнику
Обычно это означает, что полученный результат будет выглядеть по-другому. В большинстве случаев такое изменение из-за перевода не является желаемым результатом, но иногда именно это и надо.
Проверяет, что XML-теги в исходной строке и в переводе одинаковы.
Пробел нулевой ширины¶
Перевод содержит лишние символы пробела нулевой ширины
Символы пробела нулевой ширины (<U+200B>) используются для разбиения сообщений по словам (переноса по словам).
Поскольку обычно они вставляются по ошибке, эта проверка срабатывает на их присутствие в переводе. В некоторых программах при использовании этого символа могут возникнуть проблемы.
Проверки для исходных строк¶
Проверки для исходных строк могут помочь разработчикам улучшить качество исходных строк.
Многоточие¶
В этой строке используются три точки (…) вместо символа многоточия (…)
Эта проверка срабатывает, когда в строке используются три подряд стоящих точки (...
), когда вместо них должен использоваться символ многоточия (…
).
Использование юникодного символа в большинстве случаев является лучшим подходом; он лучше выглядит при отрисовке текста и может лучше звучать при преобразовании текста в речь.
См.также
Давно не переводилась¶
Строка давно не переводилась
Добавлено в версии 4.1.
Если строка долгое время не переводилась, это может указывать на проблему в исходной строке, затрудняющую её перевод.
Множество неудачных проверок¶
Переводы на несколько языков имеют неудачные проверки
Во многих переводах этой строки имеются неудачные проверки качества. Обычно это свидетельствует о том, что нужно что-то сделать для улучшения исходной строки.
Часто неудачная проверка может быть вызвана пропущенной точкой в конце предложения или подобными мелкими проблемами, которые переводчики склонны исправлять в переводе, в то время как лучше было бы их исправить в исходной строке.
Несколько переменных без названий¶
Строка содержит несколько неименованных переменных, что не позволяет переводчикам их переупорядочивать
Добавлено в версии 4.1.
Строка содержит несколько неименованных переменных, что не позволяет переводчикам их переупорядочивать.
Рассмотрите возможность использования именованных переменных вместо неименованных, чтобы позволить переводчикам менять их порядок в переводимом тексте.
Формы единственного числа¶
Строка содержит множественное число, но не использует формы множественного числа
Строка содержит множественное число, но не использует формы множественного числа. В случае, если ваша система перевода его поддерживает, вы должны использовать вариант, учитывающий множественное число.
Например, при использовании Python’а и Gettext’а это может выглядеть так:
from gettext import ngettext
print ngettext("Selected %d file", "Selected %d files", files) % files
Поиск¶
Добавлено в версии 3.9.
Для поиска нужных строк можно использовать расширенные поисковые запросы, включающие в себя логические операции, круглые скобки или поиск по конкретным полям.
Если поле не определено, поиск проводится по полям Источник, Перевод и Контекст.

Простой поиск¶
Любая фраза, введённая в поле поиска, разбивается на слова. При поиске показываются строки, содержащие любое из этих слов. Чтобы найти точную фразу, поместите \»фразу для поиска\» в кавычки (работают как одинарные (\“), так и двойные (\») кавычки): "это строка, заключённая в кавычки"
или 'другая закавыченная строка'
.
Поля¶
source:ТЕКСТ
Регистронезависимый поиск по исходной строке.
target:ТЕКСТ
Регистронезависимый поиск по целевой строке.
context:ТЕКСТ
Регистронезависимый поиск по строке контекста.
key:ТЕКСТ
Регистронезависимый поиск по строке ключа.
note:ТЕКСТ
Регистронезависимый поиск по строке комментария.
location:ТЕКСТ
Регистронезависимый поиск по строке местоположения.
priority:ЧИСЛО
Приоритет строки.
added:ДАТА_И_ВРЕМЯ
Метка времени, когда строка была добавлена в Weblate.
state:ТЕКСТ
Поиск по состоянию (
approved
,translated
,needs-editing
,empty
,read-only
), поддерживает Операторы поиска по полям.pending:ЛОГИЧЕСКОЕ_ЗНАЧЕНИЕ
Строка, ожидающая сброса в систему контроля версий.
has:ТЕКСТ
Поиск строк, имеющих атрибуты —
plural
,context
,suggestion
,comment
,check
,dismissed-check
,translation
,variant
,screenshot
,flags
,explanation
,glossary
,note
.is:ТЕКСТ
Поиск по состояниям строки (
pending
,translated
,untranslated
).language:ТЕКСТ
Целевой язык строки.
component:ТЕКСТ
Component slug or name case insensitive search, see Плашка компонента and Название компонента.
project:ТЕКСТ
Плашка проекта, смотреть раздел URL-плашка.
changed_by:ТЕКСТ
Строка была изменена автором с указанным именем пользователя.
changed:ДАТА_И_ВРЕМЯ
Дата изменения содержимого строки, поддерживает операторы поиска по полям.
change_time:ДАТА_И_ВРЕМЯ
Дата изменения строки, поддерживает операторы поиска по полям; в отличии от
changed
это также включает и те события, которые не изменяют само содержимое строки, а также вы можете фильтровать события по конкретным действиям с помощьюchange_action
.change_action:ТЕКСТ
Фильтр по действиям, вызвавшим изменения, полезно для использования совместно с
change_time
. Принимает название действия на английском или в кавычках и с пробелами или в нижнем регистре и с подчёркиваниями заменёнными на дефисы. Смотрите примеры в разделе «Поиск по изменениям».check:ТЕКСТ
Строка имеет неудачные проверки.
dismissed_check:ТЕКСТ
Строка имеет пропущенные проверки.
comment:ТЕКСТ
Поиск в пользовательских комментариях.
comment_author:ТЕКСТ
Фильтр по авторским комментариям.
suggestion:ТЕКСТ
Поиск в предложениях.
suggestion_author:ТЕКСТ
Фильтр по автору предложения.
explanation:ТЕКСТ
Поиск в пояснениях.
Логические операторы¶
Вы можете комбинировать поисковые запросы, используя для формирования сложных запросов операторы 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]"
.
Предопределённые запросы¶
На странице поиска можно выбрать один из предопределённых запросов, которые позволяют вам быстро получить доступ к наиболее часто встречающимся поисковым запросам:

Упорядочивание результатов¶
Существует множество вариантов сортировки строк в соответствии с вашими потребностями:

Рабочие процессы перевода¶
Использование Weblate — это процесс, который приближает пользователей к вам путём приближения вас к вашим переводчикам. Вы сами решаете, какой объём его возможностей вы хотите использовать.
Ниже приведён не полный список способов настройки Weblate. Вы можете основывать другие рабочие процессы на перечисленных здесь самых обычных примерах.
Доступ к переводу¶
access control рассматривается в рабочих процессах не подробно, поскольку каждый из параметров может быть применён к любому рабочему процессу. Пожалуйста, ознакомьтесь с соответствующей документацией для получения информации о том, как управлять доступом к переводам.
В следующих главах любой пользователь означает пользователя, имеющего доступ к переводу. Это может быть любой аутентифицированный пользователь, если проект является публичным, или пользователь, имеющий в проекте разрешение Перевод.
Состояния перевода¶
Каждая переведённая строка может находиться в одном из следующих состояний:
- Не переведено
Перевод пуст, он может как храниться в файле, так и не храниться в нём, в зависимости от формата файла.
- На правку
Перевод нуждается в редактировании; обычно это результат изменения исходной строки, неточного соответствия или действий переводчика. Перевод хранится в файле, в зависимости от формата файла он может быть помечен как нуждающийся в редактировании (например, ему будет присвоен флаг
fuzzy
(неточный) в Gettext-файле).- Ожидает рецензирования
Перевод выполнен, но ещё не проверен. Он хранится в файле как готовый перевод.
- Одобрено
Перевод был одобрен в процессе рецензирования. Он больше не может быть изменён переводчиками — только рецензентами. Переводчики могут только добавлять к нему предложения.
- Предложения
Предложения хранятся только в Weblate, а не в файле перевода.
Состояния по возможности представлены в файлах перевода.
Подсказка
В случае, если используемый вами формат файла не поддерживает хранение состояний, вы можете использовать надстройку Пометка неизменённых переводов флагом «На правку», чтобы пометить неизменённые строки флагом «На правку»..
Прямой перевод¶
Это самая обычная настройка для небольших команд, любой может переводить напрямую. Также она действует по умолчанию в 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. |
Включение рецензирования¶
Рецензирование можно включить в настройках проекта, на вкладке Рабочий процесс параметров проекта (Управлять → Параметры в меню проекта):

Примечание
В зависимости от настроек Weblate этот параметр может быть недоступен. Например, на Hosted Weblate он недоступен для проектов, размещённых бесплатно.
Контроль качества исходных строк¶
Во многих случаях строки на исходном языке поступают от разработчиков, так как именно они пишут код и придумывают новые исходные строки. Однако зачастую сами разработчики не являются носителями исходного языка и не могут обеспечить желаемого качества этих строк. Решить эту проблему может помочь промежуточный перевод, который будет являться неким дополнительным «шлюзом качества», расположенным между разработчиками, переводчиками и пользователями.
Если задан файл промежуточного языка, то он будет использоваться в качестве источника исходных строк, но их можно будет редактировать, дабы отшлифовать формулировки. Когда строка на исходном языке будет готова, она станет доступна также и для перевода на остальные языки.
Рецензирование исходных строк¶
При включённом параметре Включить рецензии исходных строк процесс рецензирования может быть применён также к исходным строкам. После включения этого параметра пользователи смогут сообщать о проблемах в исходных строках. Реальный процесс зависит от того, используете ли вы двуязычные или одноязычные форматы.
Для одноязычных форматов рецензирование исходной строки ничем не отличается от обычного рецензирования — когда сообщается о проблеме в исходной строке, она помечается флагом На правку.
Двуязычные форматы не позволяют напрямую редактировать исходные строки (они, как правило, извлекаются непосредственно из исходного кода). В этом случае к строкам, передаваемым переводчиками, прикрепляется метка Исходная строка требует рецензирования. Вы должны просмотреть такие строки и либо отредактировать их в исходном коде, либо удалить эту метку.
Часто задаваемые вопросы¶
Конфигурация¶
Как создать автоматизированный рабочий процесс?¶
Weblate может выполнить все действия, связанные с переводом, в полуавтоматическом режиме. Если вы дадите ему доступ на отправку изменений в ваш репозиторий, переводы смогут в нём появляться без запроса подтверждения, если только не возникнут конфликты слияния.
Настройте свой Git-репозиторий так, чтобы он сообщал Weblate, когда происходят какие-либо изменения; для получения информации о том, как это сделать, смотрите раздел Обработчики уведомлений.
В конфигурации вашего компонента установите URL для отправки, это позволит Weblate’у отправлять изменения в ваш репозиторий.
В конфигурации вашего компонента включите отправку-при-коммите, это заставит 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, при этом вы по-прежнему держите их под контролем версий.
Создайте репозиторий с вашими файлами перевода.
Добавьте его в качестве подмодуля к своему коду:
git submodule add git@example.com:project-translations.git path/to/translations
Свяжите Weblate с этим репозиторием, ему больше не нужен доступ к репозиторию, содержащему ваш исходный код.
Вы можете обновлять основной репозиторий переводами из Weblate, выполняя команду:
git submodule update --remote path/to/translations
Для получения более подробной информации обратитесь к документации по подмодулям git.
Как мне проверить, правильно ли настроен мой Weblate?¶
Weblate включает в себя набор проверок конфигурации, которые можно посмотреть, перейдите по ссылке Отчёт о производительности в интерфейсе администратора, или напрямую откройте адрес /manage/performance/
.
Почему все коммиты от имени Weblate имеют электронную почту <noreply@weblate.org>?¶
Это умолчательное имя коммитящего, настроенное при создании компонента перевода. Вы в любое время можете изменить его в административной зоне сайта.
В любом случае, в качестве пользователя, сделавший перевод всё равно корректно записывается автор коммита (если это поддерживает нижележащая система контроля версий).
См.также
Использование¶
Как мне отрецензировать переводы других переводчиков?¶
В 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
В случае, если вы хотите выполнять такое обновление автоматически, вы можете установить надстройку Обновлять 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
См.также
При доступе к сайту я получаю ошибку «Плохой запрос (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, Gerrit и Subversion) и Mercurial, но вполне возможно дописать поддержку и других систем контроля версий.
Также для доступа к другим системам контроля версий вы можете использовать Удалённые помощники Git в Git’е .
Кроме того, Weblate поддерживает операции, не требующие системы контроля версий, смотрите раздел Локальные файлы.
Примечание
Для родной поддержки других систем контроля версий Weblate требует использования распределённых СКВ, и, вероятно, может быть настроен на работу с любой системой, помимо Git или Mercurial, но кто-то должен эту поддержку реализовать.
Как Weblate сообщает о том, кто какую строку перевёл?¶
Каждое изменение, сделанное через Weblate, фиксируется в системе контроля версий под именем переводчика. Таким образом, каждое изменение имеет надлежащее авторство, и вы можете отследить его с помощью стандартных инструментов СКВ, которые вы используете для кода.
Кроме того, если формат файла перевода это поддерживает, он обновляет заголовки файлов и включает в них имя переводчика.
См.также
Почему Weblate принудительно показывает все PO-файлы в одном дереве?¶
Weblate был спроектирован таким образом, что каждый PO-файл представляется одним компонентом. Это выгодно переводчиками, поскольку они знают, что они переводят на самом деле.
Изменено в версии 4.2: Переводчики могут переводить все компоненты одного проекта на один конкретный язык как единое целое.
Почему Weblate использует такие коды языков, как sr_Latn или zh_Hant?¶
Это коды языков, определяемые RFC 4646, чтобы лучше показать, что это и в самом деле разные языки, вместо ранее ошибочно используемых модификаторов (для вариантов @latin
) или кодов стран (для китайского языка).
Weblate по-прежнему понимает старые коды языков и сопоставляет их с текущими — например, sr@latin
будет обрабатываться как sr_Latn
, а zh@CN
— как zh_Hans
.
См.также
Поддерживаемые форматы файлов¶
Weblate поддерживает большинство форматов перевода, понимаемых translate-toolkit, однако у каждого формата есть свои особенности, поэтому могут возникнуть некоторые проблемы с форматами, которые были протестированы недостаточно тщательно.
Примечание
При выборе формата файла для вашего приложения лучше придерживаться какого-нибудь устоявшегося формата для используемого вами инструментария/платформы. Таким образом, ваши переводчики в дополнение смогут использовать любые инструменты, к которым они привыкли, и вероятность внесения ими своего вклада в ваш проект будет выше.
Двуязычные и одноязычные форматы¶
Поддерживаются как одноязычные, так и двуязычные форматы. Двуязычные форматы хранят в одном файле два языка — исходный язык и перевод (типовые примеры: GNU gettext, XLIFF или Строки Apple iOS). Одноязычные же форматы, напротив, идентифицируют строку по ID, и каждый файл перевода содержит только сопоставление этих ID с одним конкретным языком (например, Строковые ресурсы Android). Некоторые форматы файлов могут использоваться и так, и так; подробности смотрите ниже.
Для правильного использования одноязычных файлов Weblate требует доступа к файлу, содержащему полный список строк для перевода и их «перевод» на исходный язык — этот файл внутри Weblate называется одноязычным базовым файлом, хотя в вашей парадигме наименование этой сущности может отличаться.
Кроме того, этот рабочий процесс может быть расширен с помощью файла промежуточного языка, позволяющего включить в перевод строки, предоставленные разработчиками, но не использованными «как есть» в окончательных строках.
Автоматическое обнаружение¶
Weblate умеет автоматически обнаруживать некоторые широко распространённые форматы файлов, но это обнаружение может навредить вашей производительности и ограничено возможностями, специфичными для данного формата файла (к примеру, автоматическим добавлением новых переводов).
Возможности типов переводов¶
Возможности всех поддерживаемых форматов:
Формат |
Язычность 1 |
Множественные формы 2 |
Комментарии 3 |
Контекст 4 |
Расположение 5 |
Флаги 8 |
Дополнительные состояния 6 |
---|---|---|---|---|---|---|---|
двуязычный |
да |
да |
да |
да |
да 9 |
требуется правка |
|
одноязычный |
да |
да |
да |
да |
да 9 |
требуется правка |
|
оба |
да |
да |
да |
да |
да 10 |
требуется правка, одобрено |
|
оба |
нет |
да |
нет |
нет |
нет |
||
одноязычный |
нет |
да |
нет |
нет |
нет |
||
одноязычный |
да |
да |
нет |
нет |
нет |
||
одноязычный |
нет |
да |
нет |
да |
нет |
||
оба |
да |
да |
нет |
да |
да 10 |
требуется правка |
|
одноязычный |
да |
да 7 |
нет |
нет |
да 10 |
||
двуязычный |
нет |
да |
нет |
нет |
нет |
||
одноязычный |
нет 11 |
да |
нет |
нет |
нет |
||
одноязычный |
нет |
нет |
нет |
нет |
нет |
||
одноязычный |
да |
нет |
нет |
нет |
нет |
||
одноязычный |
да |
нет |
нет |
нет |
нет |
||
одноязычный |
да |
да |
нет |
нет |
нет |
||
одноязычный |
да |
да |
нет |
нет |
нет |
||
одноязычный |
нет |
да |
нет |
нет |
да 10 |
||
оба |
нет |
да |
да |
да |
нет |
требуется правка |
|
одноязычный |
нет |
да |
нет |
нет |
нет |
||
одноязычный |
да |
да |
нет |
нет |
нет |
||
одноязычный |
нет |
нет |
нет |
нет |
нет |
||
одноязычный |
нет |
нет |
нет |
нет |
да 10 |
||
одноязычный |
нет |
да |
нет |
нет |
нет |
||
одноязычный |
нет |
да |
да |
да |
нет |
требуется правка |
|
одноязычный |
нет |
нет |
нет |
нет |
нет |
||
одноязычный |
нет |
нет |
нет |
да |
нет |
||
одноязычный |
нет |
нет |
нет |
нет |
нет |
||
одноязычный |
нет |
нет |
нет |
нет |
нет |
||
одноязычный |
нет |
нет |
нет |
нет |
нет |
||
одноязычный |
нет |
нет |
нет |
нет |
нет |
||
одноязычный |
нет |
нет |
нет |
нет |
нет |
||
двуязычный |
нет |
да |
нет |
нет |
да 10 |
||
одноязычный |
нет |
нет |
нет |
нет |
нет |
- 1
Смотрите раздел Двуязычные и одноязычные форматы
- 2
Множественные формы необходимы для правильной локализации строк, содержащих переменную количества.
- 3
Комментарии могут быть использованы для указания дополнительной информации о строке для перевода.
- 4
Контекст используется для различения одинаковых строк, используемых в разных областях (например, Sun может означать как сокращённое название дня «воскресенье» — «Sunday» — так и название нашей ближайшей звезды).
- 5
Расположение строки в исходном коде может помочь опытным переводчикам понять предназначение этой строки.
- 6
Дополнительные состояния, поддерживаемые форматом файла в дополнение к состояниям «Не переведено» и «Переведено».
- 7
Комментарий XML, размещённый перед элементом
<string>
, трактуется как комментарий разработчика.- 8
Смотрите раздел Настройка поведения с помощью флагов
- 9(1,2)
В качестве флагов используются комментарии типа gettext.
- 10(1,2,3,4,5,6)
Для всех форматов на основе XML флаги извлекаются из нестандартного атрибута
weblate-flags
. Кроме того, флагmax-length:N
поддерживается через атрибутmaxwidth
, как определено в стандарте XLIFF, смотрите раздел Указание флагов перевода.- 11
Множественные формы поддерживаются только для Laravel, который использует для их определения внутристрочный синтаксис, смотрите документ Локализация в Laravel.
Строки только для чтения¶
Добавлено в версии 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-файл gettext |
См.также
Перевод программ с помощью GNU gettext, Перевод документации с помощью Sphinx, Gettext в Википедии, PO-файлы, Обновление переменной ALL_LINGUAS в файле «configure», Настройка вывода gettext, Обновление файла LINGUAS, Создание MO-файлов, Обновлять PO-файлы до соответствия POT (msgmerge)
Одноязычный 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-файл 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 |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
Пусто |
Шаблон для новых переводов |
|
Формат файла |
Файл перевода XLIFF |
Типовые настройки компонента Weblate для одноязычного 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 |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
Пусто |
Формат файла |
Свойства Java (ISO 8859-1) |
файлы mi18n lang¶
Добавлено в версии 4.7.
Формат файла, используемый для локализации JavaScript программой mi18n. Синтаксически он соответствует Файлы свойств Java.
Типовые настройки компонента Weblate |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
Пусто |
Формат файла |
файл mi18n lang |
См.также
mi18n t:formats/properties, Файлы свойств Java, Обновление файлов целевых языков, Форматирование файла свойств Java, Очистка файлов перевода
Файлы свойств GWT¶
Родной формат GWT для переводов.
Файлы свойств GWT обычно используются в качестве одноязычных переводов.
Типовые настройки компонента Weblate |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
Пусто |
Формат файла |
Свойства GWT |
Переводы в INI-файлах¶
Добавлено в версии 4.1.
Формат INI-файла для переводов.
Переводы в INI-файлах обычно используются в качестве одноязычных переводов.
Типовые настройки компонента Weblate |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
Пусто |
Формат файла |
INI-файл |
Переводы в INI-файлах Inno Setup¶
Добавлено в версии 4.1.
Формат INI-файлов Inno Setup для переводов.
Переводы в INI-файлах Inno Setup обычно используются в качестве одноязычных переводов.
Примечание
Единственным заметным отличием от обычных переводов в INI-файлах является поддержка заполнителей %n
и %t
для символов переноса строки и табуляции.
Типовые настройки компонента Weblate |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
Пусто |
Формат файла |
INI-файл Inno Setup |
Примечание
На текущий момент поддерживаются только юникодные файлы (.islu
), файлы в кодировке ANSI (.isl
) в настоящее время не поддерживаются.
См.также
Переводы Joomla¶
Добавлено в версии 2.12.
Родной формат Joomla для переводов.
Переводы Joomla обычно используются в качестве одноязычных переводов.
Типовые настройки компонента Weblate |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
Пусто |
Формат файла |
Языковой файл Joomla |
Файлы .ts Qt Linguist¶
Формат перевода, используемый в приложениях на основе Qt.
Файлы Qt Linguist используются и как двуязычные, так и одноязычные переводы.
Типовые настройки компонента Weblate при использовании формата как двуязычного |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
Пусто |
Шаблон для новых переводов |
|
Формат файла |
Файл перевода Qt Linguist |
Типовые настройки компонента Weblate при использовании формата как одноязычного |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
|
Формат файла |
Файл перевода Qt Linguist |
Строковые ресурсы Android¶
Специфичный для Android формат файла для перевода приложений.
Строковые ресурсы Android являются одноязычными. ref:component-template хранится в другом месте, нежели остальные строки — в res/values/strings.xml
.
Типовые настройки компонента Weblate |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
Пусто |
Формат файла |
Строковый ресурс 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 |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
Пусто |
Формат файла |
Строки 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 |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
|
Формат файла |
Строки 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:
Простые файлы в формате ключ/значение, используемые, например, vue-i18n или react-intl.
Файлы с вложенными ключами.
Переводы 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 |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
Пусто |
Формат файла |
Файл вложенной структуры 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 в основном совместимы, за исключением того, как они работают с формами множественного числа.
Пример файла:
{
"hello": "Hello",
"apple": "I have an apple",
"apple_plural": "I have {{count}} apples",
"apple_negative": "I have no apples"
}
Типовые настройки компонента Weblate |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
Пусто |
Формат файла |
JSON-файл i18next |
JSON-файлы go-i18n¶
Добавлено в версии 4.1.
Переводы go-i18n обычно одноязычные, поэтому рекомендуется указывать базовый файл со строками на (как это чаще всего бывает) английском языке.
Примечание
Weblate поддерживает формат JSON-файла go-i18n версии v1, для плоских JSON-файлов используйте формат JSON-файлы. Формат v2 с хэшами в настоящее время не поддерживается.
Типовые настройки компонента Weblate |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
Пусто |
Формат файла |
JSON -файл go-i18n |
Файл ARB¶
Добавлено в версии 4.1.
Переводы ARB обычно одноязычные, поэтому рекомендуется указывать базовый файл со строками на (как это чаще всего бывает) английском языке.
Типовые настройки компонента Weblate |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
Пусто |
Формат файла |
Файл 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 |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
Пусто |
Формат файла |
JSON-файл WebExtension |
.XML-файлы ресурсов¶
Добавлено в версии 2.3.
В .XML-файле ресурса (.resx) применяется формат одноязычного XML-файла, используемый в приложениях Microsoft .NET. Он взаимозаменяем с форматом .resw, который использует синтаксис, идентичный синтаксису .resx.
Типовые настройки компонента Weblate |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
Пусто |
Формат файла |
Файл ресурсов .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 |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
Пусто |
Шаблон для новых переводов |
|
Формат файла |
Файл CSV |
Типовые настройки компонента Weblate для одноязычного CSV |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
|
Формат файла |
Простой CSV-файл |
См.также
Файлы YAML¶
Добавлено в версии 2.9.
Простые файлы YAML со строковыми ключами и значениями. Также Weblate извлекает строки из списков и словарей.
Пример файла YAML:
weblate:
hello: ""
orangutan": ""
try": ""
thanks": ""
Типовые настройки компонента Weblate |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
Пусто |
Формат файла |
Файл YAML |
См.также
Файлы Ruby YAML¶
Добавлено в версии 2.9.
Файлы YAML локализации Ruby с языком в качестве корневого узла.
Пример файла YAML локализации Ruby:
cs:
weblate:
hello: ""
orangutan: ""
try: ""
thanks: ""
Типовые настройки компонента Weblate |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
Пусто |
Формат файла |
Файл Ruby YAML |
См.также
Файлы DTD¶
Добавлено в версии 2.18.
Пример DTD-файла:
<!ENTITY hello "">
<!ENTITY orangutan "">
<!ENTITY try "">
<!ENTITY thanks "">
Типовые настройки компонента Weblate |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
Пусто |
Формат файла |
Файл DTD |
См.также
Плоские 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 |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
Пусто |
Формат файла |
Плоский 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 |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
|
Формат файла |
Файл RC |
См.также
Файлы метаданных магазина приложений¶
Добавлено в версии 3.5.
Метаданные, используемые для публикации приложений в различных магазинах приложений, могут быть переведены. В настоящее время совместимы следующие инструменты:
Метаданные состоят из нескольких текстовых файлов, которые Weblate представляет для перевода в виде отдельных строк.
Типовые настройки компонента Weblate |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
|
Формат файла |
Файлы метаданных магазина приложений |
Подсказка
Если вы не хотите переводить определённые строки (например, историю изменений), пометьте их «только для чтения» (read-only, смотреть раздел Настройка поведения с помощью флагов). Это также можно автоматизировать с помощью надстройки «Массовая правка».
Файлы субтитров¶
Добавлено в версии 3.7.
Weblate может переводить различные файлы субтитров:
Файл субтитров SubRip (
*.srt
)Файл субтитров MicroDVD (
*.sub
)Файл субтитров Advanced SubStation Alpha (
*.ass
)Файл субтитров SubStation Alpha (
*.ssa
)
Типовые настройки компонента Weblate |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
|
Шаблон для новых переводов |
|
Формат файла |
Файл субтитров SubRip |
См.также
Excel Open XML¶
Добавлено в версии 3.2.
Можно импортировать и экспортировать файлы Excel Open XML (.xlsx).
Загружая для перевода файлы XLSX, имейте в виду, что учитывается только активный рабочий лист, и должны быть хотя бы колонки с названием source
(содержащая исходную строку) и target
(содержащая перевод). Дополнительно может быть колонка с названием context
(содержащая путь к контексту строки перевода). Если вы используете скачанный XLSX для экспорта переводов в рабочую книгу Excel, вы уже получите файл в правильном формате.
Файлы HTML¶
Добавлено в версии 4.1.
Примечание
Поддержка этого формата в настоящее время находится в бета-режиме, приветствуются обратная связь от тестирования.
Переводимое содержимое извлекается из HTML-файлов и предлагается для перевода.
См.также
Текстовые файлы¶
Добавлено в версии 4.6.
Примечание
Поддержка этого формата в настоящее время находится в бета-режиме, приветствуются обратная связь от тестирования.
Переводимое содержимое извлекается из обычных текстовых файлов и предлагается для перевода. Каждый абзац переводится как отдельная строка.
Существует три варианта этого формата:
Обычный текстовый файл
Текстовый файл DokuWiki
Текстовый файл MediaWiki
См.также
Формат OpenDocument¶
Добавлено в версии 4.1.
Примечание
Поддержка этого формата в настоящее время находится в бета-режиме, приветствуются обратная связь от тестирования.
Переводимое содержимое извлекается из файлов OpenDocument и предлагается для перевода.
См.также
Формат IDML¶
Добавлено в версии 4.1.
Примечание
Поддержка этого формата в настоящее время находится в бета-режиме, приветствуются обратная связь от тестирования.
Переводимое содержимое извлекается из файлов языка разметки Adobe InDesign и предлагается для перевода.
Формат TermBase eXchange¶
Добавлено в версии 4.5.
TBX — это XML-формат для обмена терминологическими данными.
Типовые настройки компонента Weblate |
|
---|---|
Маска файла |
|
Одноязычный базовый файл |
Пусто |
Шаблон для новых переводов |
Пусто |
Формат файла |
Файл TermBase eXchange |
См.также
Поддержка других форматов¶
Большинство форматов, которые поддерживают сериализацию и которые поддерживает translate-toolkit, могут поддерживаться с лёгкостью, но они (пока) ни как не тестировались. В большинстве случаев, чтобы скрыть различия в поведении различных хранилищ translate-toolkit, в Weblate приходится добавлять тонкую прослойку.
Чтобы добавить поддержку нового формата, предпочтительный подход состоит в том, чтобы сначала реализовать его поддержку в translate-toolkit.
Интеграция с системой контроля версий¶
В настоящее время Weblate в качестве систем контроля версий поддерживает Git (с расширенной поддержкой GitHub, 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:

SSH-ключ Weblate¶
Открытый ключ Weblate виден всем пользователям, просматривающим страницу О Weblate.
Администраторы могут сгенерировать или посмотреть публичный ключ, который в настоящее время использует Weblate (из блока SSH-ключи) на странице входа в интерфейс администратора.
Примечание
Соответствующий закрытый SSH-ключ в настоящее время не может быть запаролен, поэтому убедитесь, что он хорошо защищён.
Подсказка
Сделайте резервную копию сгенерированного закрытого SSH-ключа Weblate.
Проверка SSH-ключей сервера¶
Weblate автоматически сохраняет для дальнейшего использования SSH-ключи серверов при первом обращении к ним.
В случае, если вы хотите, подтвердить подлинность отпечатков ключей до первого подключения к репозиторию, добавьте SSH-ключ тех серверов, к которым вы собираетесь подключаться, через пункт Добавить ключ хоста, в том же разделе интерфейса администратора. Введите имя хоста, к которому вы собираетесь получить доступ (например, gitlab.com
), и нажмите Подтвердить. После этого вы сможете убедится, что отпечаток этого ключа соответствует тому серверу, который вы добавляете.
Добавленные ключи и их отпечатки будут отображаться в сообщении о подтверждении:

Репозитории GitHub¶
Доступ по SSH возможен (смотрите раздел. Репозитории по SSH), но в случае, если вам необходимо получить доступ к более чем одному репозиторию, вы столкнётесь с ограничением GitHub’а по разрешённому использованию ключей SSH (поскольку один ключ может быть использован только один раз).
В случае, если ветка для отправки не задана, проект форкается и изменения отправляются через форк. В случае если она задана, изменения отправляются в вышестоящий репозиторий и выбранную ветку.
Для небольших проектов используйте HTTPS-аутентификацию с персональным токеном доступа и вашей GitHub’овской учётной записью, смотрите подробности в документации GitHub’а: Создание токена доступа для использования из командной строки.
Для более крупных конфигураций обычно лучше создать для Weblate специального пользователя, назначить ему открытый SSH-ключ, сгенерированный Weblate (смотрите раздел SSH-ключ Weblate), и предоставить ему доступ ко всем репозиториям, которые вы собираетесь переводить. Этот подход также используется и наоблачном хостинге Weblate, для него на GitHub есть специальный пользователь weblate.
Внутренние URL-адреса Weblate¶
Совместное использование одной установки репозитория различными компонентами, можно ссылаясь на его размещение как weblate://проект/компонент
в других (связанных) компонентах. В таком случае, ссылающиеся компоненты используют конфигурацию репозитория VCS главного (ссылочного) компонента.
Предупреждение
Удаление главного компонента также удаляет связанные компоненты.
При создании компонента, если Weblate находит другой компонент с таким же репозиторием, то он автоматически заменяет его на разделяемый репозиторий с внутренним URL-адресом. Вы можете переопределить это позже, на последнем этапе настройки компонента.
Зачем это нужно:
Экономия дискового пространства на сервере: хранится только одна копия репозитория.
Ускорение обновлений: обновляется только один репозиторий.
Существует только один экспортируемый репозиторий с переводами Weblate (смотрите раздел Экспортер Git).
Некоторые надстройки могут работать с несколькими компонентами, совместно использующими один репозиторий, например, «Уплотнение 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¶
См.также
Для получения информации о том, как получить доступ к различным типам репозиториев, смотрите раздел Доступ к репозиториям.
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¶
Добавлено в версии 2.3.
Это просто добавляет тонкий слой логики поверх Git с помощью API GitHub’а, что позволяет отправлять изменения в переводе в виде запросов на извлечение вместо того, чтобы выполнять push
непосредственно в репозиторий.
Git отправляет изменения непосредственно в репозиторий, в то время как GitHub создаёт запросы на извлечение. Для простого доступа к Git-репозиториям последние не нужны.
См.также
Отправка изменений в GitHub в виде запросов на извлечение¶
Если вы не хотите отправлять переводы непосредственно в репозиторий GitHub’а, их можно отправить в виде одного или нескольких запросов на извлечение.
Чтобы это заработало, нужно будет настроить учётные данные API.
См.также
GitLab¶
Добавлено в версии 3.9.
Это просто добавляет тонкий слой логики поверх Git с помощью API GitLab’а, что позволяет отправлять изменения в переводе в виде запросов на слияние вместо того, чтобы выполнять push
непосредственно в репозиторий.
Нет необходимости использовать его для доступа к Git-репозиториям, обычный Git работает так же, единственная разница заключается в том, как выполняется отправка изменений в репозиторий. С помощью Git изменения отправляются непосредственно в репозиторий, в то время как GitLab создаёт запрос на слияние.
См.также
Отправка изменений в GitLab в виде запросов на слияние¶
Если вы не хотите отправлять переводы непосредственно в репозиторий GitLab, их можно отправить в виде одного или нескольких запросов на слияние.
Чтобы это заработало, нужно будет настроить учётные данные API.
См.также
Pagure¶
Добавлено в версии 4.3.2.
Это просто добавляет тонкий слой логики поверх Git с помощью API Pagure, что позволяет отправлять изменения в переводе в виде запросов на слияние вместо того, чтобы выполнять push
непосредственно в репозиторий.
Нет необходимости использовать его для доступа к Git-репозиториям, обычный Git работает так же, единственная разница заключается в том, как выполняется отправка изменений в репозиторий. С помощью Git изменения отправляются непосредственно в репозиторий, в то время как Pagure создаёт запрос на слияние.
См.также
Отправка изменений в Pagure в виде запросов на слияние¶
Если вы не хотите отправлять переводы непосредственно в репозиторий Pagure, их можно отправить в виде одного или нескольких запросов на слияние.
Чтобы это заработало, нужно будет настроить учётные данные API.
См.также
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
См.также
Локальные файлы¶
Добавлено в версии 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 интерфейс веб-браузера.
- Заголовки запроса
Authorization – optional token to authenticate as
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 – при превышении количества запросов из-за ограничения на количество запросов
Примеры аутентификации¶
Пример запроса:
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.
О состоянии ограничения частоты запросов сообщается в следующих заголовках:
|
Ограничение на максимальное число выполняемых запросов |
|
Оставшийся лимит запросов |
|
Количество секунд до сброса окна ограничения количества запросов |
Изменено в версии 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) – Активен ли пользователь? (необязательный)
- GET /api/users/(str: username)/¶
Возвращает информацию о пользователях.
- Параметры
username (string) – Имя пользователя
- JSON -объект ответа
username (string) – имя пользователя
full_name (string) – полное имя пользователя
email (string) – электронная почта пользователя
is_superuser (boolean) – является ли пользователь суперпользователем
is_active (boolean) – активен ли пользователь
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, "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) – активен ли пользователь
date_joined (string) – дата создания пользователя
- PATCH /api/users/(str: username)/¶
Изменяет параметры пользователя.
- Параметры
username (string) – Имя пользователя
- JSON -объект ответа
username (string) – имя пользователя
full_name (string) – полное имя пользователя
email (string) – электронная почта пользователя
is_superuser (boolean) – является ли пользователь суперпользователем
is_active (boolean) – активен ли пользователь
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) – Группа языков, выбранная из предложенных вариантов
- GET /api/groups/(int: id)/¶
Возвращает информацию о группе.
- Параметры
id (int) – Идентификатор группы
- JSON -объект ответа
name (string) – название группы
project_selection (int) – целое число, соответствующее группе проектов
language_selection (int) – целое число, соответствующее группе языков
roles (array) – ссылка на связанные роли; смотрите описание
GET /api/roles/(int:id)/
projects (array) – ссылка на связанные проекты; смотрите описание
GET /api/projects/(string:project)/
components (array) – ссылка на связанные компоненты; смотрите описание
GET /api/components/(string:project)/(string:component)/
componentlist (array) – ссылка на связанный список компонентов; смотрите описание
GET /api/component-lists/(str:slug)/
Пример данных в JSON:
{ "name": "Guests", "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 -объект ответа
name (string) – название проекта
slug (string) – плашка проекта
web (string) – веб-сайт проекта
components_list_url (string) – URL-адрес списка компонентов; смотрите описание
GET /api/projects/(string:project)/components/
repository_url (string) – URL-адрес статуса репозитория; смотрите описание
GET /api/projects/(string:project)/repository/
changes_list_url (string) – URL-адрес списка изменений; смотрите описание
GET /api/projects/(string:project)/changes/
translation_review (boolean) – Включить рецензии
source_review (boolean) – Включить рецензии исходных строк
set_language_team (boolean) – Задать заголовок «Language-Team»
enable_hooks (boolean) – Включить обработчики
instructions (string) – Инструкции для переводчиков
language_aliases (string) – Псевдонимы языка
Пример данных в 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 -объект ответа
results (array) – массив объектов компонентов; смотрите описание
GET /api/components/(string:project)/(string:component)/
- 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 -объект ответа
result (object) – Созданный объект компонента; смотрите описание
GET /api/components/(string:project)/(string:component)/
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", "git_export": "", "license": "", "license_url": "", "name": "Weblate", "slug": "weblate", "repo": "file:///home/nijel/work/weblate-hello", "template": "", "new_base": "", "vcs": "git" }' \ -H "Content-Type: application/json" \ -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 { "branch": "main", "file_format": "po", "filemask": "po/*.po", "git_export": "", "license": "", "license_url": "", "name": "Weblate", "slug": "weblate", "repo": "file:///home/nijel/work/weblate-hello", "template": "", "new_base": "", "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) – процент переведённых слов
Компоненты¶
- GET /api/components/¶
Возвращает список компонентов перевода.
См.также
Атрибуты объекта-компонента описываются в разделе
GET /api/components/(string:project)/(string:component)/
.
- GET /api/components/(string: project)/(string: component)/¶
Возвращает информацию о компоненте перевода.
- Параметры
project (string) – URL-плашка проекта
component (string) – URL-плашка компонента
- JSON -объект ответа
project (object) – проект перевода; смотрите описание
GET /api/projects/(string:project)/
name (string) – Название компонента
slug (string) – Плашка компонента
vcs (string) – Система контроля версий
repo (string) – Репозиторий исходного кода
git_export (string) – URL экспортированного репозитория
branch (string) – Ветка репозитория
push_branch (string) – Ветка для отправки
filemask (string) – Маска файла
template (string) – Одноязычный базовый файл
edit_template (string) – Правка базового файла
intermediate (string) – Файл промежуточного языка
new_base (string) – Шаблон для новых переводов
file_format (string) – Формат файла
license (string) – Лицензия перевода
agreement (string) – Соглашение участника
new_lang (string) – Добавление нового перевода
language_code_style (string) – Стиль кода языка
source_language (object) – объект исходного языка; смотрите описание
GET /api/languages/(string:language)/
push (string) – URL для отправки в репозиторий
check_flags (string) – Флаги перевода
priority (string) – Приоритет
enforced_checks (string) – Принудительные проверки
restricted (string) – Ограниченный доступ
repoweb (string) – Просмотрщик репозитория
report_source_bugs (string) – Адрес для сообщения об ошибке в исходной строке
merge_style (string) – Стиль слияния
commit_message (string) – Сообщения коммита, добавления, удаления, слияния и сообщения надстроек
add_message (string) – Сообщения коммита, добавления, удаления, слияния и сообщения надстроек
delete_message (string) – Сообщения коммита, добавления, удаления, слияния и сообщения надстроек
merge_message (string) – Сообщения коммита, добавления, удаления, слияния и сообщения надстроек
addon_message (string) – Сообщения коммита, добавления, удаления, слияния и сообщения надстроек
allow_translation_propagation (string) – Разрешить распространение перевода
enable_suggestions (string) – Включить предложения
suggestion_voting (string) – Голосование по предложению
suggestion_autoaccept (string) – Автоматическое принятие предложений
push_on_commit (string) – Отправлять при коммите
commit_pending_age (string) – Возраст изменений для коммита
auto_lock_error (string) – Блокировать при ошибке
language_regex (string) – Языковой фильтр
variant_regex (string) – Регулярное выражение вариантов
repository_url (string) – URL-адрес статуса репозитория; смотрите описание
GET /api/components/(string:project)/(string:component)/repository/
translations_url (string) – URL-адрес списка переводов; смотрите описание
GET /api/components/(string:project)/(string:component)/translations/
lock_url (string) – URL-адрес статуса блокировки; смотрите описание
GET /api/components/(string:project)/(string:component)/lock/
changes_list_url (string) – URL-адрес списка изменений; смотрите описание
GET /api/components/(string:project)/(string:component)/changes/
task_url (string) – URL фоновой задачи (если такая есть); просмотрите
GET /api/tasks/(str:uuid)/
Пример данных в 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)/screenshots/¶
Возвращает список снимков экрана компонента.
- Параметры
project (string) – URL-плашка проекта
component (string) – URL-плашка компонента
- JSON -объект ответа
results (array) – массив снимков экрана компонента; смотрите описание
GET /api/screenshots/(int:id)/
- 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 -объект ответа
results (array) – массив объектов перевода; смотрите описание
GET /api/translations/(string:project)/(string:component)/(string:language)/
- POST /api/components/(string: project)/(string: component)/translations/¶
Создаёт новый перевод в указанном компоненте.
- Параметры
project (string) – URL-плашка проекта
component (string) – URL-плашка компонента
- JSON -объект запроса
language_code (string) – код языка перевода; смотрите описание
GET /api/languages/(string:language)/
- 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 -объект ответа
results (array) – массив объектов статистики перевода; смотрите описание
GET /api/translations/(string:project)/(string:component)/(string:language)/statistics/
- GET /api/components/(string: project)/(string: component)/links/¶
Возвращает проекты, связанные с компонентом.
Добавлено в версии 4.5.
- Параметры
project (string) – URL-плашка проекта
component (string) – URL-плашка компонента
- JSON -объект ответа
projects (array) – связанные проекты; смотрите описание
GET /api/projects/(string:project)/
- POST /api/components/(string: project)/(string: component)/links/¶
Связывает проект с компонентом.
Добавлено в версии 4.5.
- Параметры
project (string) – URL-плашка проекта
component (string) – URL-плашка компонента
- Параметры формы
string project_slug – Плашка проекта
- DELETE /api/components/(string: project)/(string: component)/links/(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) – Название единицы перевода
value (string) – Значение единицы перевода
См.также
- 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 conflicts – Как поступать с конфликтами (
ignore
,replace-translated
илиreplace-approved
)file file – Загруженный файл
string email – E-mail автора
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) – состояние единицы перевода: 0 - не переведено, 10 - на правку, 20 - переведено, 30 - одобрено, 100 - только для чтения
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)/
- PATCH /api/units/(int: id)/¶
Добавлено в версии 4.3.
Выполняет частичное обновление единицы перевода.
- Параметры
id (int) – Идентификатор единицы перевода
- JSON -объект запроса
state (int) – состояние единицы перевода: 0 - не переведено, 10 - на правку, 20 - переведено, 30 - одобрено (требуется включить рецензирование, просмотрите раздел Выделенные рецензенты)
target (array) – целевая строка
explanation (string) – Пояснения для строки, доступные для данной единицы перевода, смотрите раздел Дополнительная информация об исходных строках
extra_flags (string) – Дополнительные флаги строки, доступны на исходных единицах перевода, смотрите раздел Настройка поведения с помощью флагов
- PUT /api/units/(int: id)/¶
Добавлено в версии 4.3.
Выполняет полное обновление единицы перевода.
- Параметры
id (int) – Идентификатор единицы перевода
- JSON -объект запроса
state (int) – состояние единицы перевода: 0 - не переведено, 10 - на правку, 20 - переведено, 30 - одобрено (требуется включить рецензирование, просмотрите раздел Выделенные рецензенты)
target (array) – целевая строка
explanation (string) – Пояснения для строки, доступные для данной единицы перевода, смотрите раздел Дополнительная информация об исходных строках
extra_flags (string) – Дополнительные флаги строки, доступны на исходных единицах перевода, смотрите раздел Настройка поведения с помощью флагов
- 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/github/extending-github/about-webhooks
Общая информация о веб-обработчиках GitHub
ENABLE_HOOKS
Для включения обработчиков для всего Weblate
- POST /hooks/gitlab/¶
Специальный обработчик для обработки уведомлений GitLab и автоматического обновления соответствующих компонентов.
См.также
- Автоматическое получение изменений из GitLab’а
Инструкция по настройке интеграции с GitLab
- https://docs.gitlab.com/ce/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.
См.также
Клиент 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¶
Файл, из которого читается содержимое, если не указан, чтение будет производиться со стандартного потока ввода.
Подсказка
Более подробную информацию по выполнению конкретных команд можно получить с помощью параметра --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:
$ 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)¶
-
Выполняет единичный GET-вызов API.
wlc.config
¶
WeblateConfig
¶
Инструкции по настройке¶
Установка Weblate¶
Установка с помощью Docker’а¶
С помощью докеризированного развёртывания Weblate вы можете обзавестись своим личный экземпляр Weblate за считаные секунды. Все зависимости Weblate уже включены в образ. В качестве базы данных по умолчанию настроена PostgreSQL.
Требования к оборудованию¶
Weblate должен без проблем работать на любом современном оборудовании, ниже приведена минимальная конфигурация, необходимая для запуска Weblate на одном сервере (сам Weblate, база данных и веб-сервер):
2 ГБ оперативной памяти
2-х ядерный процессор
1 ГБ дискового пространства
Чем больше памяти, тем лучше — она используется для кэширования на всех уровнях (на уровне файловой системы, уровне базы данных и уровне Weblate).
Множество одновременно работающих пользователей увеличивают количество необходимых ядер процессора. Для сотен компонентов перевода рекомендуется не менее 4 Гб оперативной памяти.
Типовое использование дискового пространства базой данной находится в районе 300MB на 1 миллион хранимых слов. Пространство необходимое для клонирования репозиториев разнится, хотя Weblate и пытается поддерживать их размер минимальным, делая поверхностные (shallow) копии.
Примечание
Фактические требования к вашей установке Weblate сильно зависят от размера управляемых ею переводов.
Установка¶
В следующих примерах предполагается, что у вас есть рабочее окружение Docker’а, в котором установлен docker-compose
. Для получения конкретных инструкций ознакомьтесь с документацией к Docker’у.
Склонируйте репозиторий weblate-docker:
git clone https://github.com/WeblateOrg/docker-compose.git weblate-docker cd weblate-docker
Создайте файл
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
.Запустите контейнеры 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 с поддержкой 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 довольно болезненно и в большинстве случаев не приносит особых преимуществ.
Вы можете сделать это, оставаясь с существующим docker-compose и просто извлекая последние образы с последующим перезапуском контейнера:
docker-compose stop
docker-compose pull
docker-compose up
При первом запуске база данных Weblate должна быть перенесена автоматически, надобности в дополнительных ручных действиях не возникнет.
Примечание
Обновления через версию 3.0 Weblate не поддерживает. Если вы используете версию 2.x и хотите обновиться до версии 3.x, сначала выполните обновление до последней версии 3.0.1-x (на момент написания этого документа это образ 3.0.1-7
), которая выполнит миграцию, а затем продолжите обновление до более новых версий.
Также вы можете захотеть обновить репозиторий docker-compose
, хотя в большинстве случаев необходимости в этом нет. Пожалуйста, остерегайтесь в этом случае изменений версии PostgreSQL, поскольку обновление базы данных является не простым делом, более подробную информацию смотрите в этом замечании на GitHub’е.
Вход от имени администратора¶
После настройки контейнера вы можете войти в систему под пользователем admin с паролем, указанным в переменной окружения WEBLATE_ADMIN_PASSWORD
, или случайным паролем, сгенерированным при первом запуске, если он не был установлен явно.
Для сброса пароля пользователя admin перезапустите контейнер с переменной WEBLATE_ADMIN_PASSWORD
, установленной в новое значение пароля.
Количество процессов и потребление памяти¶
Количество рабочих процессов для uWSGI и Celery определяется автоматически на основе количества ЦП. Это хорошо подходит для большинства облачных виртуальных машин, так как они обычно имеют мало процессоров и хороший объём памяти.
Если на вашей машине много процессорных ядер и возникают проблемы, вызванные нехваткой памяти, то попробуйте уменьшить количество рабочих процессов:
environment:
WEBLATE_WORKERS: 2
Вы также можете точно настроить отдельные категории процессов:
environment:
UWSGI_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_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_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_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
См.также
- 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
.См.также
- WEBLATE_GITHUB_TOKEN¶
Добавлено в версии 4.3.
Настраивает GitHub’овский токен персонального доступа для GitHub’овских запросов на извлечение через API, изменяя параметр
GITHUB_TOKEN
.См.также
- 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_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_ENABLE_AVATARS¶
Добавлено в версии 4.6.1.
Настраивает параметр
ENABLE_AVATARS
.
Параметры машинного перевода¶
- 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_GOOGLE_KEY¶
Включает машинный перевод от Google Translate и устанавливает параметр
MT_GOOGLE_KEY
- 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
Параметры аутентификации¶
- 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¶
- 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)
См.также
- WEBLATE_SOCIAL_AUTH_GITHUB_KEY¶
- WEBLATE_SOCIAL_AUTH_GITHUB_SECRET¶
Включает аутентификацию через GitHub.
- WEBLATE_SOCIAL_AUTH_BITBUCKET_KEY¶
- WEBLATE_SOCIAL_AUTH_BITBUCKET_SECRET¶
Включает аутентификацию через Bitbucket.
- WEBLATE_SOCIAL_AUTH_FACEBOOK_KEY¶
- WEBLATE_SOCIAL_AUTH_FACEBOOK_SECRET¶
Включает Facebook OAuth 2.
- 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.
- WEBLATE_SOCIAL_AUTH_GITLAB_KEY¶
- WEBLATE_SOCIAL_AUTH_GITLAB_SECRET¶
- WEBLATE_SOCIAL_AUTH_GITLAB_API_URL¶
Включает GitLab OAuth 2.
- WEBLATE_SOCIAL_AUTH_AZUREAD_OAUTH2_KEY¶
- WEBLATE_SOCIAL_AUTH_AZUREAD_OAUTH2_SECRET¶
Включает аутентификацию через Azure Active Directory, смотрите раздел Microsoft Azure Active Directory.
- 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.
- 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, установив следующие переменные в любое значение.
- WEBLATE_SOCIAL_AUTH_FEDORA¶
- WEBLATE_SOCIAL_AUTH_OPENSUSE¶
- WEBLATE_SOCIAL_AUTH_UBUNTU¶
Самоподписанные ключи 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.
Настройки базы данных 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.
Параметры резервного копирования базы данных¶
- 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.
См.также
- WEBLATE_EMAIL_HOST_USER¶
Пользователь для аутентификации по электронной почте.
См.также
- WEBLATE_EMAIL_HOST_PASSWORD¶
Пароль для аутентификации по электронной почте.
См.также
- WEBLATE_EMAIL_HOST_PASSWORD_FILE¶
Пароль для аутентификации по электронной почте.
См.также
- WEBLATE_EMAIL_USE_SSL¶
Использовать ли неявное TLS (безопасное) соединение при общении с сервером SMTP. В большей части документации по электронной почте этот тип TLS-соединения называется SSL. Он обычно используется на 465-м порту. Если у вас возникли проблемы, попробуйте включить явный TLS параметром
WEBLATE_EMAIL_USE_TLS
.См.также
- WEBLATE_EMAIL_USE_TLS¶
Использовать ли TLS (безопасное) соединение при общении с сервером SMTP. Он используется для явных TLS-соединений, обычно на портах 587 или 25. Если ваши соединения зависают, попробуйте включить неявный TLS параметром
WEBLATE_EMAIL_USE_SSL
.См.также
- WEBLATE_EMAIL_BACKEND¶
Настраивает бэкенд Django, используемый для отправки сообщений электронной почты.
Интеграция с сайтом¶
- WEBLATE_GET_HELP_URL¶
Настраивает параметр
GET_HELP_URL
.
- WEBLATE_STATUS_URL¶
Настраивает параметр
STATUS_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
, иUWSGI_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
- UWSGI_WORKERS¶
Настраивает количество выполняемых рабочих процессов uWSGI.
По умолчанию это означает
WEBLATE_WORKERS
.Пример:
environment: UWSGI_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.
When creating the volumes manually, the directories should be owned by UID 1000 as that is user used inside the container.
См.также
Дальнейшая настройка¶
Вы можете и дальше настраивать установку 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) и добавить его в контейнер 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, скорее всего, через пользовательские файлы настроек.
См.также
Выбор вашей машины — локальные или облачные провайдеры¶
С помощью Docker Machine вы можете развернуть Weblate как на локальной машине, так и на любом большом количестве облачных развёртываний, например на Amazon AWS, Greenhost и на многих других провайдерах.
Установка на 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 \
libcairo-dev gir1.2-pango-1.0 libgirepository1.0-dev libacl1-dev libssl-dev \
build-essential python3-gdbm python3-dev python3-pip python3-virtualenv virtualenv git
Установите желаемые необязательные зависимости в зависимости от функций, которые вы собираетесь использовать (смотрите раздел Необязательные зависимости):
apt install tesseract-ocr libtesseract-dev libleptonica-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
# Caching backend: Redis
apt install redis-server
# Database server: PostgreSQL
apt install postgresql postgresql-contrib
# SMTP server
apt install exim4
Модули Python¶
Подсказка
Для установки Weblate мы используем виртуальное окружение, предоставляемое пакетом virtualenv, чтобы отделить Weblate от вашей системы. Если вы не знакомы с этим понятием, обратитесь к документации пакета.
Создайте виртуальное окружение для Weblate:
virtualenv --python=python3 ~/weblate-env
Активируйте виртуальное окружение для Weblate:
. ~/weblate-env/bin/activate
Установите Weblate, включая все его зависимости:
pip install Weblate
Установите драйвер базы данных:
pip install psycopg2-binary
Установите желаемые необязательные зависимости в зависимости от функций, которые вы собираетесь использовать (некоторые из них могут потребовать дополнительных системных библиотек, проверьте раздел Необязательные зависимости):
pip install ruamel.yaml aeidon boto3 zeep chardet tesserocr
Настройка Weblate¶
Примечание
Следующие шаги подразумевают, что виртуальное окружение, используемое Weblate’ом, активно (активировать его можно командой . ~/weblate-env/bin/activate
). В случае, если это не так, вам придётся указывать полный путь к команде weblate: ~/weblate-env/bin/weblate
.
Скопируйте файл
~/weblate-env/lib/python3.7/site-packages/weblate/settings_example.py
в~/weblate-env/lib/python3.7/site-packages/weblate/settings.py
.По своему усмотрению подкорректируйте значения в новом файле
settings.py
. Для тестирования вы можете использовать поставляемый пример, но для рабочей среды вы захотите внести в него изменения, смотрите раздел Изменение конфигурации под свои нужды.Создайте базу данных и её структуру для Weblate (пример настройки использует PostgreSQL, для установки в рабочую среду ознакомьтесь разделом Настройка базы данных для Weblate):
weblate migrate
Создайте учётную запись администратора и скопируйте сгенерированный ей пароль в буфер обмена, также сохраните его для дальнейшего использования:
weblate createadmin
Соберите статические файлы для веб-сервера (смотрите разделы Запуск сервера и Обслуживание статических файлов):
weblate collectstatic
Сожмите файлы JavaScript и CSS (необязательно, смотрите раздел Сжатие клиентских ресурсов):
weblate compress
Запустите рабочие процессы Celery. Для целей разработки это делать не обязательно, но настоятельно рекомендуется. Дополнительную информацию смотрите в разделе Фоновые задачи с использованием Celery:
~/weblate-env/lib/python3.7/site-packages/weblate/examples/celery start
Запустите сервер разработки (шаги для запуска рабочего сервера смотрите в разделе Запуск сервера):
weblate runserver
После установки¶
Поздравляем, теперь ваш сервер Weblate запущен и вы можете начать его использовать.
Теперь вы можете получить доступ к Weblate по адресу
http://localhost:8000/
.Войдите в систему с учётными данными администратора, полученными во время установки, или зарегистрируйтесь в качестве нового пользователя.
Теперь при помощи команды weblate и когда активно виртуальное окружение Weblate вы можете запускать его команды, смотрите раздел Команды управления.
Остановить тестовый сервер можно комбинацией Ctrl+C.
Просмотрите список вероятных проблем с вашей установкой или по адресу
/manage/performance/
в URL, или с помощью команды weblate check --deploy; смотреть также раздел Рабочая среда.
Добавление перевода¶
Откройте интерфейс администратора (
http://localhost:8000/create/project/
) и создайте проект, который вы хотите перевести. Подробнее смотрите в разделе Настройки проекта.Всё, что вам нужно здесь указать — это название проекта и его веб-сайт.
Создайте компонент, который является реальным объектом для перевода — он указывает на репозиторий системы контроля версий и задаёт файлы для перевода. Подробнее смотрите в разделе Настройки компонента.
Здесь важны следующие поля: название компонента, адрес репозитория системы контроля версий и маска для поиска переводимых файлов. Weblate поддерживает широкий спектр форматов, включая PO-файлы gettext, строки ресурсов Android’а, строки свойств iOS, файлы свойств Java или Qt Linguist, подробнее смотрите в разделе Поддерживаемые форматы файлов.
После того, как вышеперечисленные действия будут завершены (это может быть довольно длительный процесс в зависимости от размера вашего репозитория системы контроля версий и количества сообщений для перевода), вы сможете начать перевод.
Установка на 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 \
cairo-devel typelib-1_0-Pango-1_0 gobject-introspection-devel libacl-devel \
python3-pip python3-virtualenv python3-devel git
Установите желаемые необязательные зависимости в зависимости от функций, которые вы собираетесь использовать (смотрите раздел Необязательные зависимости):
zypper install tesseract-ocr tesseract-devel leptonica-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 от вашей системы. Если вы не знакомы с этим понятием, обратитесь к документации пакета.
Создайте виртуальное окружение для Weblate:
virtualenv --python=python3 ~/weblate-env
Активируйте виртуальное окружение для Weblate:
. ~/weblate-env/bin/activate
Установите Weblate, включая все его зависимости:
pip install Weblate
Установите драйвер базы данных:
pip install psycopg2-binary
Установите желаемые необязательные зависимости в зависимости от функций, которые вы собираетесь использовать (некоторые из них могут потребовать дополнительных системных библиотек, проверьте раздел Необязательные зависимости):
pip install ruamel.yaml aeidon boto3 zeep chardet tesserocr
Настройка Weblate¶
Примечание
Следующие шаги подразумевают, что виртуальное окружение, используемое Weblate’ом, активно (активировать его можно командой . ~/weblate-env/bin/activate
). В случае, если это не так, вам придётся указывать полный путь к команде weblate: ~/weblate-env/bin/weblate
.
Скопируйте файл
~/weblate-env/lib/python3.7/site-packages/weblate/settings_example.py
в~/weblate-env/lib/python3.7/site-packages/weblate/settings.py
.По своему усмотрению подкорректируйте значения в новом файле
settings.py
. Для тестирования вы можете использовать поставляемый пример, но для рабочей среды вы захотите внести в него изменения, смотрите раздел Изменение конфигурации под свои нужды.Создайте базу данных и её структуру для Weblate (пример настройки использует PostgreSQL, для установки в рабочую среду ознакомьтесь разделом Настройка базы данных для Weblate):
weblate migrate
Создайте учётную запись администратора и скопируйте сгенерированный ей пароль в буфер обмена, также сохраните его для дальнейшего использования:
weblate createadmin
Соберите статические файлы для веб-сервера (смотрите разделы Запуск сервера и Обслуживание статических файлов):
weblate collectstatic
Сожмите файлы JavaScript и CSS (необязательно, смотрите раздел Сжатие клиентских ресурсов):
weblate compress
Запустите рабочие процессы Celery. Для целей разработки это делать не обязательно, но настоятельно рекомендуется. Дополнительную информацию смотрите в разделе Фоновые задачи с использованием Celery:
~/weblate-env/lib/python3.7/site-packages/weblate/examples/celery start
Запустите сервер разработки (шаги для запуска рабочего сервера смотрите в разделе Запуск сервера):
weblate runserver
После установки¶
Поздравляем, теперь ваш сервер Weblate запущен и вы можете начать его использовать.
Теперь вы можете получить доступ к Weblate по адресу
http://localhost:8000/
.Войдите в систему с учётными данными администратора, полученными во время установки, или зарегистрируйтесь в качестве нового пользователя.
Теперь при помощи команды weblate и когда активно виртуальное окружение Weblate вы можете запускать его команды, смотрите раздел Команды управления.
Остановить тестовый сервер можно комбинацией Ctrl+C.
Просмотрите список вероятных проблем с вашей установкой или по адресу
/manage/performance/
в URL, или с помощью команды weblate check --deploy; смотреть также раздел Рабочая среда.
Добавление перевода¶
Откройте интерфейс администратора (
http://localhost:8000/create/project/
) и создайте проект, который вы хотите перевести. Подробнее смотрите в разделе Настройки проекта.Всё, что вам нужно здесь указать — это название проекта и его веб-сайт.
Создайте компонент, который является реальным объектом для перевода — он указывает на репозиторий системы контроля версий и задаёт файлы для перевода. Подробнее смотрите в разделе Настройки компонента.
Здесь важны следующие поля: название компонента, адрес репозитория системы контроля версий и маска для поиска переводимых файлов. Weblate поддерживает широкий спектр форматов, включая PO-файлы gettext, строки ресурсов Android’а, строки свойств iOS, файлы свойств Java или Qt Linguist, подробнее смотрите в разделе Поддерживаемые форматы файлов.
После того, как вышеперечисленные действия будут завершены (это может быть довольно длительный процесс в зависимости от размера вашего репозитория системы контроля версий и количества сообщений для перевода), вы сможете начать перевод.
Установка на 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 \
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
При желании установите программное обеспечение для запуска рабочего сервера, смотрите разделы Запуск сервера, Настройка базы данных для 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 от вашей системы. Если вы не знакомы с этим понятием, обратитесь к документации пакета.
Создайте виртуальное окружение для Weblate:
virtualenv --python=python3 ~/weblate-env
Активируйте виртуальное окружение для Weblate:
. ~/weblate-env/bin/activate
Установите Weblate, включая все его зависимости:
pip install Weblate
Установите драйвер базы данных:
pip install psycopg2-binary
Установите желаемые необязательные зависимости в зависимости от функций, которые вы собираетесь использовать (некоторые из них могут потребовать дополнительных системных библиотек, проверьте раздел Необязательные зависимости):
pip install ruamel.yaml aeidon boto3 zeep chardet tesserocr
Настройка Weblate¶
Примечание
Следующие шаги подразумевают, что виртуальное окружение, используемое Weblate’ом, активно (активировать его можно командой . ~/weblate-env/bin/activate
). В случае, если это не так, вам придётся указывать полный путь к команде weblate: ~/weblate-env/bin/weblate
.
Скопируйте файл
~/weblate-env/lib/python3.7/site-packages/weblate/settings_example.py
в~/weblate-env/lib/python3.7/site-packages/weblate/settings.py
.По своему усмотрению подкорректируйте значения в новом файле
settings.py
. Для тестирования вы можете использовать поставляемый пример, но для рабочей среды вы захотите внести в него изменения, смотрите раздел Изменение конфигурации под свои нужды.Создайте базу данных и её структуру для Weblate (пример настройки использует PostgreSQL, для установки в рабочую среду ознакомьтесь разделом Настройка базы данных для Weblate):
weblate migrate
Создайте учётную запись администратора и скопируйте сгенерированный ей пароль в буфер обмена, также сохраните его для дальнейшего использования:
weblate createadmin
Соберите статические файлы для веб-сервера (смотрите разделы Запуск сервера и Обслуживание статических файлов):
weblate collectstatic
Сожмите файлы JavaScript и CSS (необязательно, смотрите раздел Сжатие клиентских ресурсов):
weblate compress
Запустите рабочие процессы Celery. Для целей разработки это делать не обязательно, но настоятельно рекомендуется. Дополнительную информацию смотрите в разделе Фоновые задачи с использованием Celery:
~/weblate-env/lib/python3.7/site-packages/weblate/examples/celery start
Запустите сервер разработки (шаги для запуска рабочего сервера смотрите в разделе Запуск сервера):
weblate runserver
После установки¶
Поздравляем, теперь ваш сервер Weblate запущен и вы можете начать его использовать.
Теперь вы можете получить доступ к Weblate по адресу
http://localhost:8000/
.Войдите в систему с учётными данными администратора, полученными во время установки, или зарегистрируйтесь в качестве нового пользователя.
Теперь при помощи команды weblate и когда активно виртуальное окружение Weblate вы можете запускать его команды, смотрите раздел Команды управления.
Остановить тестовый сервер можно комбинацией Ctrl+C.
Просмотрите список вероятных проблем с вашей установкой или по адресу
/manage/performance/
в URL, или с помощью команды weblate check --deploy; смотреть также раздел Рабочая среда.
Добавление перевода¶
Откройте интерфейс администратора (
http://localhost:8000/create/project/
) и создайте проект, который вы хотите перевести. Подробнее смотрите в разделе Настройки проекта.Всё, что вам нужно здесь указать — это название проекта и его веб-сайт.
Создайте компонент, который является реальным объектом для перевода — он указывает на репозиторий системы контроля версий и задаёт файлы для перевода. Подробнее смотрите в разделе Настройки компонента.
Здесь важны следующие поля: название компонента, адрес репозитория системы контроля версий и маска для поиска переводимых файлов. Weblate поддерживает широкий спектр форматов, включая PO-файлы gettext, строки ресурсов Android’а, строки свойств iOS, файлы свойств Java или Qt Linguist, подробнее смотрите в разделе Поддерживаемые форматы файлов.
После того, как вышеперечисленные действия будут завершены (это может быть довольно длительный процесс в зависимости от размера вашего репозитория системы контроля версий и количества сообщений для перевода), вы сможете начать перевод.
Установка на 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 от вашей системы. Если вы не знакомы с этим понятием, обратитесь к документации пакета.
Создайте виртуальное окружение для Weblate:
virtualenv --python=python3 ~/weblate-env
Активируйте виртуальное окружение для Weblate:
. ~/weblate-env/bin/activate
Установите Weblate, включая все его зависимости:
pip install Weblate
Установите драйвер базы данных:
pip install psycopg2-binary
Установите желаемые необязательные зависимости в зависимости от функций, которые вы собираетесь использовать (некоторые из них могут потребовать дополнительных системных библиотек, проверьте раздел Необязательные зависимости):
pip install ruamel.yaml aeidon boto3 zeep chardet tesserocr
Настройка Weblate¶
Примечание
Следующие шаги подразумевают, что виртуальное окружение, используемое Weblate’ом, активно (активировать его можно командой . ~/weblate-env/bin/activate
). В случае, если это не так, вам придётся указывать полный путь к команде weblate: ~/weblate-env/bin/weblate
.
Скопируйте файл
~/weblate-env/lib/python3.7/site-packages/weblate/settings_example.py
в~/weblate-env/lib/python3.7/site-packages/weblate/settings.py
.По своему усмотрению подкорректируйте значения в новом файле
settings.py
. Для тестирования вы можете использовать поставляемый пример, но для рабочей среды вы захотите внести в него изменения, смотрите раздел Изменение конфигурации под свои нужды.Создайте базу данных и её структуру для Weblate (пример настройки использует PostgreSQL, для установки в рабочую среду ознакомьтесь разделом Настройка базы данных для Weblate):
weblate migrate
Создайте учётную запись администратора и скопируйте сгенерированный ей пароль в буфер обмена, также сохраните его для дальнейшего использования:
weblate createadmin
Соберите статические файлы для веб-сервера (смотрите разделы Запуск сервера и Обслуживание статических файлов):
weblate collectstatic
Сожмите файлы JavaScript и CSS (необязательно, смотрите раздел Сжатие клиентских ресурсов):
weblate compress
Запустите рабочие процессы Celery. Для целей разработки это делать не обязательно, но настоятельно рекомендуется. Дополнительную информацию смотрите в разделе Фоновые задачи с использованием Celery:
~/weblate-env/lib/python3.7/site-packages/weblate/examples/celery start
Запустите сервер разработки (шаги для запуска рабочего сервера смотрите в разделе Запуск сервера):
weblate runserver
После установки¶
Поздравляем, теперь ваш сервер Weblate запущен и вы можете начать его использовать.
Теперь вы можете получить доступ к Weblate по адресу
http://localhost:8000/
.Войдите в систему с учётными данными администратора, полученными во время установки, или зарегистрируйтесь в качестве нового пользователя.
Теперь при помощи команды weblate и когда активно виртуальное окружение Weblate вы можете запускать его команды, смотрите раздел Команды управления.
Остановить тестовый сервер можно комбинацией Ctrl+C.
Просмотрите список вероятных проблем с вашей установкой или по адресу
/manage/performance/
в URL, или с помощью команды weblate check --deploy; смотреть также раздел Рабочая среда.
Добавление перевода¶
Откройте интерфейс администратора (
http://localhost:8000/create/project/
) и создайте проект, который вы хотите перевести. Подробнее смотрите в разделе Настройки проекта.Всё, что вам нужно здесь указать — это название проекта и его веб-сайт.
Создайте компонент, который является реальным объектом для перевода — он указывает на репозиторий системы контроля версий и задаёт файлы для перевода. Подробнее смотрите в разделе Настройки компонента.
Здесь важны следующие поля: название компонента, адрес репозитория системы контроля версий и маска для поиска переводимых файлов. Weblate поддерживает широкий спектр форматов, включая PO-файлы gettext, строки ресурсов Android’а, строки свойств iOS, файлы свойств Java или Qt Linguist, подробнее смотрите в разделе Поддерживаемые форматы файлов.
После того, как вышеперечисленные действия будут завершены (это может быть довольно длительный процесс в зависимости от размера вашего репозитория системы контроля версий и количества сообщений для перевода), вы сможете начать перевод.
Установка из исходников¶
Пожалуйста, сперва проследуйте инструкциям по установке для вашей системы:
Получите из Git’а последние исходные коды Weblate’а (или скачайте архив и распакуйте его):
git clone https://github.com/WeblateOrg/weblate.git weblate-src
В качестве альтернативы вы можете использовать архивы выпусков. Вы можете скачать их с нашего сайта <https://weblate.org/>. Эти файлы подписаны криптографической подписью, пожалуйста, смотрите раздел Проверка подписей выпусков.
Установите текущий код Weblate’а в виртуальное окружение:
. ~/weblate-env/bin/activate pip install -e weblate-src
Скопируйте файл
weblate/settings_example.py
вweblate/settings.py
.По своему усмотрению подкорректируйте значения в новом файле
settings.py
. Для тестирования вы можете использовать поставляемый пример, но для рабочей среды вы захотите внести в него изменения, смотрите раздел Изменение конфигурации под свои нужды.Создайте используемую Weblate’ом базу данных, подробности смотрите в разделе Настройка базы данных для Weblate.
Создайте Django’вские таблицы, соберите статические файлы и заполните исходные данные (смотрите разделы Наполнение базы данных и Обслуживание статических файлов):
weblate migrate weblate collectstatic weblate compress weblate compilemessages
Примечание
Этот шаг следует повторять при обновлении репозитория.
Установка на 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’а.
В зависимости от ваших настроек и опыта выберите подходящий для вас способ установки:
Установка с помощью Docker’а, рекомендуется для установки на рабочих серверах.
Установка в виртуальное окружение, рекомендуется для рабочей среды:
Установка из исходников, рекомендуется для разработки.
Требования к программному обеспечению¶
Операционная система¶
Weblate работает под Linux, FreeBSD и MacOS. Скорее всего он будет работать и под другими Unix-подобными системами.
Работа Weblate под Windows не поддерживается. Тем не менее, работать под ней он всё ещё может и патчи под неё с радостью принимаются.
Другие сервисы¶
Для своей работы Weblate использует другие сервисы. Вам понадобятся, по крайней мере, следующие запущенные сервисы:
Сервер базы данных PostgreSQL, смотрите раздел Настройка базы данных для Weblate.
Сервер Redis для кэша и очереди задач, смотрите раздел Фоновые задачи с использованием Celery.
SMTP-сервер для исходящей почты, смотрите раздел Настройка исходящей почты.
Зависимости Python¶
Weblate написан на Python’е и поддерживает Python 3.6 или более новую версию. Вы можете установить зависимости с помощью команды pip или из пакетов вашего дистрибутива, полный список зависимостей находится в файле requirements.txt
.
Основные зависимости:
- Django
- Celery
- Translate Toolkit
- translation-finder
- Python Social Auth
- Фреймворк Django REST
Необязательные зависимости¶
Для работы некоторых функций Weblate необходимы следующие модули. Полный их список можно найти в файле requirements-optional.txt
.
Mercurial
(необязательная зависимость для поддержки репозиториев Mercurial)phply
(необязательная зависимость для поддержки PHP)tesserocr
(необязательная зависимость для поддержки распознавания текста со снимков экрана)akismet
(необязательная зависимость для защиты предложений от спама)ruamel.yaml
(необязательная зависимость для поддержки файлов YAML)Zeep
(необязательная зависимость для поддержки терминологической службы Майкрософт)aeidon
(необязательная зависимость для поддержки файлов субтитров)
Зависимости серверной части базы данных¶
Weblate поддерживает PostgreSQL, MySQL и MariaDB, подробнее смотрите в разделе Настройка базы данных для Weblate и документации по реализации поддержки соответствующей базы данных.
Другие системные требования¶
В системе должны быть установлены следующие зависимости:
Git
- Pango, Cairo и связанные заголовочные файлы и данные интроспекции gir
https://cairographics.org/, https://pango.gnome.org/, смотрите раздел Pango и Cairo
git-review
(необязательная зависимость для поддержки Gerrit)git-svn
(необязательная зависимость для поддержки Subversion)tesseract
и его данные (необязательная зависимость для поддержки распознавания текста со снимков экрана)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. В противном случае права доступа на некоторые файлы могут быть выставлены неверно.
В контейнере Docker все файлы в томе /app/data
должны принадлежать пользователю weblate
внутри самого контейнера (UID 1000).
См.также
Настройка базы данных для Weblate¶
Рекомендуется запускать Weblate с сервером баз данных PostgreSQL.
См.также
Использование мощного движка базы данных, Базы данных, Переход с других баз данных на PostgreSQL
PostgreSQL¶
PostgreSQL, как правило, является лучшим выбором для сайтов, написанных на Django. Это эталонная база данных, используемая для реализации слоя баз данных Django.
Примечание
Weblate использует расширение для триграмм, которое в некоторых случаях должно быть установлено отдельно. Ищите пакет postgresql-contrib
или аналогичный.
См.также
Создание базы данных в 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
.
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
Адрес электронной почты отправителя для исходящих сообщений электронной почты, например, для писем регистрации.
См.также
SECRET_KEY
Ключ, используемый Django для подписывания некоторой информации, сохраняемой в куках, подробнее смотрите в разделе Секретный ключ Django.
См.также
SERVER_EMAIL
Адрес электронной почты, используемый в качестве адреса отправителя для отправки сообщений администратору, например, уведомлений о неудачных слияниях.
См.также
Наполнение базы данных¶
После того, как ваша конфигурация будет готова, вы можете запустить weblate migrate
для создания структуры базы данных. Теперь вы можете создавать проекты перевода через интерфейс администратора.
В случае, если вы хотите запустить установку не в интерактивном режиме, вы можете использовать weblate migrate --noinput
, а затем создать пользователя-администратора при помощи команды createadmin
.
После того, как вы закончите, вам также стоит проверить Отчёт о производительности в интерфейсе администратора. Информация оттуда может дать вам подсказки по исправлению потенциально не оптимальной конфигурации вашего сайта.
См.также
Рабочая среда¶
Для установки в рабочую среду необходимо провести корректировки, описанные в следующих разделах. Наиболее критичные настройки вызовут предупреждение, которое обозначается восклицательным знаком в верхней панели, если вы вошли в систему под суперпользователем:

Также рекомендуется изучить все проверки, произведённые 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.
Use adjacent location for running the database server, otherwise the networking performance or reliability might ruin your Weblate experience.
Check the database server performance or tweak its configuration, for example using 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.
См.также
Домашний каталог¶
Изменено в версии 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, вам понадобится несколько сервисов, рекомендуемая конфигурация состоит из:
Сервера базы данных (смотрите раздел Настройка базы данных для Weblate)
Сервера кэша (смотрите раздел Включение кэширования)
Веб-сервера на клиентской части для раздачи статических файлов и SSL-терминации (смотрите раздел Обслуживание статических файлов)
Сервера WSGI для генерации динамического содержимого (смотрите раздел Примеры файлов настроек NGINX и uWSGI)
Celery для выполнения фоновых задач (смотрите раздел Фоновые задачи с использованием Celery)
Примечание
Между некоторыми сервисами существуют зависимости, например, кэш и база данных должны быть запущены до запуска процессов 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 и его конфигурацией, но для этого может потребоваться настройка вашего окружения.
См.также
CSP_SCRIPT_SRC
,
CSP_IMG_SRC
,
CSP_CONNECT_SRC
,
CSP_STYLE_SRC
,
CSP_FONT_SRC
Примеры файлов настроек 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.7/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
WSGIProcessGroup weblate
WSGIApplicationGroup %{GLOBAL}
WSGIScriptAlias / /home/weblate/weblate-env/lib/python3.7/site-packages/weblate/wsgi.py process-group=weblate request-timeout=600
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
WSGIProcessGroup weblate
WSGIApplicationGroup %{GLOBAL}
WSGIScriptAlias /weblate /home/weblate/weblate-env/lib/python3.7/site-packages/weblate/wsgi.py process-group=weblate request-timeout=600
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 для выполнения задач в фоне. Типовая конфигурация, основанная на Redis, выглядит как-то так:
CELERY_TASK_ALWAYS_EAGER = False
CELERY_BROKER_URL = "redis://localhost:6379"
CELERY_RESULT_BACKEND = CELERY_BROKER_URL
При разработке Weblate или модулей для него вы можете использовать «нетерпеливую» конфигурацию, тогда все задачи будут выполнятся непосредственно при их вызове, хотя это и ударит по производительности:
CELERY_TASK_ALWAYS_EAGER = True
CELERY_BROKER_URL = "memory://"
CELERY_TASK_EAGER_PROPAGATES = True
Также вы должны запустить рабочего Celery для обработки задач и запуска запланированных задач, это можно сделать непосредственно в командной строке (что в основном полезно при отладке или разработке):
./weblate/examples/celery start
./weblate/examples/celery stop
Примечание
Процесс Celery должен выполняться под тем же пользователем, под которым работает процесс WSGI, иначе файлы в каталоге DATA_DIR
будут сохраняться с разными владельцами, что приведёт к проблемам во время выполнения.
Смотреть также раздел Права доступа к файлам и Запуск сервера.
Запуск 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 concurency 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"
# Internal Weblate variable to indicate we're running inside Celery
CELERY_WORKER_RUNNING="1"
Для ротации журналов 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_queues
для просмотра текущей длины очереди задач Celery. В случае, если очередь станет слишком длинной, вы также увидите ошибку конфигурации в интерфейсе администратора.
Предупреждение
Ошибки 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 в YunoHost¶
Проект самостоятельного хостинга YunoHost предоставляет пакет для Weblate. После установки YunoHost вы сможете установить Weblate как любое другое приложение. Он предоставит вам полностью рабочий стек с резервным копированием и восстановлением, но вам всё равно может понадобиться отредактировать файл настроек для определённых целей использования.
Вы можете воспользоваться интерфейсом администрирования или этой кнопкой (она приведёт вас на ваш сервер):

Также можно использовать интерфейс командной строки:
yunohost app install https://github.com/YunoHost-Apps/weblate_ynh
Обновление Weblate¶
Обновления образа Docker’а¶
В официальный образ Docker’а (смотрите раздел Установка с помощью Docker’а) уже интегрированы все шаги для обновления. Вручную делать ничего не надо, за исключением извлечения последней версии.
Общие инструкции по обновлению¶
Перед обновлением, пожалуйста, проверьте текущие зависимости программного обеспечения, поскольку они могли измениться. После того, как все зависимости будут установлены или обновлены, пожалуйста, приведите свой файл настроек settings.py
в соответствие с изменениями в конфигурации (правильные значения смотрите в settings_example.py
).
Перед обновлением всегда проверяйте инструкции для конкретных версий. Если вы пропустили какие-то версии, пожалуйста, при обновлении проследуйте инструкциям для всех версий, которые вы пропустили. Иногда, чтобы обеспечить плавный переход, лучше сперва обновиться до какой-нибудь промежуточной версии. Обновление через несколько версий должно работать, но оно протестировано не так хорошо, как обновление на одну версию.
Примечание
Перед обновлением рекомендуется выполнить полное резервное копирование базы данных, чтобы её можно было откатить в случае неудачи обновления, смотрите раздел Резервное копирование и перенос Weblate.
Остановите процессы wsgi и Celery. Обновление может выполнять несовместимые изменения в базе данных, поэтому во время обновления всегда безопаснее избегать выполнения старых процессов.
Обновите код Weblate.
При установке через pip это можно сделать следующим образом:
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
Обновите файл настроек, пример смотрите в
settings_example.py
или обратитесь к разделу Инструкции для конкретных версий для получения информации о необходимых шагах.Обновите структуру базы данных:
weblate migrate --noinput
Соберите обновлённые статические файлы (смотрите разделы Запуск сервера и Обслуживание статических файлов):
weblate collectstatic --noinput
Сожмите файлы JavaScript и CSS (необязательно, смотрите раздел Сжатие клиентских ресурсов):
weblate compress
Если вы используете версию из Git’а, вам также при каждом обновлении следует заново сгенерировать файлы локалей. Вы можете сделать это, выполнив следующую команду:
weblate compilemessages
Убедитесь, что ваша установка в порядке (также смотрите раздел Рабочая среда):
weblate check --deploy
Перезапустите рабочий процесс 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 теперь использует как
msgid
, так иmsgctxt
, если он задан. Это изменит идентификацию переводимых строк в таких файлах, нарушая ссылки на расширенные данные Weblate, такие как снимки экрана или состояния обзора. Перед обновлением убедитесь, что вы закоммитили изменения в таких файлах; рекомендуется также провести принудительную перезагрузку затронутых компонентов с помощью команды Djangoloadpo
.Увеличена минимальная требуемая версия 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 is now required.
См.также
Обновление с Python’а 2 на Python 3¶
Weblate больше не поддерживает Python старше версии 3.5. В случае, если вы всё ещё работаете на более старой версии, пожалуйста, сначала выполните миграцию на 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.
Добавьте 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": "",
},
}
Запустите миграции и удалите все данные, вставленные в таблицы:
weblate migrate --database=postgresql
weblate sqlflush --database=postgresql | weblate dbshell --database=postgresql
Сделайте дамп прежней базы данных и импортируйте его в PostgreSQL
weblate dumpdata --all --output weblate.json
weblate loaddata weblate.json --database=postgresql
Подправьте параметр
DATABASES
, задав в нём использование по умолчанию только базы данных PostgreSQL и удалив старое соединение.
Теперь Weblate должен быть готов к запуску из базы данных PostgreSQL.
Переход на PostgreSQL с помощью pgloader¶
pgloader — это универсальный инструмент миграции для переноса данных на PostgreSQL. Вы можете использовать его для переноса базы данных Weblate.
Подправьте свой файл
settings.py
, задав в нём использование базы данных PostgreSQL.Перенесите схему в базу данных PostgreSQL:
weblate migrate weblate sqlflush | weblate dbshell
Запустите 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 месяцев

Ключ шифрования Borg¶
BorgBackup создаёт зашифрованные резервные копии и восстановить из без кодовой фразы у вас не получится. Парольная фраза генерируется при добавлении новой службы резервного копирования. Вы должны скопировать её и сохранить в безопасном месте.
Если же вы используете хранилище резервных копий на Weblate.org, то сохраните также резервную копию вашего закрытого SSH-ключа — он понадобится для доступа к вашим резервным копиям.
См.также
Предоставляемое Weblate’ом хранилище резервных копий¶
Самый простой способ резервного копирования вашего экземпляра Weblate — приобрести сервис резервного копирования на weblate.org. Его можно будет активировать следующим образом:
Покупка сервиса резервного копирования на https://weblate.org/support/#backup.
Ввод полученного ключа в интерфейсе управления, смотрите раздел Интегрированная поддержка.
Weblate подключается к облачному сервису и получает информацию для доступа к резервным копиям.
Включение новой конфигурации резервного копирования на вкладке Резервные копии.
Создайте резервную копию своих учётных данных 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:
Подготовить сервер, на котором будут храниться резервные копии.
Установить на него SSH-сервер (вы получите его по умолчанию в большинстве дистрибутивов Linux).
Установите BorgBackup на этот сервер; большинство дистрибутивов Linux имеют доступные пакеты (смотреть Installation).
Выберите существующего или создайте нового пользователя, который будет использоваться для резервного копирования.
Добавить SSH-ключ Weblate к пользователю, чтобы Weblate мог подключаться к серверу по SSH без пароля (смотреть раздел SSH-ключ Weblate).
Настройте местоположение резервного копирования в Weblate как
user@host:/path/to/backups
.
Подсказка
Предоставляемое Weblate’ом хранилище резервных копий предоставляет вам автоматическое удалённое резервное копирование без каких-либо усилий.
См.также
Восстановление из резервной копии Borg¶
Восстановите доступ к своему репозиторию резервных копий и подготовьте свою парольную фразу для резервного копирования.
Получите список всех резервных копий на сервере с помощью команды
borg list РЕПОЗИТОРИЙ
.Восстановите нужную резервную копию в текущий каталог с помощью команды
borg extract РЕПОЗИТОРИЙ::АРХИВ
.Восстановите базу данных из SQL-дампа, размещённого в каталоге
backup
каталога данных Weblate (смотрите раздел Дампы данных для резервного копирования).Скопируйте файл настроек Weblate (
backups/settings.py
, смотрите раздел Дампы данных для резервного копирования) в нужное место, смотрите раздел Изменение конфигурации под свои нужды.При использовании контейнера Docker файл настроек уже включен в контейнер, и вам следует восстановить исходные переменные окружения. В этом вам может помочь файл
environment.yml
(смотреть раздел Дампы данных для резервного копирования).Скопируйте весь восстановленный каталог данных в место, заданное параметром
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:
См.также
Ручное резервное копирование¶
В зависимости от того, что именно вы хотите сохранить, создайте резервную копию тех типов данных, которые 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
.
Для восстановления резервной копии базы данных загрузите её с помощью инструментов dabase, например:
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
Восстановление ручных резервных копий¶
Восстановите все данные, сохранённые вами в резервной копии.
Обновите все репозитории с помощью команды
updategit
.weblate updategit --all
Перенос установки Weblate¶
Переместите свою установку на другую систему, следуя приведённым выше инструкциям по резервному копированию и восстановлению из резервной копии.
Аутентификация¶
Регистрация пользователя¶
В установке по умолчанию Weblate использует python-social-auth, форму на сайте для обработки регистраций новых пользователей. После подтверждения своей электронной почты новый пользователь может вносить свой вклад в переводы или пройти аутентификацию, воспользовавшись одним из сторонних сервисов.
Также вы можете отключить регистрацию новых пользователей с помощью установки параметра REGISTRATION_OPEN
.
Попытки аутентификации учитываются при применении ограничений на частоту запросов.
Способы аутентификации¶
Для аутентификации используется встроенное решение Django, включающее в себя для этого аутентификацию от различных социальных сетей. Использование этого решения означает, что вы сможете импортировать себе базу данных пользователей других проектов, написанных на Django (смотрите раздел Переход с Pootle).
Кроме того, аутентификация в Django может быть настроена и с использованием других способов.
См.также
В разделе Параметры аутентификации описано, как настроить аутентификацию в официальном образе Docker’а.
Аутентификация по паролю¶
По умолчанию 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 |
---|---|
Полное имя |
|
Имя |
|
Фамилия |
|
Электронная почта |
|
Имя пользователя |
|
Подсказка
Приведённый выше пример и образ 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¶
Как правило, с 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.
Вы можете ограничить доступ пользователя к отдельным проектам, сменив параметр Управления доступом. Доступные варианты:
- Публичный
Проект видим для всех, и все зарегистрированные пользователи могут переводить.
- Защищённый
Проект видят все, но переводить могут только отдельные пользователи.
- Частный
Видеть и переводить проект могут только отдельные пользователи.
- Настраиваемый
Возможность управление записями пользователей будет отключена. По умолчанию всем пользователям будет запрещено выполнять какие-либо действия над проектом. Вам придется настроить все права доступа с помощью нетипичных правил доступа.
Управление доступом можно изменить на вкладке Доступ параметров (Управление ↓ Параметры) каждого соответствующего проекта.

Значение по умолчанию можно изменить с помощью DEFAULT_ACCESS_CONTROL
.
Примечание
Даже для частных проектов, некоторая информация о вашем проекте будет раскрыта: статистика и языковая сводка для всего экземпляра будет включать подсчёты для всех проектов, несмотря на настройки контроля доступа. Имя вашего проекта и другая информация не могут быть раскрыты через это.
Примечание
Фактический набор разрешений, доступных пользователям по умолчанию в публичных, защищённых и частных проектах, может быть пересмотрен администратором экземпляра Weblate с помощью пользовательских настроек.
Предупреждение
При включённом контроле доступа Custom, Weblate удалит все special groups, которые он создал для выбранного проекта. Если вы делаете это без прав администратора для всего экземпляра Weblate, вы мгновенно потеряете доступ к управлению проектом.
См.также
По-проектная настройка доступа¶
Пользователи с привилегией Управление доступом к проекту (смотреть раздел Список привилегий) также могут управлять пользователями в проектах с не-Custom доступом. Они могут назначать пользователей в одну из следующих групп.
Для`публичных`, защищённых и частных проектов:
- Администрирование
Включает все разрешения, доступные для проекта.
- Рецензирование (только если включено рецензирование)
Может одобрять переводы во время рецензирования.
Только для проектов защищённых и частных:
- Перевести
Может переводить проект и загружать переводы, сделанные в автономном режиме.
- Источники
Может редактировать исходные строки (если это разрешено в настройках проекта) и информацию об исходной строке.
- Языки
Может управлять языками перевода (добавлять или удалять переводы).
- Глоссарий
Может управлять глоссарием (добавлять, удалять или загружать записи в глоссарий).
- Накопитель
Может управлять памятью переводов.
- Снимки экрана
Может управлять снимками экрана (добавлять или удалять их, а также связывать их с исходными строками).
- СКВ (VCS)
Может управлять системой контроля версий и имеет доступ к экспортированному репозиторию.
- Биллинг
Имеет доступ к биллингу и его настройкам (смотреть раздел Биллинг).
К сожалению, пока что невозможно изменить этот предопределённый набор групп. Также таким образом невозможно дать только некоторые дополнительные разрешения всем пользователям.
Примечание
Для управления доступом не-Настраиваемый для каждого проекта фактически определяется экземпляр каждой группы, описанной выше. Фактическое название этих групп будет Project@Group
, которое также отображается в интерфейсе администратора Django таким образом. Хотя они не могут быть отредактированы из пользовательского интерфейса Weblate.

Эти возможности доступны на странице Управление доступом, которую можно открыть из меню проекта Управление ↓ Пользователи.
Новое приглашение пользователя¶
Кроме того, помимо добавления существующего пользователя в проект, можно приглашать новых. Любой новый пользователь будет создан немедленно, но его учетная запись будет оставаться неактивной до тех пор, пока он не войдёт в проект по ссылке в приглашении, отправленном по электронной почте. Для этого не требуется обладать какими-либо привилегиями в масштабах сайта, достаточно иметь право управления доступом в масштабах проекта (например, членство в группе Администрация).
Подсказка
Если приглашённый пользователь пропустил срок действия приглашения, он может установить свой пароль, используя приглашённый адрес электронной почты в форме сброса пароля, поскольку учётная запись уже создана.
Добавлено в версии 3.11: Есть возможность повторной отправки email с пользовательскими приглашениями (аннулирование любого ранее отправленного приглашения).
Такие же приглашения доступны для всего сайта из management interface на вкладке Пользователи.
Блокирование пользователей¶
Добавлено в версии 4.7.
Если некоторые пользователи плохо ведут себя в вашем проекте, у вас есть возможность заблокировать их вклад. Заблокированный пользователь по-прежнему сможет видеть проект, если у него есть соответствующие разрешения, но он не сможет вносить свой вклад.
Управление разрешениями для каждого проекта¶
Установите Защищённый или Частный тип доступа к вашим проектам и управляйте пользователями отдельно для каждого проекта через интерфейс Weblate.
По умолчанию это не позволяет Weblate предоставлять доступ, предоставляемый Пользователям и Просматривающим default groups из-за собственной настройки этих групп. Это не мешает вам предоставлять права доступа к этим проектам в масштабах всего сайта, изменив группы по умолчанию, создав новую или создав дополнительные пользовательские настройки для отдельного компонента, как описано ниже в Настраиваемый контроль доступа.
Одним из основных преимуществ управления правами доступа через пользовательский интерфейс Weblate является то, что вы можете делегировать его другим пользователям, не наделяя их привилегиями суперпользователя. Для этого добавьте их в группу Администрации проекта.
Настраиваемый контроль доступа¶
Примечание
Эта функция недоступна на тарифном плане для свободного ПО на облачный хостинг Weblate.
Система разрешений построена на основе групп и ролей. Роли определяют набор разрешений, а группы назначают их пользователям и переводчикам. Для получения более подробной информации смотреть раздел Пользователи, роли, группы и разрешения.
Самые мощные возможности системы контроля доступа Weblate пока доступны только через Django admin interface. Вы можете использовать его для управления разрешениями любого проекта. Вам не обязательно переключать на Пользовательский access control, чтобы использовать его. Однако для его использования у вас должны быть привилегии суперпользователя.
Если вас не интересуют детали реализации, и вы просто хотите создать достаточно простую конфигурацию на основе настроек по умолчанию, или у вас нет доступа ко всей установке Weblate (как на Hosted Weblate), обратитесь к разделу Простой контроль доступа.
Распространённые варианты конфигурации¶
В этом разделе содержится обзор некоторых распространённых настроек, которые могут вас заинтересовать.
Управление разрешениями по всему сайту¶
Чтобы управлять разрешениями сразу для всего экземпляра, добавьте пользователей в соответствующие группы default groups:
Пользователи (это делается по умолчанию с помощью automatic group assignment).
Рецензенты (если вы используете review workflow с выделенными рецензентами).
Управляющие (если вы хотите делегировать большую часть операций по управлению кому-то другому).
Вы должны держать все проекты настроенными как Публичные (смотреть раздел Управление доступом к проекту), иначе разрешения, предоставляемые членством в группах Пользователи и Рецензенты, не будут иметь никакого эффекта.
Вы также можете предоставить некоторые дополнительные разрешения по своему выбору группам по умолчанию. Например, вы можете дать разрешение на управление снимками экрана всем Пользователям.
Вы также можете определить некоторые новые пользовательские группы. Если вы хотите продолжать управлять сайтом разрешений для этих групп, выберите соответствующее значение для Выбора проекта (например, Все проекты или Все публичные проекты).
Особые разрешения для определённых языков, компонентов или проектов¶
Вы можете создавать собственные специальные группы для управления разрешениями для отдельных объектов, таких как языки, компоненты и проекты. Хотя эти группы могут предоставлять только дополнительные привилегии, вы не можете отменить разрешение, предоставленное группами для всего сайта или проекта, добавив другую пользовательскую группу.
Пример:
Если вы хотите (по какой-либо причине) разрешить перевод на определённый язык (допустим, чешский) только закрытому набору надёжных переводчиков, а переводы на другие языки оставить открытыми, вам придётся сделать следующее:
Снимите разрешение на перевод чешского со всех пользователей. В настройках по умолчанию это можно сделать, изменив Пользователей default group.
Группа Пользователи¶ Выбор языка
Как определено
Языки
Все, кроме чешского
Добавлена специальная группа для чешских переводчиков.
Группа Чешские переводчики¶ Роли
Опытные пользователи
Выбор проекта
Все публичные проекты
Выбор языка
Как определено
Языки
Чешский
Добавьте пользователей, которым вы хотите предоставить разрешения, в эту группу.
Как вы видите, управление разрешениями таким способом является мощным, но может быть довольно утомительной работой. Вы не можете делегировать её другому пользователю, если только не предоставите права суперпользователя.
Пользователи, роли, группы и разрешения¶
Модели аутентификации состоят из нескольких объектов:
- Разрешение
Индивидуальное разрешение, определённое в самом Weblate. Разрешения нельзя назначать непосредственно пользователям: это можно сделать только через назначение ролей.
- Роль
Роль определяет набор разрешений. Она позволяет использовать эти наборы повторно в разных местах, что упрощает их администрирование.
- Пользователь
Пользователь может состоять в нескольких группах.
- Группа
Группу соединяют роли, пользователей, и объекты аутентификации (проекты, языки, и списки компонентов).
Примечание
Группа может не иметь назначенных ей ролей, в этом случае предполагается доступ к просмотру проекта любым желающим (смотреть ниже).
Доступ для просмотра проекта¶
Пользователь должен быть членом группы, связанной с проектом или с каким-либо компонентом внутри проекта. Чтобы получить доступ к просмотру, никаких специальных разрешений не требуется, достаточно только членства в группе (этот факт используется для создаваемой по умолчанию группы Просматривающие, смотрите раздел Список групп).
Доступ для просмотра компонента¶
Доступ к не ограниченным компонентам пользователь может получить сразу, как только получит доступ к компонентам проекта (и будет иметь все разрешения, которые пользователь получил для проекта). Если включён ограниченный доступ, для доступа к компоненту потребуется явное разрешение на компонент (или на содержащий его список компонентов).
Область действия групп¶
Область действия разрешений, назначенных ролями в группах, применяется по следующим правилам:
Если группа указывает какой-либо Список компонентов, то все разрешения, предоставленные членам этой группы, предоставляются для всех компонентов в списках компонентов, прикреплённых к группе, и доступ без дополнительных разрешений предоставляется для всех проектов, в которых находятся эти компоненты. Компоненты и Проекты игнорируются.
Если в группе указаны какие-либо Компоненты, то все разрешения, данные членам этой группы, предоставляются для всех компонентов, присоединённых к группе, и доступ без дополнительных разрешений предоставляется для всех проектов, в которых находятся эти компоненты. Проекты игнорируются.
В противном случае, если группа указывает какие-либо Проекты, либо прямо перечислив их, либо установив Выбор проекта в значение типа Все публичные проекты, все эти разрешения применяются ко всем проектам, что фактически предоставляет одинаковые разрешения на доступ ко всем проектам 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.
Группы и роли по умолчанию¶
После установки создаётся набор групп по умолчанию (смотреть раздел Список групп).
Эти роли и группы создаются во время установки. Встроенные роли всегда приводятся в актуальное состояние при процессе миграции базы данных во время обновления. Вы не можете изменить их, пожалуйста, создайте новую роль, если вы хотите определить свой собственный набор разрешений.
Список привилегий¶
- Тарифный план (смотрите раздел Биллинг)
Просмотр платёжной информации [Администрирование, Биллинг]
- Изменения
Скачивание изменений [Администрирование]
- Комментарии
Публикация комментариев [Администрирование, Правка источника, Опытный пользователь, Рецензирование строк, Перевод]
Удаление комментариев [Администрирование]
- Компонент
Правка параметров компонентов [Администрирование]
Блокировка компонента, предотвращает его перевод [Администрирование]
- Глоссарий
Добавление записей в глоссарий [Администрирование, Управление глоссарием, Опытный пользователь]
Правка записей глоссария [Администрирование, Управление глоссарием, Опытный пользователь]
Удаление записей из глоссария [Администрирование, Управление глоссарием, Опытный пользователь]
Загрузка записей в глоссарий [Администрирование, Управление глоссарием, Опытный пользователь]
- Автоматические предложения
Использование автоматических предложений [Администрирование, Правка источника, Опытный пользователь, Рецензирование строк, Перевод]
- Память переводов
Правка памяти переводов [Администрирование, Управление памятью переводов]
Удаление памяти переводов [Администрирование, Управление памятью переводов]
- Проекты
Правка параметров проекта [Администрирование]
Управление доступом к проекту [Администрирование]
- Отчёты
Скачивание отчётов [Администрирование]
- Снимки экрана
Добавление снимков экрана [Администрирование, Управление снимками экрана]
Правка снимков экрана [Администрирование, Управление снимками экрана]
Удаление снимков экрана [Администрирование, Управление снимками экрана]
- Исходные строки
Правка дополнительных свойств строки [Администрирование, Правка источника]
- Строки
Добавление новой строки [Администрирование]
Удаление строки [Администрирование]
Игнорирование неудачных проверок [Администрирование, Правка источника, Опытный пользователь, Рецензирование строк, Перевод]
Правка строк [Администрирование, Правка источника, Опытный пользователь, Рецензирование строк, Перевод]
Рецензирование строк [Администрирование, Рецензирование строк]
Правка строк, когда предложения являются обязательными [Администрирование, Рецензирование строк]
Правка исходных строк [Администрирование, Правка источника, Опытный пользователь]
- Предложения
Принятие предложения [Администрирование, Правка источника, Опытный пользователь, Рецензирование строк, Перевод]
Добавление предложения [Администрирование, Правка источника, Добавление предложения, Опытный пользователь, Рецензирование строк, Перевод]
Удаление предложения [Администрирование, Опытный пользователь]
Голосование за предложения [Администрирование, Правка источника, Опытный пользователь, Рецензирование строк, Перевод]
- Переводы
Добавление языка для перевода [Администрирование, Опытный пользователь, Управление языками]
Производство автоматического перевода [Администрирование, Управление языками]
Удаление существующего перевода [Администрирование, Управление языками]
Добавление нескольких языков для перевода [Администрирование, Управление языками]
- Загрузки
Задание автора загружаемого перевода [Администрирование]
Перезапись существующих строк при загрузке новых [Администрирование, Правка источника, Опытный пользователь, Рецензирование строк, Перевод]
Загрузка переводов [Администрирование, Правка источника, Опытный пользователь, Рецензирование строк, Перевод]
- СКВ (VCS)
Доступ к внутреннему репозиторию [Администрирование, Доступ к репозиторию, Опытный пользователь, Управление репозиторием]
Коммит изменений во внутренний репозиторий [Администрирование, Управление репозиторием]
Отправка изменений из внутреннего репозитория [Администрирование, Управление репозиторием]
Сброс изменений во внутреннем репозитории [Администрирование, Управление репозиторием]
Просмотр расположения вышестоящего репозитория [Администрирование, Доступ к репозиторию, Опытный пользователь, Управление репозиторием]
Обновление внутреннего репозитория [Администрирование, Управление репозиторием]
- Привилегии для всего сайта
Использование интерфейса управления
Добавление новых проектов
Добавление определений языка
Управление определениями языков
Управление группами
Управление пользователями
Управление ролями
Управление объявлениями
Управление памятью переводов
Управление списками компонентов
Примечание
Привилегии для всего сайта не предоставляются никаким умолчательным ролям. Они мощны и достаточно близки к статусу суперпользователя. Большинство из них влияют на все проекты вашей установки 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/, смотрите раздел Биллинг), вы также можете создавать их на основе разрешений из вашего плана, установленных учётной записью пользователя, управляющего тарификацией.
Вы можете просмотреть свой текущий тарифный план на отдельной странице:

Создание проекта можно инициировать оттуда или из меню на панели навигации. Чтобы завершить добавление проекта перевода, заполните основную информацию о нём:

После создания проекта вы попадаете непосредственно на страницу проекта:

Создание нового компонента перевода можно инициировать одним щелчком мыши. Процесс создания компонента многоступенчатый, большинство параметров перевода он определяет автоматически. Существует несколько подходов к созданию компонента:
- Из системы контроля версий
Создать компонент из удалённого репозитория системы контроля версий.
- Из уже существующего компонента
Создать дополнительный компонент на основе уже существующего, только с другими файлами.
- Дополнительная ветка
Создать дополнительный компонент на основе уже существующего, только для другой ветки.
- Загрузить файлы перевода
Загрузить файлы перевода в Weblate в случае, если у вас нет системы контроля версий или вы не хотите интегрировать её с Weblate. Позже вы сможете обновить содержимое через веб-интерфейс или REST API Weblate’а.
- Перевести документ
Загрузить одиночный документ и перевести его.
- Начать с нуля
Создать пустой проект перевода и добавить строки вручную.
Имея существующие компоненты перевода, вы также можете легко добавлять новые для дополнительных файлов или веток из того же репозитория.
Сначала вам нужно указать наименование и расположение репозитория:

На следующей странице вам будет представлен список обнаруженных переводимых ресурсов:

На последнем этапе просмотрите информацию о компоненте перевода и укажите дополнительные сведения:

Настройки проекта¶
Создайте проект перевода, а затем добавьте в него новый компонент, в котором вы и будете непосредственно делать перевод. Проект здесь похож на полку, на которую укладываются реальные переводы. Все компоненты одного проекта разделяют между собой общие предложения и глоссарий; переводы также автоматически распространяются во все компоненты одного проекта (если только оно не отключено в настройках компонентов), смотрите раздел Память переводов.
См.также
Это основные атрибуты для настройки, они предоставляют переводчикам информацию о проекте:
Название проекта¶
Более подробное наименование проекта для отображения.
URL-плашка¶
Название проекта, подходящее для указания его в URL-адресе.
Веб-сайт проекта¶
URL-адрес, по которому переводчики могут найти дополнительную информацию о проекте.
Это обязательный параметр, если он не отключён с помощью WEBSITE_REQUIRED
.
Инструкции для переводчиков¶
URL-адрес на сайт, содержащий более подробные инструкции для переводчиков.
Задать заголовок «Language-Team»¶
Должен ли Weblate управлять заголовком Language-Team
(сейчас это единственная особая возможность для GNU gettext).
Управление доступом¶
Настройка контроля доступа для каждого проекта, подробнее смотрите в разделе Управление доступом к проекту.
Значение по умолчанию можно изменить установкой параметра 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
.
В случае, если имя вашего файла содержит такие специальные символы, как [
или ]
, они должны быть экранированы как [[]
и []]
.
Одноязычный базовый файл¶
Базовый файл, содержащий определения строк для одноязычных компонентов.
Правка базового файла¶
Разрешать ли редактирование базового файла для одноязычных компонентов.
Файл промежуточного языка¶
Файл промежуточного языка для одноязычных компонентов. В большинстве случаев это файл перевода предоставляется разработчиками и именно из него берутся настоящие исходные строки для перевода на другие языки.
Если он задан, то исходные строки будут взяты из этого файла, а переводы на все остальные языки — из одноязычных базовых файлов. В случае, если строка не «переведена» на исходный язык, перевод на другие языки запрещается. Этот запрет можно использовать для контроля качества исходных строк.
Шаблон для новых переводов¶
Базовый файл, используемый для генерирования новых переводов, например, .pot
файл для gettext.
Подсказка
Для многих одноязычных форматов Weblate по умолчанию начинает перевод с пустого файла. Используйте этот параметр, если вы хотите, чтобы при создании нового перевода присутствовали все строки с пустым значением.
Формат файла¶
Формат файла перевода, смотрите также поддерживаемые форматы файлов.
Адрес для сообщения об ошибке в исходной строке¶
Адрес электронной почты, используемый для отправки сообщений об ошибках в исходных строках. На этот адрес также будут отсылаться уведомления о любых сделанных в Weblate комментариях к исходной строке.
Разрешить распространение перевода¶
Вы можете отключить распространение переводов на этот компонент из других компонентов этого же проекта. Это сильно зависит от того, что вы переводите, иногда желательно использовать разные переводы для одинаковых строк.
Обычно для одноязычных переводов рекомендуется отключать этот параметр, если только вы не используете во всем проекте одни и те же идентификаторы для одинаковых строк.
Значение по умолчанию может быть изменено параметром DEFAULT_TRANSLATION_PROPAGATION
.
Включить предложения¶
Принимать ли предложения по переводу этого компонента.
Голосование по предложению¶
Включает голосование за предложения, смотрите раздел Голосование по предложению.
Автоматическое принятие предложений¶
Автоматически принимать предложения, за которые проголосовали, смотрите раздел Голосование по предложению.
Флаги перевода¶
Настройка проверок качества и другого поведения Weblate’а, смотрите раздел Настройка поведения с помощью флагов.
Принудительные проверки¶
Список проверок, которые нельзя проигнорировать, смотрите раздел Принудительные проверки.
Примечание
Добавление проверки в качестве принудительной не включает её автоматически; вам всё равно придётся включить её с помощью настроек поведения во флагах перевода или дополнительной информации об исходных строках.
Лицензия перевода¶
Лицензия на перевод (не обязательно должна совпадать с лицензией на исходный код).
Соглашение участника¶
Пользовательское соглашение, которое должно быть одобрено, прежде чем пользователь сможет переводить этот компонент.
Добавление нового перевода¶
Как обрабатывать запросы на создание новых языков. Доступные варианты:
- Связаться с кураторами
Пользователь может выбрать желаемый язык, а кураторы проекта получат об этом уведомление. Добавление (или не добавление) языка в репозиторий зависит от них.
- Указать URL на инструкции по переводу
Пользователю предоставляется ссылка на страницу, которая описывает процесс начала новых переводов. Используйте этот вариант в случае, если вам требуется более формальный процесс (например, формирование команды людей перед началом фактического перевода).
- Создать новый язык
Пользователь может выбрать язык и Weblate автоматически создаст для него файл, так что можно сразу начинать переводить.
- Запретить добавление новых переводов
У пользователя не будет возможности начать новый перевод.
Подсказка
Администраторы проекта могут добавлять новые переводы, даже если это отключено здесь, когда это возможно (либо Шаблон для новых переводов, или же формат файла поддерживает запуск с пустого файла).
Управление строками¶
Добавлено в версии 4.5.
Настраивает, могут ли пользователи добавлять новые строки и удалять существующие из Weblate. В зависимости от вашего рабочего процесса (как именно должны добавляться новые строки) вы можете включить этот параметр или оставить отключённым.
В двуязычных форматах строки обычно извлекаются из исходного кода (например, с помощью xgettext) и добавление новых строк через Weblate должно быть отключено (они всё равно удалятся, когда вы в следующий раз будете обновлять свои файлы перевода). В Weblate вы можете управлять строками для каждого перевода отдельно, это не будет принудительно поддерживать набор исходных строк для всех языков одинаковым.
Для одноязычных форматов управление строками происходит только на исходном языке, в переводах они добавляются и удаляются автоматически. В файлах перевода строки появляются только после их фактического перевода.
Стиль кода языка¶
Настройте код языка, используемый для генерации имени файла для переводов, созданных Weblate.
Стиль слияния¶
Вы можете настроить обработку обновлений из вышестоящего репозитория. Для некоторых систем контроля версий этот параметр может не поддерживаться. За более подробной информацией обратитесь к разделу Слияние или перебазирование.
Значение по умолчанию можно изменить установкой параметра DEFAULT_MERGE_STYLE
.
Сообщения коммита, добавления, удаления, слияния и сообщения надстроек¶
Сообщение, используемое при коммите перевода, смотрите раздел Шаблонная разметка.
Значения по умолчанию можно изменить установкой параметров DEFAULT_ADD_MESSAGE
, DEFAULT_ADDON_MESSAGE
, DEFAULT_COMMIT_MESSAGE
, DEFAULT_DELETE_MESSAGE
и DEFAULT_MERGE_MESSAGE
.
Отправлять при коммите¶
Должны ли закоммиченные изменения автоматически отправляться в вышестоящий репозиторий. Когда этот параметр включён, отправка инициируется после того, как Weblate закоммитит изменения в свой базовом репозиторий (смотрите отложенные коммиты). Для реального включения функции отправки также должен быть настроен URL для отправки в репозиторий.
Возраст изменений для коммита¶
Устанавливает, сколько времени (в часах) должно пройти с момента коммита изменений фоновым заданием или commit_pending
. Все изменения в компоненте коммитятся, если есть хотя бы одно изменение старше этого периода.
Значение по умолчанию можно изменить установкой параметра COMMIT_PENDING_HOURS
.
Подсказка
Существуют и другие ситуации, когда незавершённые изменения могут быть зафиксированы, см Отложенные коммиты.
Блокировать при ошибке¶
Блокирует компонент (и связанные компоненты, смотреть раздел Внутренние URL-адреса Weblate) при первой неудачной отправке или слиянии в его вышестоящий репозиторий или извлечения из него. Это позволяет избежать добавления новых конфликтов, которые пришлось бы разрешать вручную.
Компонент будет автоматически разблокирован, как только в репозитории не останется ошибок.
Исходный язык¶
Язык, используемый для исходных строк. Изменяйте этот параметр, если вы переводите не с английского.
Подсказка
В случае, если вы переводите двуязычные файлы с английского языка, но хотите иметь возможность делать исправления также и в английском переводе, выберите Английский (разработчик), чтобы избежать конфликта между названием исходного языка и существующим переводом.
Для одноязычных переводов в данном случае можно использовать промежуточный перевод, смотрите раздел Файл промежуточного языка.
Языковой фильтр¶
Регулярное выражение, используемое для фильтрации перевода при поиске файлов по маске. Это можно использовать для ограничения списка управляемых Weblate’ом языков.
Примечание
Вам необходимо перечислить коды языков в том же виде, в котором они встречаются в именах файлов.
Несколько примеров фильтров:
Описание фильтра |
Регулярное выражение |
---|---|
Только выбранные языки |
|
Исключить языки |
|
Выбрать только двубуквенные языковые коды |
|
Исключить неязыковые файлы |
|
Включить все файлы (по умолчанию) |
|
Регулярное выражение вариантов¶
Регулярное выражение, используемое для определения вариантов строки, смотрите раздел Варианты строк.
Примечание
Большинство полей могут быть отредактированы владельцами или управляющими проекта через интерфейс Weblate’а.
Приоритет¶
Переводчикам вначале предлагаются компоненты с большим приоритетом.
Ограниченный доступ¶
По умолчанию компонент виден любому, кто имеет доступ к проекту, даже если этот человек не может выполнить в компоненте никаких изменений. Это облегчает поддержание согласованности перевода в рамках проекта.
Ограничение доступа на уровне компонента или списка компонентов накладывает разрешение на доступ к компоненту, независимо от разрешений на уровне проекта. Вам придётся явно предоставить доступ к нему. Это можно сделать, предоставив доступ новой группе пользователей и включив в неё пользователей, или используя стандартные группы управления доступом настраиваемый или частный.
Значение по умолчанию можно изменить установкой параметра в 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, в то же время для установки в рабочую среду в неё необходимо внести некоторые коррективы. Многие из параметров довольно сильно влияют на производительность. Для получения более подробной информации обратитесь к разделу Рабочая среда, особенно обратите внимание на следующие темы:
Настройка Celery для выполнения фоновых задач (смотрите раздел Фоновые задачи с использованием Celery)
Проверка ограничения по ресурсам¶
Если вы импортируете огромные переводы или репозитории, вы можете столкнуться с ограничениями по ресурсам вашего сервера.
Проверьте объём свободной памяти, наличие кэшированных операционной системой файлов перевода значительно повысит производительность.
Если нужно обработать множество строк, дисковые операции могут стать узким местом — диск насилуется как 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
.
См.также
Определения языка находятся в weblate-language-data repository.
Неоднозначные коды языков и макроязыки¶
В большинстве случаев использовать код макроязыка для перевода не является хорошей идеей. Типичный проблемный случай — это курдский язык, разные варианты которого могут записываться либо латиницей, либо арабским письмом. Чтобы добиться корректного поведения в Weblate рекомендуется использовать только индивидуальные коды языков, избегая макроязыки.
Определение языков¶
Каждый язык состоит из следующих полей:
Код языка¶
Код, идентифицирующий язык. Weblate предпочитает двухбуквенные коды, как они определены в ISO 639-1, но для языков, для которых нет двухбуквенных кодов, использует коды ISO 639-2 или ISO 639-3. Также он может поддерживать расширенные коды, определённые в BCP 47.
Название языка¶
Видимое название языка. Названия языков, включённых в Weblate, также локализуются в зависимости от языка пользовательского интерфейса.
Направление текста¶
Определяет, идёт ли запись в языке справа налево или слева направо. Для большинства языков это свойство корректно определяется автоматически.
Количество форм множественного числа¶
Количество используемых в языке форм множественного числа.
Формула множественного числа¶
Совместимая с Gettext формула множественного числа, используемая для определения того, какая форма множественного числа используется для данного количества.
Добавление новых переводов¶
Изменено в версии 2.18: В версиях до 2.18 поведение добавления новых переводов зависело от формата файла.
Weblate может автоматически начинать новый перевод для всех форматов файлов.
Некоторые форматы ожидают, что они будут начинаться с пустого файла и в него будут включены только переведённые строки (например, Строковые ресурсы Android), в то время как другие ожидают, что в файле будут присутствовать все ключи (например, GNU gettext). В некоторых ситуациях это на самом деле зависит не от формата, а от фреймворка, который вы используете для работы с файлами перевода (например, с файлами 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, но с устаревшими кодами для китайского языка.
В дополнение к этому, любое отображение, определённое как псевдоним языка, применяется в обратном направлении.
Примечание
Weblate распознаёт любой из этих стилей при разборе файлов перевода, вышеуказанные настройки влияют только на то, в каком стиле создавать новые файлы.
См.также
Непрерывная локализация¶
Weblate строит такую инфраструктуру, чтобы ваш перевод непрерывно следовал за разработкой. Таким образом, переводчики могут работать над переводами всё время разработки, вместо того, чтобы работать с огромным количеством нового текста непосредственно перед выпуском.
См.также
В разделе «Интеграция с Weblate» на базовом уровне описывается, как интегрировать ваш процесс разработки с Weblate.
Процесс следующий:
Разработчики вносят изменения и отправляют их в репозиторий системы контроля версий.
По необходимости обновляются файлы перевода (это зависит от формата файла, смотрите вопрос Почему Weblate до сих пор показывает старые строки перевода, хотя я уже обновил шаблон?).
Weblate извлекает изменения из репозитория системы контроля версий, смотрите раздел Обновление репозиториев.
Как только Weblate обнаруживает изменения в переводах, он уведомляет об этом переводчиков в соответствии с настройками их подписок.
Переводчики присылают переводы через веб-интерфейс Weblate, или загружают файлы, изменённые ими в автономном режиме.
После завершения работы переводчиков Weblate коммитит изменения в локальный репозиторий (смотрите раздел Отложенные коммиты) и отправляет их обратно, если у него есть на это разрешение (смотрите раздел Отправка изменений из Weblate’а).
Обновление репозиториев¶
Вы должны каким-то образом настроить обновления репозиториев из их источников.
Используйте Обработчики уведомлений для интеграции с большинством распространённых сервисов хостинга исходного кода:
Вручную запускайте обновление либо в разделе управления репозиторием, либо с помощью REST API Weblate’а или клиента Weblate
Включите параметр
AUTO_UPDATE
для автоматического обновления всех компонентов на вашем экземпляре Weblate’аВыполните команду
updategit
(с выбранным проектом проекта или с ключом--all
для обновления всех проектов)
Всякий раз, когда 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’а.
См.также
Автоматическое получение изменений из GitHub’а¶
Weblate поставляется со встроенной поддержкой GitHub’а.
Если вы используете Hosted Weblate, рекомендуемый подход заключается в установке приложения Weblate, таким образом вы получите правильную настройку без необходимости в дополнительной настройке. Также оно может быть использовано для отправки изменений обратно в GitHub.
Для получения уведомлений о каждой отправке в репозиторий GitHub, добавьте в настройки репозитория (Webhooks) веб-обработчик Weblate, как показано на изображении ниже:

Для заполнения адреса полезной нагрузки (поля 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/
).

Автоматическое получение изменений из 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:

Автоматическое получение изменений из 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-адрес SSH |
пусто |
|
Отправка в отдельную ветку |
URL-адрес SSH |
Имя ветки |
|
GitHub’овский запрос на извлечение из форка |
пусто |
пусто |
|
GitHub’овский запрос на извлечение из ветки |
URL-адрес SSH 1 |
Имя ветки |
|
GitLab ’овский запрос на слияние из форка |
пусто |
пусто |
|
GitLab ’овский запрос на слияние из ветки |
URL-адрес SSH 1 |
Имя ветки |
|
Pagure’вский запрос на слияние из форка |
пусто |
пусто |
|
Pagure ’вский запрос на слияние из ветки |
URL-адрес SSH 1 |
Имя ветки |
- 1(1,2,3)
Может быть пустым в случае, если репозиторий исходного кода поддерживает отправку изменений.
Примечание
Также вы можете включить автоматическую отправку изменений после коммитов Weblate’а, это можно сделать установкой параметра Отправлять при коммите.
См.также
Для настройки ключей SSH смотрите раздел Доступ к репозиториям, а для получения информации о том, когда Weblate решает закоммитить изменения — раздел Отложенные коммиты.
Защищённые ветки¶
Если вы используете Weblate на защищённой ветке, вы можете настроить его на использование запросов на извлечение и выполнение рецензирования переводов (что может быть проблематично для языков, которых вы не знаете). Альтернативный подход заключается в отмене этого ограничения для пользователя Weblate.
Например, на GitHub’е это можно сделать в настройках репозитория:

Слияние или перебазирование¶
По умолчанию Weblate вливает вышестоящий репозиторий в свой собственный. Это самый безопасный способ в случае, если вы помимо этого работаете с нижележащим репозиторием и другими способами. Если вам это не нужно, вы можете включить перебазирование изменений на голову вышестоящего репозитория, что позволит создавать историю с меньшим количеством коммитов слияния.
Примечание
В случае сложных слияний перебазирование может доставить вам проблем, поэтому тщательно подумайте, хотите ли вы его включать или нет.
Взаимодействие с другими пользователями¶
Weblate облегчает взаимодействие с другими пользователями с помощью своего API.
См.также
Отложенные коммиты¶
Поведение Weblate’а заключается в группировке коммитов одного и того же автора в один коммит (если это возможно). Такая группировка значительно сокращает количество коммитов, однако вам может понадобиться явно приказать ему сделать коммиты в случае, если вы хотите синхронизировать репозиторий, например, для выполнения слияния (по умолчанию это действие разрешено для группы Управляющие, смотрите раздел Список привилегий).
Изменения в этом режиме коммитятся при выполнении любого из следующих условий:
Кто-то другой изменяет уже изменённую строку.
Происходит слияние с вышестоящим репозиторием.
Запрошен явный коммит изменений.
Изменения старше периода, определённого возрастом изменений для коммита в конфигурации компонента.
Подсказка
Коммиты создаются для каждого компонента. Так что в случае, если у вас много компонентов, у вас всё равно будет множество коммитов. В этом случае вы можете использовать надстройку Уплотнение Git-коммитов.
Если вы хотите коммитить изменения чаще и без проверки их возраста, вы можете запланировать для выполнения коммита обычное задание:
CELERY_BEAT_SCHEDULE = {
# Unconditionally commit all changes every 2 minutes
"commit": {
"task": "weblate.trans.tasks.commit_pending",
# Ommiting 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’а с репозиторием заключается в использовании надстроек. Для получения информации о том, как через надстройки выполнять внешние скрипты, обратитесь к разделу Выполнение скриптов из надстройки.
Поддержание единого перевода в разных компонентах¶
Если у вас несколько компонентов перевода, вы возможно захотите убедиться, что одни и те же строки имеют один и тот же перевод. Этого можно достичь на нескольких уровнях.
Распространение перевода¶
При включённой функции распространения перевода (которая включена по умолчанию, смотрите раздел Настройки компонента), все новые переводы автоматически копируются во все компоненты с совпадающими строками. Такие переводы должным образом засчитываются текущему пользователю-переводчику во всех компонентах.
Примечание
Распространение перевода требует, чтобы в одноязычных форматах файлов перевода ключи строк совпадали, так что об этом следует помнить при создании ключей перевода.
Проверка согласованности¶
Проверка Противоречия срабатывает всякий раз, когда строки отличаются друг от друга. Вы можете использовать это, чтобы отрецензировать такие различия вручную и выбрать правильный перевод.
Автоматический перевод¶
Автоматический перевод одних компонентов на основе переводов в других может быть способом синхронизации переводов между компонентами. Вы можете либо запустить его вручную (смотрите раздел Автоматический перевод), либо заставить его автоматически запускаться при обновлении репозитория с помощью надстройки Автоматический перевод.
Лицензирование переводов¶
Вы можете указать, по каким лицензиям предоставляются переводы. Особенно оно важно, если переводы находятся в открытом доступе, так как оно помогает определить, для чего они могут быть использованы.
Вы должны указать информацию о лицензии компонента. Вам следует избегать требования заключения лицензионного соглашения с участниками, хотя это вполне возможно.
Информация о лицензии¶
После указания информации о лицензии (её названия и URL-адреса) эта информация отображается в разделе «Инфо» соответствующего компонента.
Обычно, если на перевод не требуется явного согласия, это лучшее место для размещения информации о лицензии. Если ваш проект или перевод не являются свободными, то, скорее всего, предварительное согласие вам необходимо.
Соглашение участника¶
Если вы укажете лицензионное соглашение участника, то вносить свой вклад в перевод смогут только пользователи, с ним согласившиеся. Это хорошо заметный шаг, появляющийся при доступе к переводу:

Введённый текст разбивается на абзацы и может содержать внешние ссылки. Разметку HTML в нём использовать нельзя.
Пользовательские лицензии¶
Любой пользователь может просмотреть из своего профиля все лицензии на перевод всех публичных проектов на экземпляре:

Процесс перевода¶
Голосование по предложению¶
По умолчанию кто угодно может добавлять предложения, которые могут быть приняты зарегистрированными пользователями. Если вы хотите, чтобы для принятия предложения требовалось, чтобы с ним были согласны более одного зарегистрированного пользователя, то можно использовать систему голосования по предложениям, которое можно включить в настройках компонента параметром Голосование по предложению и настроить порог голосов, которые требуются для собственно принятия предложения в параметре Автоматическое принятие предложений (считается также голос пользователя, сделавшего это предложение).
Примечание
После настройки автоматического принятия обычные пользователи теряют привилегию непосредственного сохранения переводов или принятия предложений. Это можно отменить с помощью привилегии Правка строк, когда предложения являются обязательными permission.
Вы можете скомбинировать этот параметр с управлением доступом для получения одной из следующих установок:
Пользователи предлагают и голосуют за предложения, а ограниченная группа контролирует то, что принимается. — Включите голосование. — Отключите автоматическое принятие. — Не позволяйте пользователям сохранять переводы.
Пользователи предлагают и голосуют за предложения с автоматическим принятием предложения, как только с ним согласится определённое количество пользователей. — Включите голосование. — Установите желаемое количество голосов для автоматического принятия предложения.
Необязательное голосование по предложениям (по желанию может использоваться пользователями, когда они не уверены в переводе, и делают вместо него несколько предложений). — Включите только голосование.
Дополнительная информация об исходных строках¶
Сделайте процесс перевода проще и улучшите его качество, добавив дополнительную информацию о строках, а именно пояснения, приоритеты строк, флаги проверок и визуальный контекст. Часть этой информации может быть извлечена непосредственно из файлов переводов, а часть можно добавить отредактировав дополнительную информацию о строках:

Доступ к нему можно получить непосредственно из интерфейса перевода, нажав на иконку правки у разделов Контекст — снимок экрана или Флаги.

Приоритизация строк¶
Добавлено в версии 2.0.
Приоритет строк может быть изменён с помощью флага priority
, чтобы более приоритетные строки предлагались для перевода раньше.
Подсказка
Это можно использовать для перевода строк в логическом порядке.
См.также
Флаги перевода¶
Добавлено в версии 2.4.
Изменено в версии 3.3: Ранее поле называлось Отметки о проверке качества, но теперь оно настраивает не только проверки.
Умолчательный набор флагов перевода определяется переводимым компонентом и файлом перевода. Тем не менее, вы можете использовать данное поле для настройки этих флагов для каждой исходной строки.
Пояснение¶
Изменено в версии 4.1: В предыдущих версиях это поле называлось Дополнительный контекст.
Используйте пояснения, чтобы уточненять сферу применения или детали использования строки. В поле поддерживается разметка Markdown, так что вы можете добавлять в него ссылки или другие элементы разметки текста.
Визуальный контекст для строк¶
Добавлено в версии 2.9.
Вы можете загрузить снимок экрана, показывающий данную исходную строку в действии в вашей программе. Это поможет переводчикам понять, где она используется и как её следует переводить.
Загруженный снимок экрана отображается в боковой панели контекста перевода:

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

Проверки и исправления¶
Пользовательские автоматические исправления¶
Также в дополнение к стандартным вы можете реализовать своё собственное автоматическое исправление и включить его в список AUTOFIX_LIST
.
Автоматические исправления — это очень мощный инструмент, но они могут повредить перевод; будьте осторожны при их написании.
Например, следующее автоматическое исправление заменит каждое появление строки foo
в переводе на строку bar
:
#
# Copyright © 2012 - 2021 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, смотрите раздел Пользовательские проверки качества, надстройки и автоматические исправления.
Настройка поведения с помощью флагов¶
Вы можете тонко настроить поведение Weblate’а (в основном проверки) для каждой исходной строки (в рецензировании исходных строк, смотрите раздел Дополнительная информация об исходных строках) или в конфигурации компонента (Флаги перевода). Некоторые форматы файлов также позволяют указывать флаги непосредственно в формате (смотрите раздел Поддерживаемые форматы файлов).
Флаги разделяются запятыми, параметры флагов разделяются двоеточием. Для включения в строку пробела или специальных символов вы можете использовать кавычки. Например:
placeholders:"special:value":"other value", regex:.*
Вот список принимаемых в настоящее время флагов:
rst-text
Рассматривать текст как документ reStructuredText, влияет на проверку Перевод без изменения.
md-text
Рассматривать текст как документ Markdown.
dos-eol
Использовать маркеры конца строки DOS вместо маркеров Unix (комбинацию символов
\r\n
вместо символа\n
).url
Строка должна состоять только из URL-адреса.
safe-html
Строка должна быть безопасной для HTML, смотрите проверку Небезопасный HTML-код.
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
) для проверок отрисовки текста, смотрите раздел Управление шрифтами.placeholders:СТРОКА:СТРОКА2:...
Ожидаемые в переводе строки-заполнители, смотрите проверку Символы-заполнители.
replacements:С:НА:С2:НА2...
Замены, выполняемые при проверке параметров результирующего текста (например, в проверках Максимальный размер перевода или Максимальная длина перевода). Типовой случай использования этот флага — подстановка конкретных значений вместо заполнителей, чтобы гарантировать, что текст впишется в отведённые ему границы даже при использовании длинных строк, например:
replacements:%s:"Джон Доу"
.variants:ИСТОЧНИК
Добавить отметку, что данная строка является вариантом строки, указанной в качестве источника. Смотрите раздел «Варианты строк».
regex:РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ
Регулярное выражение для сопоставления с переводом, смотрите раздел Регулярное выражение.
forbidden
Используется для пометки переводов в глоссарии как нежелательных, смотреть раздел Нежелательные переводы.
python-format
,c-format
,object-pascal-format
,php-format
,python-brace-format
,javascript-format
,c-sharp-format
,java-format
,java-messageformat
,lua-format
,auto-java-messageformat
,qt-format
,qt-plural-format
,ruby-format
,scheme-format
,vue-format
Рассматривать все строки как строки формата, влияет на следующие проверки: Python-формат, C-формат, Формат Object Pascal, PHP- формат, Qt-формат, Формат множественного числа Qt, Ruby-формат, Форматирование Vue I18n, Python-формат: фигурные скобки, JavaScript-формат, C#-формат, Java-формат, Java MessageFormat, Lua-формат, Формат схемы, Перевод без изменения.
strict-same
Сделать так, чтобы проверка «Перевод без изменения» не использовал встроенный чёрного список слов, смотреть раздел Перевод без изменения.
check-glossary
Включить проверку качества «Не соответствует глоссарию».
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-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-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-long-untranslated
Пропускать проверку качества «Давно не переводилась».
ignore-multiple-failures
Пропускать проверку качества «Множество неудачных проверок».
ignore-unnamed-format
Пропускать проверку качества «Несколько переменных без названий».
ignore-optional-plural
Пропускать проверку качества «Формы единственного числа».
Примечание
В общем случае правило называется ignore-*
для любой проверки, где вместо звёздочки подставляется её идентификатор, так что вы можете использовать такое правило даже для своих собственных проверок.
Эти флаги понимаются как в параметрах компонента, так и в параметрах исходной строки или в самом файле перевода (например, в файле GNU gettext).
Принудительные проверки¶
Добавлено в версии 3.11.
Вы можете настроить список проверок, которые нельзя проигнорировать, задав в настройках компонента параметр Принудительные проверки. Все перечисленные проверки не смогут быть проигнорированы из пользовательского интерфейса, а любая строка, для которой такая проверка сработала, помечается флагом На правку (смотрите раздел Состояния перевода).
Управление шрифтами¶
Добавлено в версии 3.7.
Подсказка
Загруженные в Weblate шрифты используются исключительно для проверки максимального размера перевода; на пользовательский интерфейс они никак не влияют.
Проверке Максимальный размер перевода, которая вычисляет размер текста в пикселях после его отрисовки требуется, чтобы соответствующий шрифт был загружен в Weblate. Его также необходимо выбрать с помощью флагов перевода (смотреть раздел Настройка поведения с помощью флагов).
Загрузить шрифты в Weblate и управлять ими можно в пункте Шрифты меню Управлять вашего проекта перевода. Создайте группы шрифтов и используйте их в проверках. Поддерживаются шрифты TrueType и OpenType.
Группы шрифтов позволяют вам определить различные шрифты для разных языков, что обычно необходимо для языков, алфавит которых не использует латиницу:

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

Семейство и начертание шрифта распознаются автоматически после его загрузки:

Вы можете загрузить в Weblate несколько шрифтов:

Чтобы использовать шрифты в проверке длины строки, передайте проверке соответствующие флаги (смотрите раздел Настройка поведения с помощью флагов). Скорее всего, вам понадобятся следующие из них:
max-size:500
Определяет максимальную ширину.
font-family:ubuntu
Определяет используемую группу шрифтов путём указания её идентификатора.
font-size:22
Определяет размер шрифта.
Написание собственных проверок¶
Хотя в Weblate встроен широкий спектр проверок качества (смотрите раздел Проверки качества), они могут охватывать не всё, что вы хотите проверить. Список выполняемых проверок можно настроить с помощью параметра CHECK_LIST
, кроме того, вы можете добавить собственные проверки.
Создайте подкласс weblate.checks.Check
Установите несколько атрибутов.
Реализуйте либо метод
check
(если вы хотите работать в своём коде с формами множественного числа), либо методcheck_single
(который сам выполняет такую обработку).
Несколько примеров:
Для установки пользовательских проверок необходимо в списке CHECK_LIST
указать полный путь к классу Python, смотрите раздел Пользовательские проверки качества, надстройки и автоматические исправления.
Проверка, что текст перевода не содержит подстроки «foo»¶
Это довольно простая проверка, которая просто проверяет, не пропущена ли в переводе строка «foo».
#
# Copyright © 2012 - 2021 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 - 2021 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. Turn on this service by adding weblate.machinery.aws.AWSTranslation
to
MT_SERVICES
.
Установите модуль boto3.
Настройте 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
.
Glosbe¶
Бесплатный словарь и память переводов для почти всех живых языков.
API можно использовать бесплатно, но при условии наличия лицензии на используемый источник данных. Для борьбы со злоупотреблениями существует ограничение на количество вызовов API, которое можно выполнить с одного IP в течение установленного периода времени.
Этот сервис включается добавлением в список MT_SERVICES
значения weblate.machinery.glosbe.GlosbeTranslation
.
См.также
Google Translate¶
Сервис машинного перевода, предоставляемый 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’а.
Сперва вам нужно импортировать в память переводов некоторые данные:
Этот сервис включается добавлением в список 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
Запустите tmserver, чтобы он слушал ваши запросы:
tmserver -d /var/lib/tm/db
Настройте 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 - 2021 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
.

Встроенные надстройки¶
Автоматический перевод¶
Добавлено в версии 3.9.
- ID надстройки
weblate.autotranslate.autotranslate
- Конфигурация
mode
Режим автоматического перевода
filter_type
Фильтр поиска
auto_source
Источник автоматического перевода
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
. Таким образом, внутри одной системы контроля версий вы можете отслеживать несколько компонентов перевода.
Сопоставление осуществляется с помощью регулярных выражений, что даёт возможность задать достаточно сложную конфигурацию, хотя это и требует некоторого количества начальных знаний. Для распространённых случаев в справочном разделе надстройки можно найти ряд примеров.
Когда вы нажмёте Сохранить, надстройка предварительно покажет найденные компоненты, так что вы сможете проверить, действительно ли такая конфигурация соответствует вашим потребностям:

Подсказка
Надстройка «Обнаружение компонентов» использует Внутренние URL-адреса Weblate. Это удобный способ совместного использования системы контроля версий разными компонентами. Привязать дополнительные компоненты к основному так, чтобы они использовали его локальный репозиторий, можно, задав в качестве Репозиторий исходного кода адрес вида weblate://проект/основной-компонент
(в разделе Управление ↓ Параметры ↓ Система контроля версий) для каждого такого компонента. Это сэкономит не только ваше время на настройку, но и системные ресурсы.
См.также
Массовая правка¶
Добавлено в версии 3.11.
- ID надстройки
weblate.flags.bulk
- Конфигурация
q
Запрос
state
Задаваемое состояние
add_flags
Добавляемые флаги перевода
remove_flags
Удаляемые флаги перевода
add_labels
Добавляемые метки
remove_labels
Удаляемые метки
Позволяет массово править флаги, метки или состояния строк.
Для того чтобы начать автоматизацию расстановки меток, можно найти все строки по запросу NOT has:label
и добавлять нужные метки до тех пор, пока не будет достигнут нужный эффект. Аналогично вы можете выполнять любые другие автоматические операции с метаданными Weblate.
Примеры:
Поисковый запрос |
|
---|---|
Добавляемые метки |
recent |
Поисковый запрос |
|
---|---|
Добавляемые флаги перевода |
|
Пометка неизменённых переводов флагом «На правку»¶
Добавлено в версии 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 }}", }
См.также
Генератор псевдолокалей¶
- ID надстройки
weblate.generate.pseudolocale
- Конфигурация
source
Исходные строки
target
Целевой перевод
prefix
Префикс строки
suffix
Суффикс строки
Генерирует дополнительный перевод, автоматически добавляя префикс и суффикс к исходным строкам.
Псевдолокали могут быть полезны для поиска строк, которые небыли подготовлены для локализации должным образом. Это происходит с помощью автоматического изменения всех переводимых исходных строк, дабы те строки, которые не были изменены, было бы достаточно просто заметить при запуске приложения.
Также с помощью этого возможно отследить те строки, чьи локализованные версии могут не уместиться в отведённое под них место и ломать вёрстку.
Подсказка
Хотя вы и можете использовать настоящие языки для проверки, но для этой цели в Weblate уже есть специальные псевдолокали: en_XA и ar_XB.
Подсказка
You can use this add-on to start translation to a new locale of an existing language or similar language. Once you add the translation to the component, follow to the add-on. Example: If you have fr and want to start fr_CA translation, simply set fr as the source, fr_CA as the target, and leave the prefix and suffix blank.
Uninstall the add-on once you have the new translation filled to prevent Weblate from changing the translations made after the copying.
Участники в комментарии¶
- 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, они будут переносится только на символе переноса строки.
Позволяет настроить поведение вывода 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
Уплотнение коммитов
append_trailers
Добавлять завершители в конец сообщения уплотнённого коммита
Строки завершителя — это строки, похожие на заголовки электронной почты RFC 822, добавляемые в конец сообщения коммита после его части в свободной форме. К примеру, «Co-authored-by: …».
commit_message
Сообщение коммита
Это сообщение коммита будет использоваться вместо сообщения, собранного из уплотнённых коммитов.
Уплотняет (squash) Git-коммиты перед отправкой изменений.
Git-коммиты могут быть уплотнены перед отправкой изменений в одном из следующих режимов:
Добавлено в версии 3.4.
Все коммиты в один
По языку
По файлу
Добавлено в версии 3.5.
По автору
Исходные сообщения коммита сохраняются, но авторство коммитов теряется, если только не выбран режим По автору, или сообщение коммита не настроено на включение в него его авторов.
Добавлено в версии 4.1.
Исходные сообщения коммитов могут быть переопределены пользовательским сообщением коммита.
Дополнительно из исходных сообщений коммитов могут быть удалены завершители (строки коммита вида Co-authored-by: …
) с последующим их присоединением к концу сообщения уплотнённого коммита. Также в этом режиме для каждого переводчика генерируется соответствующий завершитель Co-authored-by:
.
Настройка вывода в JSON¶
- ID надстройки
weblate.json.customize
- Конфигурация
sort_keys
Сортировка JSON-ключей
indent
Отступы JSON
Позволяет подправить поведение вывода в 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
Перенос длинных строк
line_break
Символ перевода строки
Позволяет подправить поведение вывода в YAML, например, длину строк и символы перевода строк.
Настройка списка надстроек¶
Список надстроек настраивается параметром WEBLATE_ADDONS
. Для добавления ещё одной надстройки просто включите в этот параметр полное имя класса.
Создание надстройки¶
Также вы можете создать свою собственную надстройку: просто создайте подкласс weblate.addons.base.BaseAddon
, чтобы определить метаданные надстройки, а затем реализуйте нужный обратный вызов, который будет выполнять обработку.
См.также
Выполнение скриптов из надстройки¶
Надстройки также могут использоваться для выполнения внешних скриптов. Раньше выполнение было интегрировано в сам Weblate, но теперь вам нужно написать код для заворачивания вашего скрипта в надстройку.
#
# Copyright © 2012 - 2021 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 addon 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’е (зависят от областей действия памяти переводов).
Автоматически импортированные прошлые переводы.
Содержимое памяти переводов может быть применено одним из двух способов:
Вручную во время перевода, на вкладке «Автоматизированный перевод».
Автоматически, путём перевода строк с помощью инструмента Автоматический перевод или надстройки Автоматический перевод.
Подсказки по установке смотрите в памяти переводов Weblate’а, которая включена по умолчанию.
Области действия памяти переводов¶
Добавлено в версии 3.2: В более ранних версиях память переводов могла быть загружена только из файла, соответствующего области действия текущей импортированной памяти переводов.
Области действия памяти переводов позволяют обеспечить как конфиденциальность, так и совместное использование переводов в соответствии с желаемым поведением.
Импортированная память переводов¶
Импорт произвольных данных памяти переводов с помощью команды import_memory
делает содержимое памяти переводов доступным для всех пользователей и проектов.
Память переводов пользователя¶
Автоматически сохраняет все переводы пользователя в персональной памяти переводов соответствующего пользователя.
Память переводов проекта¶
Все переводы в рамках проекта автоматически сохраняются в памяти переводов проекта, доступной только для этого проекта.
Управление памятью переводов¶
Пользовательский интерфейс¶
Добавлено в версии 3.2.
В базовом пользовательском интерфейсе вы можете управлять памятью переводов пользователя и проекта. Через него вы можете загружать, стирать или импортировать память переводов.
Подсказка
В Weblate может быть импортирована память переводов в формате JSON, формат TMX предусмотрен для взаимодействия с другими инструментами.
См.также

Интерфейс управления¶
Для управления содержимым памяти переводов существует несколько команд управления. Они работают с памятью переводов целиком, не применяя фильтр по областям (если только этот фильтр не запрошен параметрами):
dump_memory
Экспортирует память переводов в виде JSON’а
import_memory
Импортирует файлы TMX или JSON в память переводов
Конфигурация¶
Все настройки хранятся в файле settings.py
(как обычно для проектов Django).
Примечание
После изменения любого из этих параметров вам необходимо перезапустить Weblate — как процесс WSGI, так и процесс Celery.
В случае, если Weblate работает через mod_wsgi
, для перезагрузки конфигурации вам нужно перезапустить Apache.
См.также
Также, пожалуйста, ознакомьтесь с документацией Django по настройке параметров самого Django.
AUDITLOG_EXPIRY¶
Добавлено в версии 3.6.
Сколько дней Weblate должен хранить журналы аудита, в которых содержится информация о деятельности учётной записи.
По умолчанию установлен в 180 дней.
AUTH_LOCK_ATTEMPTS¶
Добавлено в версии 2.14.
Максимальное количество неудачных попыток аутентификации до применения ограничения частоты запросов.
В настоящее время оно применяется в следующих местах:
Страница входа. Удаляет пароль учётной записи, не позволяя пользователю войти в систему без запроса нового пароля.
Страница сброса пароля. Предотвращает отправку новых писем, избегая рассылки спама пользователям со слишком большим количеством попыток сброса пароля.
По умолчанию установлен в 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.
Определяет, как часто для компонента должны запускаться задачи длительного обслуживания.
В данный момент оно управляет:
addon-weblate.autotranslate.autotranslate.autotranslate addon
Перерасчёт: Проверки и исправления
Возможные варианты:
``monthly``(ежемесячно) (по умолчанию)
weekly
daily
never
Примечание
Увеличение частоты не рекомендуется, если Weblate содержит тысячи компонентов.
BASE_DIR¶
Базовый каталог, в котором находятся исходники Weblate’а. Используется для построения нескольких других умолчательных путей:
Значение по умолчанию: каталог верхнего уровня исходников Weblate’а.
BASIC_LANGUAGES¶
Добавлено в версии 4.4.
Список языков, который будет предлагаться пользователям при создании нового перевода. Если не задан, то будет использоваться встроенный список, который включает все распространённые языки, но без добавления вариантов для конкретных стран.
Это не даёт непривилегированным пользователям добавлять нежелательные языки. Это не влияет на администраторов проектов — они всё также могут выбирать из полного списка языков, доступных в Weblate.
Примечание
Это также не определяет новые языки в Weblate, а только фильтрует те, что уже присутствуют в базе данных.
Пример:
BASIC_LANGUAGES = {"cs", "it", "ja", "en"}
См.также
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.
Настраивает способ отправки электронной почты из контактной формы. Выберите конфигурацию, соответствующую конфигурации вашего почтового сервера.
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_LANGUAGE¶
Добавлено в версии 4.3.2.
Язык по умолчанию, который будет использоваться, например как исходный язык.
По умолчанию — en. Соответствующая запись для данного языка должна присутствовать в базе данных.
См.также
DEFAULT_MERGE_STYLE¶
Добавлено в версии 3.4.
Стиль слияния для любых новых компонентов.
rebase — по умолчанию
merge
См.также
DEFAULT_TRANSLATION_PROPAGATION¶
Добавлено в версии 2.5.
Значение по умолчанию для настройки распространения перевода, по умолчанию установлен в True
.
DEFAULT_PULL_MESSAGE¶
Заголовок для новых запросов на извлечение, по умолчанию равен 'Update from Weblate'
.
ENABLE_AVATARS¶
Включить ли для пользователей Gravatar-аватары. По умолчанию они включены.
Аватары извлекаются и кэшируются на сервере, что снижает риск утечки персональной информации и ускоряет взаимодействие с пользователем.
См.также
ENABLE_HTTPS¶
Отправлять ли ссылки на Weblate по протоколу HTTPS или HTTP. Этот параметр влияет на отправленные сообщения электронной почты и сгенерированные абсолютные URL-адреса.
В конфигурации по умолчанию он также используется для нескольких связанных с HTTPS параметров Django — он включает безопасные куки, переключает HSTS или включает перенаправление на HTTPS-адрес.
С перенаправлением на HTTPS в некоторых случаях могут быть проблемы: например, если вы используете обратный прокси, который выполняет SSL-терминацию из-за чего заголовки протокола не передаются Django в корректном виде, то вы можете столкнуться с бесконечным перенаправлением. В таком случае подкрутите настройке своего обратного прокси, дабы он добавлял заголовки X-Forwarded-Proto
или Forwarded
, или настройте SECURE_PROXY_SSL_HEADER
, чтобы Django мог корректно определять статус SSL.
ENABLE_SHARING¶
Включает/выключает меню Поделиться, с помощью которого пользователи могут делиться прогрессом перевода в социальных сетях.
GET_HELP_URL¶
Добавлено в версии 4.5.2.
URL, где можно найти поддержку для вашего экземпляра Weblate.
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.
Прячет информацию о версии от неаутентифицированных пользователей. Это также перенаправляет все ссылки на документацию последней версии вместо той, которая на самом деле установлена.
Скрытие версии — рекомендованная мера безопасности в некоторых корпорациях, хотя это и не предотвращает того, что атакующий сможет выяснить версию зондируя поведение системы.
Примечание
По умолчанию этот параметр выключен.
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.
LEGAL_URL¶
Добавлено в версии 3.5.
URL-адрес, по которому ваш экземпляр Weblate показывает свои юридические документы.
Подсказка
Полезен, если вы размещаете свои юридические документы за пределами Weblate’а для дальнейшего их встраивания в Weblate, для получения подробной информации обратитесь к разделу Правовые вопросы.
Пример:
LEGAL_URL = "https://weblate.org/terms/"
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¶
Должна ли длина данного перевода быть ограничена. Ограничением является количество символов исходной строки, увеличенное в 10 раз.
Подсказка
Установите его значение в False
для разрешения более длинных переводов (до 10 000 символов) независимо от длины исходной строки.
Примечание
По умолчанию установлен в 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, как показано в примере выше.
См.также
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¶
Полный URL-адрес (включая завершающую косую черту) установки Matomo (бывшего Piwik), которую вы хотите использовать для отслеживания использования Weblate. Для получения более подробной информации обратитесь к <https://matomo.org/>.
Подсказка
Эта интеграция не поддерживает Matomo Tag Manager.
Например:
MATOMO_SITE_ID = 1
MATOMO_URL = "https://example.matomo.cloud/"
См.также
MT_SERVICES¶
Изменено в версии 3.0: Параметр был переименован с MACHINE_TRANSLATION_SERVICES
на MT_SERVICES` для соответствия названиям других параметров машинного перевода.
Список включённых сервисов машинного перевода.
Примечание
Многим сервисам нужна дополнительная настройка, например, задание ключей API, для получения более подробной информации обратитесь к их документации в разделе Машинный перевод.
MT_SERVICES = (
"weblate.machinery.apertium.ApertiumAPYTranslation",
"weblate.machinery.deepl.DeepLTranslation",
"weblate.machinery.glosbe.GlosbeTranslation",
"weblate.machinery.google.GoogleTranslation",
"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_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_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_URL¶
URL-адрес ModernMT. По умолчанию для облачного сервиса используется https://api.modernmt.com/
.
См.также
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.
См.также
tmserver, Машинный перевод, Автоматические предложения, 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.
Default number of elements to display when pagination is active.
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, необходимых для обновления перевода.
См.также
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
.
SESSION_COOKIE_AGE_AUTHENTICATED¶
Добавлено в версии 4.3.
Задать время истечения сессии аутентифицированных пользователей. Этот параметр дополняет SESSION_COOKIE_AGE
, который используется для неаутентифицированных пользователей.
См.также
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", "…")
SINGLE_PROJECT¶
Добавлено в версии 3.8.
Перенаправляет пользователей непосредственно в проект или компонент вместо отображения панели управления. Вы можете установить параметр в True
, в этом случае он будет работать только в том случае, если в Weblate’е и в самом деле есть только один проект. Или же можно задать плашку проекта, тогда пользователь будет безоговорочно перенаправлен в этот проект.
Изменено в версии 3.11: Теперь параметр также принимает плашку проекта для принудительного отображения этого единственного проекта.
Пример:
SINGLE_PROJECT = "test"
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 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.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 - 2021 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,
},
}
}
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 = ""
_TEMPLATE_LOADERS = [
"django.template.loaders.filesystem.Loader",
"django.template.loaders.app_directories.Loader",
]
if not DEBUG:
_TEMPLATE_LOADERS = [("django.template.loaders.cached.Loader", _TEMPLATE_LOADERS)]
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",
],
"loaders": _TEMPLATE_LOADERS,
},
}
]
# 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.BitbucketOAuth",
# "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_BITBUCKET_KEY = ""
SOCIAL_AUTH_BITBUCKET_SECRET = ""
SOCIAL_AUTH_BITBUCKET_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.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
# 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.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.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
# )
# 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¶
Очищает осиротевшие проверки и предложения перевода. Обычно запускать её вручную нет необходимости, поскольку очистка происходит автоматически в фоновом режиме.
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>¶
Сбрасывает данные пользователя в файл для последующего их использования командой 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¶
- 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
, чтобы получить список всех переводчиков всех существующих компонентов.
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
для обновления всех существующих компонентов.
См.также
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
для обновления всех существующих компонентов.
См.также
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: В предыдущих выпусках эта функция называлась «доской сообщений».
Предоставляет информацию вашим переводчикам путём размещения объявлений для всего сайта, проекта, компонента или языка.
Объявите цель, сроки, статус или укажите цели перевода.
Пользователи будут получать уведомления об объявлениях в отслеживаемых ими проектах (если только они не откажутся от получения таких уведомлений).
Это может быть полезно для различных вещей, начиная от объявления намерений веб-сайта и заканчивая указанием целей для перевода.
Объявления могут быть размещены на каждом уровне через меню Управлять при помощи его пункта Опубликовать объявление:

Также его можно добавить через интерфейс администратора:

Объявления показываются в соответствии с заданным для них контекстом:
Контекст не указан
Показываются в панели управления (на странице входа).
Указан проект
Показываются внутри проекта, включая все его компоненты и переводы.
Указан компонент
Показываются для данного компонента и всех его переводов.
Указан язык
Показываются в обзоре по языку и во всех переводах на этот язык.
Вот как оно выглядит на странице обзора языка:

Списки компонентов¶
Укажите несколько списков компонентов, чтобы они появились в качестве вариантов выбора на панели управления пользователя, из которых пользователи смогут выбрать один из них, как своё умолчательное представление панели. Для получения более подробной информации смотрите раздел Панель управления.
Изменено в версии 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¶
Для вашей установки доступно несколько дополнительных модулей.
Экспортер Git¶
Добавлено в версии 2.10.
Предоставляет доступ на чтение к нижележащему репозиторию Git через HTTP(S).
Установка¶
Добавьте
weblate.gitexport
в установленные приложения в файлеsettings.py
:
INSTALLED_APPS += ("weblate.gitexport",)
Экспортируйте существующие репозитории, выполнив перено своей базы данных после установки:
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",)
Запустите миграцию базы данных для необязательной установки для модуля дополнительных структур базы данных:
weblate migrate
Использование¶
После установки вы сможете в интерфейсе администратора управлять тарификацией. У пользователей с включённой функцией тарификации в их профиле появится новая вкладка Тарифный план.
Также модуль тарифных планов даёт возможность администраторам проектов создавать новые проекты и компоненты без прав суперпользователя (смотреть раздел Добавление проектов и компонентов перевода). Это становится возможным, если удовлетворены следующие условия:
Тариф не исчерпал заданные лимиты (любое избыточное использование ресурсов влечёт блокировку создания проектов/компонентов) и оплачен (если он не бесплатный)
Пользователь является администратором существующего тарифицируемого проекта или владельцем тарифного плана (последнее необходимо пользователям только подписавшимся на тариф для того, чтобы они могли загрузить новый проект).
При создании проекта пользователь может выбрать, к какому тарифу проект должен относиться, если у пользователя их несколько.
Правовые вопросы¶
Добавлено в версии 2.15.
Этот модуль используется на Облачном хостинге Weblate для вывода необходимых юридических документов. Он поставляется в комплекте с набором незаполненных документов. Предполагается, что вы самостоятельно заполните следующие шаблоны:
legal/documents/tos.html
Документ условий обслуживания
legal/documents/privacy.html
Документ политики конфиденциальности
legal/documents/summary.html
Краткий обзор условий обслуживания и политики конфиденциальности
Примечание
Правовые документы облачного хостинга Weblate доступны в git-репозитории: <https://github.com/WeblateOrg/wllegal/tree/main/wllegal/templates/legal/documents>.
Скорей всего, вы не сможете просто «взять и использовать» их, так как они вам не подойдут. Однако, вы можете скорректировать их под свои нужды или они могут послужить отправной точкой при написании собственных документов.
Установка¶
1. Add weblate.legal
to installed apps in
settings.py
:
INSTALLED_APPS += ("weblate.legal",)
# Optional:
# Social auth pipeline to confirm TOS upon registration/subsequent sign in
SOCIAL_AUTH_PIPELINE += ("weblate.legal.pipeline.tos_confirm",)
# Middleware to enforce TOS confirmation of signed in users
MIDDLEWARE += [
"weblate.legal.middleware.RequireTOSMiddleware",
]
Запустите миграцию базы данных для необязательной установки для модуля дополнительных структур базы данных:
weblate migrate
Отредактируйте юридические документы в каталоге
weblate/legal/templates/legal/
в соответствии с вашими условиями.
Использование¶
После установки и редактирования юридические документы будут отображаться в пользовательском интерфейсе Weblate.
Аватары¶
Аватары загружаются и кэшируются на стороне сервера, чтобы уменьшить утечку информации на сайты, обслуживающие их по умолчанию. Встроенную поддержку получения аватаров из настроенных для этого адресов электронной почты можно отключить с помощью параметра ENABLE_AVATARS
.
В настоящее время Weblate поддерживает:
См.также
Защита от спама¶
Вы можете защититься от спама от пользователей, воспользовавшись сервисом Akismet.
Установите Python-модуль akismet (он уже включён в официальный образ Docker).
Получите API-ключ Akismet.
Сохранить как
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/):

2. Alternatively you can also import existing keys into Weblate, just set
HOME=$DATA_DIR/home
when invoking gpg.
См.также
Ограничение частоты запросов¶
Изменено в версии 3.2: Модуль «Ограничение частоты запросов» теперь допускает более тонкую настройку.
Изменено в версии 4.6: Ограничение скорости больше не применяется к суперпользователям.
Некоторые операции Weblate ограничены по частоте. Допустимо не более RATELIMIT_ATTEMPTS
попыток за период RATELIMIT_WINDOW
секунд. Если это количество превышено, то пользователь блокируется на RATELIMIT_LOCKOUT
секунд. Существуют также параметры, задающие ограничения, специфические для конкретных действий, например RATELIMIT_CONTACT_ATTEMPTS
или RATELIMIT_TRANSLATE_ATTEMPTS
. Следующая таблица является исчерпывающим списком таких параметров.
Следующие операции подвержены ограничению частоты запросов:
Имя |
Область |
Допустимо попыток |
Временное окно |
Период блокировки |
---|---|---|---|---|
Регистрация |
|
5 |
300 |
600 |
Отправка сообщения администраторам |
|
5 |
300 |
600 |
Аутентификация по паролю при входе |
|
5 |
300 |
600 |
Поиск по всему сайту |
|
6 |
60 |
60 |
Перевод |
|
30 |
60 |
600 |
Добавление в глоссарий |
|
30 |
60 |
600 |
Начало перевода на новый язык |
|
2 |
300 |
600 |
Если у пользователя не получается залогинится с AUTH_LOCK_ATTEMPTS
попыток, то аутентификация по паролю полностью отключается до тех пор пока пользователь не сбросит свой пароль.
Настройки можно также применить в 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:
Создайте каталог для вашего пакета (мы будем использовать weblate_customization).
В нём создайте файл
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"], )
Создайте каталог для модуля Python (также назовём его
weblate_customization
), в котором будет содержаться ваш код.В нём создайте файл
__init__.py
, чтобы Python смог импортировать этот модуль.Теперь этот пакет можно установить командой pip install -e. Более подробную информацию можно найти в документе «Редактируемые» установки.
После установки этот модуль можно использовать в настройках Weblate’а (например,
weblate_customization.checks.FooCheck
).
Структура вашего модуля должна выглядеть примерно так:
weblate_customization
├── setup.py
└── weblate_customization
├── __init__.py
├── addons.py
└── checks.py
Пример настройки Weblate’а можно найти по адресу <https://github.com/WeblateOrg/customize-example>, он охватывает все описанные ниже темы.
Изменение логотипа¶
Создайте простое приложение Django, содержащее статические файлы, которые вы хотите перезаписать (смотрите раздел Создание модуля Python).
Стилизуемые элементы расположены в следующих файлах:
icons/weblate.svg
Логотип, отображаемый на панели навигации.
logo-*.png
Веб-иконки для разных разрешений экрана и веб-браузеров.
favicon.ico
Веб-иконка, используемая устаревшими браузерами.
weblate-*.png
Аватары ботов и анонимных пользователей. Некоторые веб-браузеры используют их также в качестве картинок для ярлыков на стартовой странице.
email-logo.png
Используется в уведомлениях по электронной почте.
Добавьте его в
INSTALLED_APPS
:INSTALLED_APPS = ( # Add your customization as first "weblate_customization", # Weblate apps are here… )
Запустите
weblate collectstatic --noinput
, чтобы собрать статические файлы, предназначенные для передачи клиентам.
Пользовательские проверки качества, надстройки и автоматические исправления¶
Для добавления в Weblate собственного кода для автоматических исправлений, проверок или надстроек:
Поместите файлы в модуль Python, содержащий вашу модификацию Weblate’а (смотрите раздел Создание модуля Python).
Добавьте полное имя класса 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/
. Доступ к нему может получить только пользователь, вошедший в систему с правами администратора, через иконку гаечного ключа справа вверху:

Он включает базовый обзор вашего Weblate:
Статус поддержки, смотреть раздел Получение поддержки по Weblate
Резервные копии, смотреть раздел Резервное копирование и перенос Weblate
Совместная память переводов, смотреть Память переводов
Отчёты о производительности, чтобы оценить состояние здоровья Weblate и длину очередей Celery
Управление SSH-ключами, смотреть Репозитории по SSH
Обзор предупреждений по всем компонентам, смотреть раздел Предупреждения компонента перевода
Интерфейс администратора Django¶
Предупреждение
В будущем будет удалён, поскольку его использование не рекомендуется — большинством возможностей можно управлять непосредственно из Weblate’а.
Здесь вы можете управлять объектами, хранящимися в базе данных, такими как пользователи или переводы, а также другими настройками:

В разделе Отчёты вы можете проверить статус вашего сайта, настроить его для рабочей среды, или управлять ключами SSH, используемыми для доступа к репозиториям.
Управление объектами базы данных под любым разделом. Самым интересным из них является, наверное, Переводы Weblate’а, в котором можно управлять переводимыми проектами, смотрите разделы Настройки проекта и Настройки компонента.
Раздел Языки Weblate содержит определения языков, более подробное объяснение смотрите в разделе Определение языков.
Добавление проекта¶
Добавление проекта служит контейнером для всех компонентов. Обычно вы создаёте один проект для одной части программного обеспечения или книги (для справки по параметрам смотрите раздел Настройки проекта):

См.также
Двуязычные компоненты¶
После добавления проекта в него можно добавить компоненты перевода (для справки по параметрам смотрите раздел Настройки компонента):

Одноязычные компоненты¶
Для облегчения их перевода предоставьте шаблон файла, содержащий отображение идентификаторов сообщений на соответствующие строки на языке оригинала (обычно это английский) (для справки по параметрам смотрите раздел Настройки компонента):

Получение поддержки по Weblate¶
Weblate — это свободное программное обеспечение с поддержкой сообщества, выпускаемое на условиях авторского лева. Подписчики получают приоритетную поддержку без дополнительной оплаты. Предоплаченные пакеты помощи доступны для всех. Более подробную информацию о текущих предложениях поддержки вы можете найти по адресу <https://weblate.org/support/>.
Интегрированная поддержка¶
Добавлено в версии 3.8.
Приобретённый пакет платной поддержки может быть, по вашему желанию, интегрирован в ваш интерфейс управления подпиской Weblate, где вы найдёте на него ссылку. В этом случае основные сведенья о вашей установке будут переданы Weblate.

Данные передаваемые Weblate¶
URL, на котором настроен ваш экземпляр Weblate
Заголовок вашего сайта
Ваша версия Weblate
Колличество некоторых объектов в вашей базе данных Wablate (проектов, компонентов, языков, исходных строк и пользователей)
Открытый SSH-ключ
Кроме того, когда Освойте Weblate включен:
Список общественных проектов (название, URL и веб-сайт)
Ни какая другая информация не передаётся.
Доступные сервисы при включении интеграции¶
Просмотр, действителен ли ещё ваш пакет поддержки
Подсказка
Платные пакеты поддержки уже активирован сразу после приобретения. Их можно использовать и без интеграции.
Освойте Weblate¶
Добавлено в версии 4.5.2.
Примечание
В настоящее время эта функция находится в стадии раннего бета-тестирования.
Discover Weblate - это услуга, которая облегчает пользователям поиск серверов и сообществ Weblate. Пользователи могут просматривать зарегистрированные сервисы на <https://weblate.org/discover/> и находить там проекты для участия.
Попадание в список¶
Подсказка
Участие в Discover Weblate заставляет Weblate передавать некоторую информацию о вашем сервере, смотреть раздел Данные передаваемые Weblate.
Чтобы включить сервер с активной подпиской на поддержку (смотреть раздел Интегрированная поддержка) в Discover Weblate, достаточно включить этот параметр в панели управления:

Размещение сервера без подписки на поддержку в Discover Weblate:
Зарегистрироваться на <https://weblate.org/user/>
Зарегистрируйте свой сервер Weblate в базе данных обнаружения на <https://weblate.org/subscription/discovery/>
Подтвердите активацию услуги в вашем Weblate и включите список обнаружения на странице управления Weblate с помощью кнопки Включить обнаружение:

Настройка списка¶
Вы можете настроить список, предоставив текст и изображение (570 x 260 пикселей) на <https://weblate.org/user/>.
Правовые документы¶
Примечание
Здесь вы найдёте информацию по различным правовым вопросам, которая может вам потребоваться при работе с Weblate в определённых юрисдикциях. Она приведена исключительно в качестве рекомендации без каких-либо гарантий точности или корректности оной. В конце концов, обеспечение того, чтобы то, как вы используете Weblate, соответствовало всем применимым законам и нормам, является исключительно вышей ответственностью.
ITAR и другие меры контроля экспорта¶
Weblate может быть запущен в вашем собственном датацентре или виртуальном частном облаке. В этом случае, он также может быть использован для хранения информации, подпадающей под ограничения, наложенные ITAR (International Traffic in Arms Regulations, Правилами международной торговли оборонной продукцией США) или какими-либо другими правилами; однако, в таком случае ответственность за соответствие всей информации данным правилам несут сами конечные пользователи.
Облачный хостинг Weblate не проверялся на соответствие требованиям ITAR или каким-либо другим правилам контроля экспорта, а также на данный момент не предоставляет каких-либо возможностей для ограничения доступа переводчиков в зависимости от их страны.
Ограничения на шифрование в США¶
Weblate сам по себе не содержит какой-либо криптографический код, хотя и может быть предметом ограничений на шифрование, так как он использует другие сторонние компоненты, использующие криптографию для аутентификации, а также контроля целостности и конфиденциальности данных.
Скорей всего Weblate был бы классифицирован, как ECCN (Export Control Classification Number, Номер классификации контролируемого экспорта) 5D002 или 5D992 и, так как он является публично-доступным свободным ПО, он не должен подпадать под действие EAR (Export Administration Regulations, административные ограничения на экспорт, смотреть Элементы шифрования НЕ подпадающие под действие EAR).
Программные компоненты, используемые Weblate (перечислены только компоненты связанные с криптографическим функционалом):
- Python
Смотрите https://wiki.python.org/moin/PythonSoftwareFoundationLicenseFaq#Is_Python_subject_to_export_laws.3F
- GnuPG
Используется Weblate в качестве опции
- Git
Используется Weblate в качестве опции
- curl
Используется Git
- OpenSSL
Используется Python и cURL
Стойкость ключей шифрования зависит от настроек Weblate и сторонних компонентов, с которыми он взаимодействует, но в любой приличной конфигурации он будет включать различную функциональность, на которую накладываются ограничения связанные с криптографией:
Симметричные алгоритмы с ключом превышающем 56 бит
Факторизация целых чисел превышающих 512 бит (в асимметричных алгоритмах)
Вычисление дискретных логарифмов в мультипликативной группе конечного поля размерностью больше 512 бит для асимметричных алгоритмов
Дискретные логарифмы в группах отличных от вышеперечисленных и превышающие 112 бит для асимметричных алгоритмов
В Weblate нет ни каких механизмов дезактивации криптографии, но он может быть настроен таким образом, чтобы никакой криптографический код не вовлекался. Криптографические функции включают:
Доступ к удалённым серверам по безопасным протоколам (HTTPS)
Создание PGP подписей для коммитов
Знакомство с интернационализацией¶
У вас есть проект и вы хотите перевести его на несколько языков? Это руководство вам в этом поможет. В нём приведены несколько типовых ситуаций, но большинство примеров достаточно общие, так что они могут быть применены и в других случаях.
Перед тем, как переводить какое-либо программное обеспечение, вы должны осознать, что языки в мире сильно отличаются друг от друга, так что вы не должны делать никаких предположений, основанных на вашем опыте. Если вы попытаетесь собрать предложение из отдельно переведённых сегментов, в большинстве языков оно будет выглядеть очень странно. Также вы должны правильно обрабатывать множественные формы, поскольку во многих языках они строятся по сложным правилам, а используемый вами фреймворк интернационализации должен их поддерживать.
И последнее, но не менее важное: иногда в переведённую строку может понадобиться добавить некий контекст. Представьте себе, что переводчик получил для перевода строку Sun
. Без контекста большинство людей перевели бы её как «Солнце», подразумевая, что речь идёт о нашей ближайшей звезде, но на самом деле она могла бы быть аббревиатурой для воскресенья (Sunday).
Выбор фреймворка интернационализации¶
Выбирайте тот фреймворк, который является стандартом для вашей платформы, постарайтесь не изобретать заново колесо, создавая свой собственный фреймворк для работы с локализациями. Weblate поддерживает большинство широко используемых фреймворков, подробнее смотрите раздел Поддерживаемые форматы файлов (особенно его подраздел Возможности типов переводов).
Наши личные рекомендации для некоторых платформ приведены в следующей таблице. Эти рекомендации основаны на нашем опыте, но он не всеобъемлющ, поэтому, когда делаете выбор, всегда учитывайте своё окружение.
Платформа |
Рекомендуемый формат |
---|---|
Android |
|
iOS |
|
Qt |
|
Python |
|
PHP |
|
C/C++ |
|
C# |
|
Perl |
|
Ruby |
|
Расширения браузеров |
|
Java |
|
JavaScript |
- 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:
Вручную с помощью пункта Добавить новую строку перевода из меню Инструменты того языка, который является исходным для данного перевода.
Програмно через API:
POST /api/translations/(string:project)/(string:component)/(string:language)/units/
.Загрузив исходный файл через Заменить существующий файл перевода (это перезапишет существующие строки, так что удостоверьтесь сначала, что в файле есть и старые и новые строки) или Добавить новые строки; смотреть раздел Способы импорта.
Примечание
Будет ли доступно добавление строк через Weblate зависит от параметра «Управление строками».
Обновление файлов целевых языков¶
Для одноязычных файлов (смотреть раздел Поддерживаемые форматы файлов) Weblate может добавлять новые строки перевода, отсутствующие как в базовом файле, так и в реальных переводах. Однако он не выполняет какую-либо автоматическую очистку устаревших строк, так как это может привести к неожиданным результатам. Если же вы хотите, чтобы она выполнялась, то установите соответствующую надстройку, которая и будет производить такую очистку в соответствии с вашими требованиями.
Weblate также не будет пытаться каким-либо образом обновлять двуязычные файлы, так что, если вам нужно, чтобы po
-файлы обновлялись из pot
-файлов, то вам нужно будет делать это самостоятельно через Обновить исходные строки (смотреть раздел Способы импорта) или использовать для этого надстройку «Обновлять PO-файлы до соответствия POT (msgmerge)».
Managing version control repository¶
Weblate stores all translation the version control repository. It can be either connected to upstream one, or it can be only internal. The Repository maintenance lets you manipulate with the repository.
Подсказка
With Непрерывная локализация the repository is automatically pushed whenever there are changes and there is usually no need to manually manipupate with it.

Following operations are available:
Commit
Commits any pending changes present in Weblate database and not in the repository, see Отложенные коммиты.
Push
Pushes changes to the upstream repository, if configured by URL для отправки в репозиторий.
Update, Pull, Rebase
Updates Weblate repository with upstream changes. It uses Стиль слияния when choosing Update or you can choose different one from the dropdown menu.
Lock
Блокировка не позволяет переводчикам вносить изменения
Reset from Maintenance
Resets any changes done in Weblate to match upstream repository. This will discard all translations done in Weblate and not present in the upstream repository.
Cleanup from Maintenance
Removes untracked files from the repository. These could be result of misbehaving add-ons or bugs.
Force synchronization from Maintenance
Forces writing all strings to the translation files. Use this when repository files became out of sync with Weblate for some reason.
Перевод программ с помощью 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
находится бинарное представлениеLANGUAGE.po
. Он используется непосредственно при работе самого приложения. Обычно он не хранится в системе контроля версий, а генерируется при компиляции с помощью msgfmt. Если вы всё же хотите хранить его в системе контроля версий, то вы можете генерировать его в Weblate с помощью соответствующей надстройки.
В общем последовательность действий при работе с 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-адрес репозитория системы контроля версий с вашим проектом |
Маска файла |
|
Шаблон для новых переводов |
|
Формат файла |
Выберите 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. Их документация по локализации покрывает практически всё, что вам нужно знать — создание ещё одного проекта, установку его языка и связывание его с основным проектом в качестве перевода.
Теперь всё, что вам нужно — это перевести содержимое документации. Sphinx генерирует PO-файл для каждого каталога или файла верхнего уровня, что может привести к тому, что у вас появится довольно большое количество файлов для перевода (в зависимости от настройки параметра sphinx:gettext_compact
). Вы можете импортировать в Weblate в качестве начального компонента файл index.po
, а затем настроить надстройку Обнаружение компонентов для автоматического обнаружения всех остальных файлов.
|
|
|
|
|
|
PO-файл gettext |
|
|
Регулярное выражение для сопоставления с файлами перевода |
|
Настроить название компонента |
|
Задать базовый файл для нового перевода |
|
Подсказка
Вы хотите чтобы Sphinx создавал только один PO-файл? Начиная со Sphinx 3.3.0 это можно сделать с помощью:
gettext_compact = "docs"
Вот список некоторых проектов, которые используют этот подход для перевода документации:
`Документация Weblate<https://docs.weblate.org/>`_ (та что вы сейчас читаете)
Перевод HTML и JavaScript с помощью сети доставки содержимого Weblate¶
Начиная с версии Weblate 4.2, локализацию можно экспортировать в CDN с помощью надстройки «CDN локализации JavaScript’а».
Примечание
Эта функциональность уже включена на Hosted Weblate. На вашей установке она требует дополнительной настройки, смотрите описание параметров LOCALIZE_CDN_URL
и LOCALIZE_CDN_PATH
.
При включении её в вашем компоненте она будет отправлять закоммиченные переводы (смотреть раздел Отложенные коммиты) в CDN; и их можно будет использовать для локализации прямо на ваших веб-страницах.
Создание компонента¶
Сначала вам нужно будет создать одноязычный компонент, который будет содержать ваши строки; общие инструкции по этому поводу смотрите в главе «Добавление проектов и компонентов перевода».
Если у вас уже есть существующий репозиторий, с которого можно начать (например, тот, в котором хранятся HTML-файлы), то создайте в нём пустой JSON-файл для исходного языка (смотреть раздел Исходный язык), например, locales/en.json
. В файле должна быть пара скобок {}
, которые обозначают пустой объект. После этого репозиторий можно импортировать в Weblate. Собственно сделать это можно на вкладке управления надстройкой.
Подсказка
Если у вас уже есть существующий перевод, то вы можете поместить его в JSON-файлы для соответствующих языков, которые будут использоваться в Weblate.
Если вы из тех, кто не хочет делать всё это с существующим репозиторием (или если у вас его нет), то при создании компонента выберите Начать с нуля, а затем JSON-файл в качестве формата файла (на самом деле на этом этапе можно выбрать любой одноязычный формат).
Настройка надстройки Weblate CDN¶
В надстройка для CDN локолизации есть несколько опций, которые можно настроить.
- Порог перевода
Переводы, достигшие данного порога будут включать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>
Если вы не хотите изменять существующий код, вы также можете использовать `` * `` в качестве селектора для обработки всех элементов.
Примечание
На текущий момент извлекается только текст элементов. Эта надстройка не поддерживает локализацию атрибутов элементов или элементов с дочерними элементами.
Локализация 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));
В этом случае придётся собственно реализовать саму логику локализации.
Предупреждения компонента перевода¶
Показывает ошибки в настройках Weblate или в проекте перевода для любого компонента перевода. Также надстройка предлагает кое-какие инструкции по решению некоторых найденных проблем.
В настоящее время выполняются проверки на следующие проблемы:
Дублирование исходных строк в файлах перевода
Дублирование языков в переводах
Сбои при объединении, обновлении или при отправке исходного репозитория
Синтаксические ошибки в файлах перевода
Тарифные лимиты (смотрите раздел Биллинг)
Репозиторий содержащий слишком много исходящих или отсутствующих коммитов
Отсутствующие лицензии
Ошибки при запуске надстройки (смотреть Надстройки)
Неправильно сконфигурированный одноязычный перевод.
Сломанные Настройки компонента
Битые ссылки
Неиспользуемые снимки экрана
Неоднозначный код языка
Неиспользованный новый базовый файл в настройках компонента
Дублирование маски файлов, используемой для связанных компонентов
Оповещения обновляются ежедневно или при соответствующих изменениях (например, при изменении Настройки компонента или при обновлении репозитория).
Предупреждения выводятся на соответствующей странице компонента в разделе Предупреждения. Если они отсутствуют, компонент очищает все текущие проверки. Предупреждения не могут быть проигнорированы, но исчезнут, как только нижележащая проблема будет устранена.
Компонент с дубликатами исходных строк и языков выглядит вот так:

Создание сообщества переводчиков¶
Контрольный список локализации сообщества¶
Добавлено в версии 3.9.
Контрольный список локализации сообщества, который можно найти в меню каждого компонента, может дать вам рекомендации, выполнив которые, вы упростите сообществу переводчиков процесс локализации вашей программы.

Управление переводами¶
Добавление новых переводов¶
Новые строки становятся доступными для перевода когда они появляются в базовом файле, называемом Шаблон для новых переводов (смотрите раздел Настройки компонента). Если ваш формат файла не требует такого файла, как и происходит в большинстве рабочих процессах одноязычных переводов, вы можете начать с пустых файлов).
Новые языки могут быть добавлены сразу, как пользователь их запросит через Weblate, либо же администраторам проекта будет отправлено уведомление, чтобы они одобрили запрос и добавили новый язык вручную. Это можно сделать добавив новый перевод в настройках компонента.
Примечание
Если вы добавляете файл языка в связанный удалённый репозиторий, то соответствующий перевод будет добавлен в Weblate, когда он обновит свой локальный репозиторий.
Больше информации о настройках обновления репозитория доступно в разделе «Обновление репозиториев».
Удаление существующих переводов¶
Языки, компоненты или проекты, в которых они находятся, могут быть удалены (из Weblate и удалённого репозитория, если он есть) через меню Управлять ↓ Удаление соответствующего проекта, компонента или языка.
После нажатия на пункт меню Удаление сначала будет показан полный список компонентов, которые подлежат удалению. Для подтверждения удаления вам нужно будет ввести идентификатор (slug) данного объекта, где идентификатор — это «путь» к данному проекту, языку или компоненту, как он отображается в URL.
Если вы хотите удалить только некоторые конкретные строки, то это можно сделать одним из следующих способов:
Вручную в исходном файле. Они будут также удалены и из проекта перевода при следующем обновлении репозитория Weblate.
Добавлено в версии 4.5.
В интерфейсе Weblate через кнопку Инструменты ↓ Удалить в форме перевода строки. Для разных форматов здесь есть отличия, смотреть раздел Управление строками
Примечание
Если вы удаляете файл языка в связанном удалённом репозитории, то соответствующие переводы будут также удалены и из компонента, когда Weblate обновит свой локальный репозиторий.
Больше информации о настройках обновления репозитория доступно в разделе «Обновление репозиториев».
Варианты строк¶
Варианты полезны для группировки нескольких строк, чтобы переводчики могли видеть все варианты строки в одном месте.
Подсказка
Аббревиатуры (сокращённые формы, сокращения) являются хорошим примером вариантов.
Автоматическая группировка вариантов на основе ключевых строк¶
Добавлено в версии 3.11.
Вы можете задать регулярное выражение для группировки строк на основе ключевых строк одноязычных переводов в настройках компонента:

Если Ключ сопоставляется этому выражению, то сопоставленная часть ключа удаляется, а на основе оставшейся строки создаётся корневой ключ для вариантов. После этого все строки с одинаковым корневым ключом, а также та строка, чей ключ в точности совпадает с корневым, становятся частью одной группы.
В следующей таблице приведены некоторые примеры использования:
Пример использования |
Регулярное выражение |
Соответствующие ключи перевода |
---|---|---|
Идентификация по суффиксу |
|
|
Идентификация по части строки |
|
|
Назначение вариантов вручную¶
Добавлено в версии 4.5.
Вы можете вручную связать определённые строки с помощью флага variant:ИСТОЧНИК
. Это может быть полезно, если у вас двуязычный перевод, в котором, соответственно, нет ключевых строк, на основе которых можно было бы сгруппировать их автоматически; или чтобы сгрупировать строки между ключами которых нет ничего общего, хотя они всё же должны переводится вместе.
Так дополнительные варианты для какой-либо строки можно добавить с помощью кнопки Инструменты во время перевода (если управление строками включено):

Примечание
В данном случае строка-источник варианта не должна превышать 768 символов. Это чисто техническое ограничение, которое вызванно обеспечением совместимости с базой данных MySQL.
См.также
Как варианты выглядят при переводе¶
Позже при переводе строки с одним вариантом группируются вместе:

Метки строк¶
Разбивают переводимые строки компонента на категории по тексту и цвету, указанным в настройках проекта.

Подсказка
Метки могут быть назначены единицам перевода в окне Дополнительная информация об исходных строках путём массовой правки строк или с помощью надстройки Массовая правка.
Рецензирование строк¶
Отчёты о деятельности¶
Отчёты о деятельности показывают изменения переводов для проектов, компонентов или отдельных пользователей.
Отчёты о деятельности для проекта или компонента доступны из его панели управления, на вкладке Инфо.

Другие отчеты доступны на вкладке Аналитика в подпункте Отчёты по переводам.
Активность зарегистрированного в данный момент пользователя можно увидеть, нажав на пункт Профиль в меню пользователя из правого верхнего угла.
Проверки исходных строк¶
В Weblate существует множество проверок и некоторые из них направлены на улучшение качества исходных строк. Множество неудачных проверок косвенно намекают на то, что исходные строки нужно сделать более дружественными к их переводу. Все типы неудачных проверок исходных строк отображаются на вкладке Источник каждого компонента.
Проверки переведённых строк¶
Ошибочные неудачные проверки переведённых строк говорят о том, что проблема находится в исходной строке. Иногда переводчики вместо того, чтобы сообщать об ошибках в исходных строках, просто исправляют их в переводе; типичный пример такой ошибки — пропущенная точка в конце предложения.
Просмотр всех неудачных проверок может дать ценную обратную связь для улучшения исходных строк проекта. Чтобы упростить рецензирование исходных строк, Weblate автоматически создаёт фиктивный перевод на исходный язык и показывает в нём проверки для исходных строк:

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

Получение обратной связи об исходных строках¶
Переводчики могут комментировать как перевод, так и исходные строки. В настройках каждого компонента можно задать отправку таких комментариев на электронную почту (смотреть раздел Адрес для сообщения об ошибке в исходной строке); как правило, наилучшим подходом будет указать здесь адрес списка рассылки для разработчиков. Таким образом, вы сможете следить за возникновением проблем в переводе, вовремя о них узнавать и быстро их устранять.
См.также
Продвижение перевода¶
Weblate предоставляет вам виджеты, которые вы можете разместить на своем сайте или в других источниках для продвижения проекта перевода. Ещё он предоставляет красивую страницу приветствия для новых участников, на которой они могут получить основную информацию о переводе. Кроме того, вы можете поделиться информацией о переводе через Facebook или Twitter. Все эти возможности можно найти на вкладке Поделиться:

Во все эти плашки встроена ссылка на страницу, которая простыми словами объясняет пользователям, как переводить с помощью Weblate:

Отчёт о прогрессе перевода¶
Функции отчётности дают вам представление о том, как продвигался перевод за определённый период. В отчёте содержится сводка по переводам того или иного компонента за определённый период времени. Инструмент для создания отчётов находится в меню Аналитика любого компонента перевода, проекта или на панели управления:

На этой странице доступно несколько инструментов создания отчётов и все они могут производить вывод в 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
======================================== ======================================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ======================== ========================
Он может быть полезен, если вы платите переводчикам в зависимости от объёма выполненной ими работы, он даёт вам различную статистику по работе переводчиков.
Вся статистика доступна в трёх вариантах:
- Итоги
Общее количество отредактированных строк.
- Новые
Недавно переведённые строки, у которых раньше перевода не было.
- Одобренные
Считает количество одобренных строк в процессе рецензирования (смотрите раздел Выделенные рецензенты).
- Отредактированные
Отредактированные строки, которые ранее уже были переведены.
Для каждого из этих вариантов доступны следующие метрики:
- Количество
Количество строк.
- Правки
Количество правок в строке, измеряемое в расстоянии Дамерау — Левенштейна.
- Исходных слов
Количество слов в исходной строке.
- Исходных символов
Количество символов в исходной строке.
- Целевых слов
Количество слов в переведённой строке.
- Целевых символов
Количество символов в переведённой строке.
Как внести свой вклад в Weblate¶
Существуют десятки способов улучшить Weblate. Вы можете выбрать тот, который вам удобен, будь то написание кода, графический дизайн, документация, спонсорство или идея:
Перевод Weblate¶
Weblate непрерывно переводится с использованием самого Weblate. Не стесняйтесь принять участие в усилиях, направленных на то, чтобы сделать Weblate доступным на как можно большем количестве человеческих языков. Это приближает Weblate к пользователям!
Если вы обнаружили возможную ошибку в исходной строке, вы можете отметить её комментарием в редакторе Weblate. Таким образом, её можно обсудить и исправить. Если вы уверены, вы также можете нажать на ссылку в разделе Расположение исходной строки и отправить запрос на извлечение(pull request) со своим исправлением.
Внести вклад в документацию Weblate¶
Вы можете улучшить страницу документации по своему усмотрению. Сделать это легко, нажав на кнопку Редактировать на GitHub в правом верхнем углу страницы.
Пожалуйста, соблюдайте эти рекомендации при написании:
Не удаляйте часть документации, если она действительна.
Используйте ясный и понятный язык. Вы пишете техническую документацию, а не поэму. Не все читатели документации являются носителями языка, будьте внимательны.
Не бойтесь спрашивать, если вы не уверены. Если вам нужно спросить о какой-то функции во время редактирования, не меняйте документацию до получения ответа. Это означает: Вы меняете или спрашиваете. Не делайте и то, и другое одновременно.
Проверьте свои изменения, выполнив описанные действия в соответствии с документацией.
Отправляйте запрос на извлечение(pull request) с изменениями небольшими частями, чтобы облегчить и ускорить их рассмотрение и объединение.
Если вы хотите переписать и изменить структуру большой статьи, сделайте это в два этапа:
Переписать
После того как изменённый вариант будет просмотрен, отшлифован и объединён, измените структуру абзацев в другом запросе на извлечение(pull request).
Подсказка
Вы можете перевести документацию.
Обсуждения Weblate¶
Если у вас есть идея, но вы не уверены, подходит ли она для выпуска, не волнуйтесь. Вы можете присоединиться к сообществу в GitHub обсуждениях.
Финансирование разработки Weblate¶
Вы можете поддержать развитие Weblate на странице приёма пожертвований. Собранные там средства используются для обеспечения бесплатного хостинга для проектов свободного программного обеспечения и дальнейшего развития Weblate. Пожалуйста, посетите `страницу приёма пожертвований`_, чтобы узнать о возможностях, таких как цели финансирования и награды, которые вы получите как гордый спонсор.
Те, кто уже оказал финансовую поддержку Weblate¶
Список спонсоров Weblate:
Yashiro Ccs
Cheng-Chia Tseng
Timon Reinhard
Loic Dachary
Marozed
GNU Solidario (GNU Health)
Richard Nespithal
Хотите оказаться в этом списке? Тогда посмотрите свои опции на странице «Пожертвовать для Weblate».
Начало участия в разработке Weblate¶
Понять исходный код Weblate, пройдя через Исходный код Weblate, Фронтэнд Weblate и Внутреннее устройство Weblate.
Начало работы с кодовой базой¶
Ознакомьтесь с кодовой базой Weblate, попробовав исправить ошибки, помеченные как good first issue.
Запуск Weblate локально¶
Самый удобный подход к разработке Weblate — это создать собственное виртуальное окружение (virtualenv) для него с редактируемой версией исходного кода, как описано в Установка из исходников.
Склонируйте исходный код Weblate:
git clone https://github.com/WeblateOrg/weblate.git cd weblate
Создайте виртуальное окружение:
virtualenv .venv .venv/bin/activate
Установите Weblate (для этого потребуются некоторые системные зависимости, просмотрите Установка из исходников):
pip install -e .
Установите все зависимости, полезные для разработки:
pip install -r requirements-dev.txt
Запустите сервер разработки:
weblate runserver
В зависимости от ваших настроек, возможно, вы захотите запустить обработчики Celery:
./weblate/examples/celery start
Чтобы запустить тесты (смотреть раздел Запуск тестов локально):
. 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
, например:
./rundev.sh test --failfast weblate.trans
Примечание
Убедитесь, что ваш контейнер Docker запущен и работает до того как запустить тесты. Вы можете проверить это, выполнив docker ps
.
Чтобы вывести логи:
./rundev.sh logs
Чтобы остановить контейнер, запущенный в фоне:
./rundev.sh stop
Запуск скрипта без аргументов приведёт к повторному созданию контейнера Docker и его перезапуску.
Примечание
Эта установка не подходит для производства, поскольку она включает в себя несколько хаков, которые небезопасны, но они облегчают разработку.
Разработка Weblate c помощью PyCharm¶
PyCharm — это известная среда разработки для Python, вот некоторые рекомендации, как настроить ваш проект Weblate внутри неё.
Допустим, вы только что склонировали репозиторий GitHub в папку, просто откройте его с помощью PyCharm. Как только IDE будет открыта, первым шагом будет указание интерпретатора, который вы хотите использовать:

Вы можете либо позволить PyCharm создать виртуальное окружение за вас, либо выбрать уже существующее:

Не забудьте установить зависимости после установки интерпретатора: Либо через консоль (по умолчанию консоль IDE будет напрямую использовать ваш virtualenv), либо через интерфейс, когда вы получите предупреждение о пропущенных зависимостях.
Второй шаг — ввести правильную информацию, чтобы интегрировать Django в PyCharm: Идея в том, чтобы запуск юнит-тестов происходил незамедлительно прямо из IDE. Для этого вам нужно указать путь к корню Django-проекта и путь к его настройкам:

Внимание, в параметре Django project root указывается путь к корню репозитория, а не подкаталога Weblate. Что касается настроек, вы можете использовать weblate/settings_test.py
из репозитория, но вы можете создать свой собственный файл настроек и указать его в этом параметре.
Последний шаг — запустить сервер и установить точки останова в коде так, чтобы возможно было его отлаживать. Это можно сделать, создав новую конфигурацию Django Server:


Подсказка
Осторожнее с параметром No reload: Это предотвращает перезагрузку сервера в реальном времени, если вы изменяете файлы. Но это позволяет сохранить существующие точки останова отладчика, когда они обычно удаляются при перезагрузке сервера.
Инициализация вашего экземпляра devel¶
Возможно, вы захотите использовать import_demo
, чтобы создать демонстрационные переводы и createadmin
, чтобы создать пользователя-администратора.
Исходный код Weblate¶
Weblate разрабатывается на GitHub’е. Вы можете создавать форки и открывать запросы на извлечение. Патчи в любой другой форме также приветствуются.
См.также
Чтобы понять, как Weblate устроен изнутри, посмотрите раздел Внутреннее устройство Weblate.
Принципы «безопасности по проектированию»¶
Любой код для Weblate’а должен писаться с оглядкой на Принципы «безопасности по проектированию» (Security by Design).
Соглашения по оформлению кода¶
Код должен соответствовать рекомендациям по кодированию PEP-8 и должен быть отформатирован с использованием инструмента форматирования кода black.
Для проверки качества кода можно использовать flake8, рекомендуемые плагины перечислены в :file:``.pre-commit-config.yaml`, а их настройки находятся в setup.cfg
.
Самый простой способ принудить себя к выполнению всех этих соглашений — установить pre-commit. Репозиторий Weblate содержит настройки для него, в соответствии с которыми он будет проверять, что закоммиченные файлы минимально вменяемы. После его установки (он уже есть в списке зависимостей в requirements-lint.txt
) включите его, запустив pre-commit install
в каталоге с рабочей копией Weblate. Таким образом все ваши изменения будут проверяться автоматически.
Также вы можете запустить эту проверку вручную, чтобы проверить все файлы, запустите:
pre-commit run --all
Отладка Weblate¶
Баги могут проявлять себя в том, что приложение падает или ведёт себя некорректно. Мы будем рады, если вы соберёте информацию о таких проблемах и передадите её в нашу систему отслеживания проблем.
Режим отладки¶
Включение режима отладки приведёт к тому, что исключения будут отображаться прямо в браузере. Это полезно при отладке проблем в веб-интерфейсе, но для рабочей системы применять данный режим не следует, поскольку он отражается на производительности не лучшим образом и может привести к утечке конфиденциальных данных.
См.также
Журналы Weblate¶
Weblate может вести детализированные журналы того, что происходит в фоне. С настройками по умолчанию он использует syslog в результате чего файл журнала появляется в /var/log/messages
или в /var/log/syslog
(в зависимости от настроек вашего демона syslog).
Процесс Celery (смотреть раздел Фоновые задачи с использованием Celery) обычно также ведёт свои собственные журналы. Скажем, в примере с установкой Celery в качестве системного сервиса журналы будут записываться в несколько файлов в каталоге /var/log/celery/
.
Контейнеры Docker записывают журналы в свой поток вывода (как это обычно и бывает в Docker-мире), так что вы можете просмотреть эти журналы с помощью docker-compose logs
.
См.также
Не обрабатываются фоновые задачи¶
Многие задачи выполняются в фоновых обработчиках Celery. Если такие вещи, как отправка электронной почты или удаление компонентов не работают, то, вероятно, с этими обработчиками какие-то проблемы.
В таком случае следует:
Проверить, что Celery запущен, смотреть раздел Фоновые задачи с использованием Celery
Проверить статус очереди Celery или через интерфейс управления или с помощью
celery_queues
Просмотреть журналы Celery на наличие ошибок (смотреть раздел Журналы Weblate)
Не доходит электронная почта от Weblate¶
Проверить, правильно ли работает исходящая почта. Это можно сделать с помощью команды управления sendtestemail
(подробности, как вызывать её в различных окружениях, смотрите в разделе «Вызов команд управления») или с помощью интерфейса управления на вкладке Инструменты.
Это действие отправит почту напрямую, так что таким образом можно проверить, что SMTP настроен корректно (смотреть раздел Настройка исходящей почты). Однако большую часть почты Weblate отправляет в фоновых задачах, так что всё это может быть вызвано некоторыми проблемами с Celery. Как отладить Celery смотрите в соответствующем разделе.
Анализ падений программы¶
Если приложение падает, то будет полезно собрать об этом падении столько информации, сколько возможно. Самый простой сделать это — использовать сторонние сервисы, которые собирают эту информацию автоматически. Вы можете почитать о том, как это сделать, в разделе «Сбор отчётов об ошибках».
Ошибки без оповещения¶
Многие задачи выгружаются в Celery для фоновой обработки. Их падения в пользовательском интерфейсе не отображаются, а появляются только в журналах Celery. Настройка сбора ошибок поможет вам легче замечать такие сбои.
Проблемы с производительностью¶
Если в каких-то ситуациях Weblate показывает недостаточную производительность, то соберите журналы, которые демонстрируют проблему, а также всё, что поможет выяснить, как и в каком месте можно улучшить код.
Если некоторые запросы выполняются слишком долго без какой-либо индикации, то вы можете установить dogslow и использовать его вместе со сбором отчётов об ошибках, что позволит получить точечные и подробные трассировки стеков вызова (traceback) в этих отчётах.
Внутреннее устройство 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)¶
- 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) – Whether the add-on operation should skip pushing changes upstream. Usually you can pass this to underlying methods as
commit_and_push
orcommit_pending
.
- pre_commit(translation, author)¶
Обработчик, вызываемый перед тем, как изменения будут закоммиченны в репозиторий.
- pre_push(component)¶
Обработчик, вызываемый перед тем как изменения в будут отправлены в вышестоящий репозиторий.
- pre_update(component)¶
Обработчик, вызываемый перед тем, как локальный репозиторий будет обновлён из вышестоящего.
- save_state()¶
Сохранить информацию о состоянии надстройки.
- stay_on_create = False¶
Базовый класс для всех надстроек Weblate.
- store_post_load(translation, store)¶
Обработчик, вызываемый после разбора файла.
В качестве аргумента ему передаётся объект класса формата файла.
Это может быть полезно для модификации параметров класса формата файла, например, изменить , как именно данный файл будет сохраняться.
- unit_pre_create(unit)¶
Обработчик, вызываемый перед созданием новой единицы перевода.
Вот пример надстройки:
#
# Copyright © 2012 - 2021 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
.
Добавление новой сторонней библиотеки обычно заключается в:
# 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’е¶
Weblate issue tracker <https://github.com/WeblateOrg/weblate/issues> на 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’а¶
тип |
массив |
||
элементы |
Элемент памяти переводов |
||
тип |
объект |
||
свойства |
|||
|
Категория строки |
||
1 — глобальная, 2 — общая, 10000000+ — специфичная для проекта, 20000000+ — специфичная для пользователя |
|||
тип |
целое число |
||
примеры |
1 |
||
минимум |
0 |
||
значение по умолчанию |
1 |
||
|
Происхождение строки |
||
Имя файла или название компонента |
|||
тип |
строка |
||
примеры |
test.tmx |
||
проект/компонент |
|||
значение по умолчанию |
|||
|
Исходная строка |
||
тип |
строка |
||
примеры |
Hello |
||
мин. длина |
1 |
||
значение по умолчанию |
|||
|
Исходный язык |
||
ISO 639-1 / ISO 639-2 / IETF BCP 47 |
|||
тип |
строка |
||
примеры |
en |
||
шаблон |
^[^ ]+$ |
||
значение по умолчанию |
|||
|
Целевая строка |
||
тип |
строка |
||
примеры |
Привет |
||
мин. длина |
1 |
||
значение по умолчанию |
|||
|
Целевой язык |
||
ISO 639-1 / ISO 639-2 / IETF BCP 47 |
|||
тип |
строка |
||
примеры |
ru |
||
шаблон |
^[^ ]+$ |
||
значение по умолчанию |
|||
дополнительные свойства |
False |
||
определения |
См.также
Файл экспорта данных пользователя Weblate’а¶
тип |
объект |
|||
свойства |
||||
|
Основные данные |
|||
тип |
объект |
|||
свойства |
||||
|
Имя пользователя |
|||
тип |
строка |
|||
примеры |
admin |
|||
значение по умолчанию |
||||
|
Полное имя |
|||
тип |
строка |
|||
примеры |
Администратор Weblate |
|||
значение по умолчанию |
||||
|
Адрес электронной почты |
|||
тип |
строка |
|||
примеры |
||||
значение по умолчанию |
||||
|
Дата присоединения |
|||
тип |
строка |
|||
примеры |
2019-11-18T18:53:54.862Z |
|||
значение по умолчанию |
||||
|
Профиль |
|||
тип |
объект |
|||
свойства |
||||
|
Язык |
|||
тип |
строка |
|||
примеры |
ru |
|||
шаблон |
^.*$ |
|||
значение по умолчанию |
||||
|
Количество предложенных строк |
|||
тип |
целое число |
|||
примеры |
1 |
|||
значение по умолчанию |
0 |
|||
|
Количество переведённых строк |
|||
тип |
целое число |
|||
примеры |
24 |
|||
значение по умолчанию |
0 |
|||
|
Количество загруженных снимков экрана |
|||
тип |
целое число |
|||
примеры |
1 |
|||
значение по умолчанию |
0 |
|||
|
Скрывать завершённые переводы с панели управления |
|||
тип |
логический |
|||
примеры |
False |
|||
значение по умолчанию |
True |
|||
|
Выводить ли вспомогательные переводы в дзен-режиме |
|||
тип |
логический |
|||
примеры |
True |
|||
значение по умолчанию |
True |
|||
|
Скрывать ли источник, если есть вспомогательный перевод |
|||
тип |
логический |
|||
примеры |
False |
|||
значение по умолчанию |
True |
|||
|
Ссылка на редактор |
|||
тип |
строка |
|||
примеры |
||||
шаблон |
^.*$ |
|||
значение по умолчанию |
||||
|
Режим редактора переводов |
|||
тип |
целое число |
|||
примеры |
0 |
|||
значение по умолчанию |
0 |
|||
|
Дзен-режим редактора |
|||
тип |
целое число |
|||
примеры |
0 |
|||
значение по умолчанию |
0 |
|||
|
Специальные символы |
|||
тип |
строка |
|||
примеры |
||||
шаблон |
^.*$ |
|||
значение по умолчанию |
||||
|
Вид панели управления по умолчанию |
|||
тип |
целое число |
|||
примеры |
1 |
|||
значение по умолчанию |
0 |
|||
|
Список компонентов по умолчанию |
|||
значение по умолчанию |
null |
|||
любое из |
тип |
null |
||
тип |
целое число |
|||
|
Языки перевода |
|||
тип |
массив |
|||
значение по умолчанию |
||||
элементы |
Код языка |
|||
тип |
строка |
|||
примеры |
ru |
|||
шаблон |
^.*$ |
|||
значение по умолчанию |
||||
|
Вспомогательные языки |
|||
тип |
массив |
|||
значение по умолчанию |
||||
элементы |
Код языка |
|||
тип |
строка |
|||
примеры |
uk |
|||
шаблон |
^.*$ |
|||
значение по умолчанию |
||||
|
Отслеживаемые проекты |
|||
тип |
массив |
|||
значение по умолчанию |
||||
элементы |
Плашка проекта |
|||
тип |
строка |
|||
примеры |
weblate |
|||
шаблон |
^.*$ |
|||
значение по умолчанию |
||||
|
Журнал аудита |
|||
тип |
массив |
|||
значение по умолчанию |
||||
элементы |
Записи |
|||
тип |
объект |
|||
свойства |
||||
|
IP-адрес |
|||
тип |
строка |
|||
примеры |
127.0.0.1 |
|||
шаблон |
^.*$ |
|||
значение по умолчанию |
||||
|
Агент пользователя (User agent) |
|||
тип |
строка |
|||
примеры |
PC / Linux / Firefox 70.0 |
|||
шаблон |
^.*$ |
|||
значение по умолчанию |
||||
|
Отметка времени |
|||
тип |
строка |
|||
примеры |
2019-11-18T18:58:30.845Z |
|||
шаблон |
^.*$ |
|||
значение по умолчанию |
||||
|
Действие |
|||
тип |
строка |
|||
примеры |
login |
|||
шаблон |
^.*$ |
|||
значение по умолчанию |
||||
определения |
См.также
Выпуск новых версий Weblate¶
Расписание выпусков¶
Weblate Придерживается двухмесячного цикла основных выпусков (x.y). Между ними обычно происходят выпуски с исправлениями ошибок (x.y.z), которые исправляют проблемы, проскочившие в основные выпуски.
Изменение мажорной версии означает, что при обновлении эту версию нельзя пропускать. В таких случаях всегда необходимо сначала обновиться до версии x.0 перед тем, как обновляться до старших выпусков x.y.
См.также
Планирование выпусков¶
Список исправленных ошибок и новых возможностей для предстоящего выпуска собирается с помощью целей выпуска (milestones) на GitHub; вы можете посмотреть нашу дорожную карту на <https://github.com/WeblateOrg/weblate/milestones>.
Процесс выпуска¶
Что нужно проверить перед выпуском:
Проверить новые языки, на которые был сделан перевод командой ./scripts/list-translated-languages.
Установить финальную версию командой ./scripts/prepare-release.
Удостовериться, что скриншоты находятся в актуальном состоянии с помощью команды make -C docs update-screenshots.
Объедините все возможные незаконченные переводы wlc push; git remote update; git merge origin/weblate
Выполнить выпуск:
Произвести выпуск: ./scripts/create-release --tag (смотрите, что для этого необходимо ниже).
Что нужно сделать вручную после выпуска:
Обновить образ Docker.
Закрыть целевую версию (milestone) на GitHub.
Как только образ докер будет проверен, добавить метку и загрузить его.
Обновить схему Helm до новой версии.
Добавить новую версию в
.github/workflows/migrations.yml
, чтобы миграция на неё покрывалась тестами.Увеличить версию в ссылках на скачивание на сайте.
Увеличить версию в репозитории с помощью команды ./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 ().
См.также
О Weblate¶
Цели проекта¶
Инструменты непрерывной локализации, основанные на web-технологиях, с плотной интеграцией с системами контроля версий и поддерживающими широкий набор форматов файлов, дают возможность переводчикам проще вносить свой вклад в различные проекты.
Название проекта¶
«Weblate» образовано слиянием слов «web» и «translate» (переводить).
Веб-сайт проекта¶
Стартовая страница проекта — https://weblate.org. Облачный сервис расположен на https://hosted.weblate.org. Данную документацию можно прочесть по адресу https://docs.weblate.org.
Логотипы проекта¶
The project logos and other graphics are available in https://github.com/WeblateOrg/graphics.
Руководство¶
Этот проект курируется Михалом Чигаржем (Michal Čihař), с которым можно связаться через: michal@cihar.com.
Авторы¶
Weblate был создан Михалом Чиuгаржем (Michal Čihař) в 2012 году. С этого момента уже тысячи людей внесли в него свой вклад.
Лицензия¶
Авторское право (C) 2012–2020 Михал Чигарж (Michal Čihař) michal@cihar.com
Это свободная программа: вы можете перераспространять ее и/или изменять ее на условиях Стандартной общественной лицензии GNU в том виде, в каком она была опубликована Фондом свободного программного обеспечения; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
Эта программа распространяется в надежде, что она будет полезной, но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННЫХ ЦЕЛЕЙ. Подробнее можно просмотреть в Стандартной общественной лицензии GNU.
Вы должны были получить копию Стандартной общественной лицензии GNU вместе с этой программой. Если это не так, просмотрите <https://www.gnu.org/licenses/>.
Weblate 4.7¶
Released on June 17th 2021.
Улучшена проверка работоспособности конфигурации.
Добавлена поддержка формата
object-pascal-format
, используемого в PO-файлах gettext, смотреть раздел Формат Object Pascal.Переименовано Ближайшие ключи в Похожие ключи, чтобы лучше описать цель.
Добавлена поддержка меток.
Улучшена интеграция с аутентификацией SAML.
Исправлена интеграция Gerrit для лучшей обработки угловых случаев.
Weblate now requires Django 3.2.
Fixed inviting users when e-mail authentication is disabled.
Improved language definitions.
Added support for blocking users from contributing to a project.
Fixed automatic creation of glossary languages.
Extended documentation about add-ons.
Performance improvements for components with linked repositories.
Added support for free DeepL API.
The user management no longer needs Django admin interface.
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 теперь имеет параметр для указания режима перевода.
Добавлена поддержка Текстовые файлы.
Добавлены тенденции и метрики для всех объектов.
Добавлена поддержка прямого копирования текста из вспомогательных языков.
Добавлена фильтрация по дате при просмотре изменений.
Улучшены графики деятельности.
Теперь можно настроить отправителя для писем контактной формы.
Улучшена проверка параметров в 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.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¶
Выпущен 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.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 идущие в комплекте с Weblate.
Добавлена команда управления 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.
Добавлена многообещающая система списков контроля доступа, основанная на группах.
Прояснение терминологии для строк «на правку» (ранее известных как «неточные»).
Прояснение терминологии для строк «требующих действий» и «непереведённых».
Поддержка 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.
На всех страницах перевода добавлен список последних изменений.
Проверка не переведённых строк теперь игнорирует сообщения, содержащие только строку формата.
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-адреса для входа в систему.
Именование областей текста при вводе форм множественного числа.
Автоматическое расширение области перевода.
Социальная аутентификация¶
Благодаря пакету Python Social Auth, Weblate поддерживает аутентификацию с использованием множества сторонних сервисов, таких как GitLab, Ubuntu, Fedora и другие.
Для получения общих инструкций по настройке ознакомьтесь с их документацией в разделе Фреймворк Django.
Примечание
По умолчанию Weblate полагается на сторонние сервисы аутентификации для предоставления подтверждённого адреса электронной почты. Если некоторые сервисы, которые вы хотите использовать, это не поддерживают, включите принудительную проверку адреса электронной почты на стороне Weblate, настроив их параметр FORCE_EMAIL_VALIDATION. Например:
См.также
Конвейер
Включить конкретный способ аутентификации довольно просто: нужно всего-навсего добавить его имя в параметр
AUTHENTICATION_BACKENDS
, а также, по необходимости, задать необходимые ему ключи доступа. Обратите внимание, что некоторые способы по умолчанию не предоставляют адрес электронной почты пользователя, в этом случае вы должны запросить его явно, иначе Weblate не сможет правильно указать авторство выполненных пользователями переводов.Подсказка
Большинство бэкендов аутентификации требуют HTTPS. Как только HTTPS включен на вашем веб-сервере, пожалуйста, настройте Weblate, чтобы он сообщал об этом должным образом, используя
ENABLE_HTTPS
, илиWEBLATE_ENABLE_HTTPS
в контейнере Docker.См.также
Бэкэнд пакета Python Social Auth
Аутентификация OpenID¶
Для сервисов, основанных на OpenID, обычно это просто вопрос её включения. Следующий блок кода включает аутентификацию OpenID для OpenSUSE, Fedora и Ubuntu:
См.также
OpenID
Аутентификация GitHub¶
Вам нужно будет зарегистрировать приложение OAuth в GitHub’е, а затем передать Weblate’у все его секреты:
На GitHub нужно задать URL-адрес обратного вызова, указывающий на
https://example.com/accounts/complete/github/
.Примечание
Weblate предоставляет URL-адрес обратного вызова, вызываемый во время аутентификации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.
См.также
GitHub
Аутентификация Bitbucket¶
Вам нужно будет зарегистрировать приложение в Bitbucket’е, а затем рассказать Weblate’у все его секреты:
Примечание
Weblate предоставляет URL-адрес обратного вызова, вызываемый во время аутентификации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.
См.также
Bitbucket
Google OAuth 2¶
Для использования Google OAuth 2 необходимо зарегистрировать приложение на <https://console.developers.google.com/> и включить Google+ API.
URL-адрес перенаправления —
https://СЕРВЕР WEBLATE/accounts/complete/google-oauth2/
Примечание
Weblate предоставляет URL-адрес обратного вызова, вызываемый во время аутентификации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.
См.также
Google
Facebook OAuth 2¶
Как обычно с сервисами OAuth 2, вам необходимо зарегистрировать ваше приложение в Facebook. После этого вы сможете настроить Weblate на его использование:
URL-адрес перенаправления —
https://СЕРВЕР WEBLATE/accounts/complete/facebook/
Примечание
Weblate предоставляет URL-адрес обратного вызова, вызываемый во время аутентификации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.
См.также
Facebook
GitLab OAuth 2¶
Для использования GitLab OAuth 2 необходимо зарегистрировать приложение на <https://gitlab.com/profile/applications>.
URL-адрес перенаправления —
https://СЕРВЕР WEBLATE/accounts/complete/gitlab/
и убедитесь, что вы отметили область видимости read_user.Примечание
Weblate предоставляет URL-адрес обратного вызова, вызываемый во время аутентификации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.
См.также
GitLab
Microsoft Azure Active Directory¶
Weblate можно настроить на использование общих или конкретных арендаторов для аутентификации.
URL-адрес перенаправления —
https://СЕРВЕР WEBLATE/accounts/complete/azuread-oauth2/
для общей иhttps://СЕРВЕР WEBLATE/accounts/complete/azuread-tenant-oauth2/
для конкретной для арендатора аутентификации.Примечание
Weblate предоставляет URL-адрес обратного вызова, вызываемый во время аутентификации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.
См.также
Microsoft Azure Active Directory
Slack¶
Для использования Slack OAuth 2 необходимо зарегистрировать приложение на <https://api.slack.com/apps>.
URL-адрес перенаправления —
https://СЕРВЕР WEBLATE/accounts/complete/slack/
.Примечание
Weblate предоставляет URL-адрес обратного вызова, вызываемый во время аутентификации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.
См.также
Slack
Переопределение имён и значков методов аутентификации¶
Вы можете переопределить отображаемое имя метода аутентификации и иконку, используя параметры
SOCIAL_AUTH_<NAME>_IMAGE
иSOCIAL_AUTH_<NAME>_TITLE
. Например, переопределение именования для Auth0 будет выглядеть следующим образом:Отключение аутентификации по паролю¶
Аутентификацию по электронной почте и паролю можно отключить, удалив
social_core.backends.email.EmailAuth
из параметраAUTHENTICATION_BACKENDS
. Никогда не удаляйте оттудаweblate.accounts.auth.WeblateUserBackend
, он необходим для работы основных функций Weblate.Совет
Вы всё ещё можете использовать аутентификацию по паролю для интерфейса администратора и для пользователей, которых вы создаёте там вручную. Просто зайдите на
/admin/
.Например, аутентификация с использованием только провайдера openSUSE Open ID может быть достигнута при помощи следующего кода: