Дополнительные модули Weblate¶
Для вашей установки доступно несколько дополнительных модулей.
Экспортер Git¶
Предоставляет доступ на чтение к нижележащему репозиторию Git через HTTP(S).
Установка¶
Добавьте
weblate.gitexportв установленные приложения в файлеsettings.py:INSTALLED_APPS += ("weblate.gitexport",)
Экспортируйте существующие репозитории, выполнив перено своей базы данных после установки:
weblate migrate
Подсказка
Git-экспортёр включён в нашем официальном образе Docker. Чтобы отключить его, используйте:
WEBLATE_REMOVE_APPS=weblate.gitexport
Использование¶
Модуль автоматически внедряется в Weblate и устанавливает URL-адрес экспортируемого репозитория в Настройки компонента. Репозитории доступны в части /git/ URL-адреса Weblate, например https://example.org/git/weblate/main/.
Репозитории для проектов, доступных публично, могут быть клонированы без авторизации:
git clone 'https://example.org/git/weblate/main/'
Доступ к просмотру репозиториев с ограниченным доступом (с Private access control или когда REQUIRE_LOGIN включён) требует токен API, который можно получить в вашем user profile:
git clone 'https://user:KEY@example.org/git/weblate/main/'
Примечание
Weblate обслуживает сам репозиторий Git, но не обслуживает объекты Git LFS. Для репозиториев, использующих Git LFS, клонируйте из вышестоящего репозитория и добавьте Weblate как другой удалённый репозиторий. Если вам нужны только файлы, отслеживаемые Git, вы можете клонировать из Weblate с GIT_LFS_SKIP_SMUDGE=1, чтобы пропустить загрузку объектов Git LFS.
Подсказка
По умолчанию у членов группы Пользователи и анонимных пользователей есть доступ к репозиториям публичных проектов через роли Доступ к репозиторию и Опытный пользователь.
Выставление счетов¶
Этот модуль используется на Облачном хостинге Weblate, для задания тарифных планов, а также отслеживания платежей и лимитов.
Установка¶
Добавьте weblate.billing в установленные приложения в файле settings.py:
INSTALLED_APPS += ("weblate.billing",)
Запустите миграцию базы данных для необязательной установки для модуля дополнительных структур базы данных:
weblate migrate
Создание и назначение тарифного плана¶
Сначала вам нужно создать тарифный план, чтобы активировать биллинг. Перейдите в раздел Администрирование (обозначен значком гаечного ключа) и откройте экран Инструменты. Оттуда перейдите в Интерфейс администратора Django.
В интерфейсе администратора Django найдите раздел BILLING и добавьте тарифный план. Например, вы можете добавить бесплатный план Free.
Если вы хотите назначить тарифный план существующему проекту, это также можно сделать в Интерфейсе администратора Django с помощью параметра Customer billings.
Наконец, Интерфейс администратора Django предоставляет параметр Invoice для регистрации платежей ваших клиентов.
Использование¶
После установки вы можете управлять биллингом в интерфейсе администратора. Пользователи с включённым биллингом получат новую вкладку Billing в своём Профиль пользователя.
Также модуль тарифных планов даёт возможность администраторам проектов создавать новые проекты и компоненты без прав суперпользователя (смотреть раздел Добавление проектов и компонентов перевода). Это становится возможным, если удовлетворены следующие условия:
Тариф не исчерпал заданные лимиты (любое избыточное использование ресурсов влечёт блокировку создания проектов/компонентов) и оплачен (если он не бесплатный)
Пользователь является администратором существующего тарифицируемого проекта или владельцем тарифного плана (последнее необходимо пользователям только подписавшимся на тариф для того, чтобы они могли загрузить новый проект).
При создании проекта пользователь может выбрать, к какому тарифу проект должен относиться, если у пользователя их несколько.
Юридический модуль¶
Этот модуль используется на Облачном хостинге Weblate для вывода необходимых юридических документов. Он поставляется в комплекте с набором незаполненных документов. Предполагается, что вы самостоятельно заполните следующие шаблоны:
legal/documents/tos.htmlДокумент условий обслуживания
legal/documents/privacy.htmlДокумент политики конфиденциальности
legal/documents/summary.htmlКраткий обзор условий обслуживания и политики конфиденциальности
При изменении документов с условиями обслуживания измените LEGAL_TOS_DATE так, чтобы пользователи были вынуждены согласиться с обновлёнными документами.
Примечание
Юридические документы для сервиса Hosted Weblate, управляемого Weblate s.r.o., доступны в этом 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/в соответствии с вашими условиями.
Подсказка
В развёртываниях Docker включите юридический модуль с помощью WEBLATE_LEGAL_INTEGRATION вместо редактирования settings.py. Используйте tos-confirm, чтобы включить юридический модуль и подтверждение условий обслуживания, или wllegal, чтобы дополнительно загрузить размещённые шаблоны юридических документов, используемые сервисами, управляемыми Weblate s.r.o. Эти шаблоны не предназначены для общего использования. Чтобы предоставить свои собственные шаблоны в Docker, поместите их в /app/data/python/customize/templates/legal/documents, см. Замена логотипа и других статических файлов.
Использование¶
После установки и редактирования юридические документы будут отображаться в пользовательском интерфейсе Weblate.
Аватары¶
Аватары загружаются и кэшируются на стороне сервера, чтобы уменьшить утечку информации на сайты, обслуживающие их по умолчанию. Встроенную поддержку получения аватаров из настроенных для этого адресов электронной почты можно отключить с помощью параметра ENABLE_AVATARS.
В настоящее время Weblate поддерживает:
CDN локализации¶
The CDN локализации JavaScript and Translation files CDN add-ons
write files to LOCALIZE_CDN_PATH; Weblate does not serve them.
Configure the web server or CDN serving LOCALIZE_CDN_URL as a
public, read-only static file host.
Treat every published CDN file as public. The add-on specific UUID in the URL is not an access-control mechanism. Do not enable CDN add-ons for components that contain private strings, unreleased product text, customer data, internal URLs, API examples, repository paths, translator comments, or file-format metadata that should not be exposed.
The Translation files CDN add-on publishes raw translation files in formats supported by Weblate. Some formats can be interpreted by browsers or other clients as HTML, SVG, XML, JavaScript, YAML, or application-specific configuration. Serve the CDN from a dedicated domain that is separate from Weblate and from the application consuming the translations. Do not share authentication cookies with the CDN domain.
Recommended server configuration:
Serve only the directory configured by
LOCALIZE_CDN_PATH; do not expose Weblate repositories, backups, media, configuration, or the whole data directory.Disable directory listing.
Use HTTPS and make the CDN host read-only from the web server.
Send X-Content-Type-Options with
nosniff.Configure conservative MIME types. Serve unknown translation formats as text/plain or application/octet-stream; only serve
weblate.jsas JavaScript.For raw translation formats that are not intended to be rendered in a browser, consider adding Content-Disposition with
attachment.Configure
Access-Control-Allow-Originonly for sites that need browser access to the files.Set cache lifetimes that match your update expectations, and purge CDN caches when stale translations must disappear quickly.
The following nginx snippet serves only the configured CDN directory and applies conservative defaults for raw translation files:
#
# nginx configuration for the Weblate localization CDN
#
# You will want to change:
#
# - server_name to match the host configured in LOCALIZE_CDN_URL
# - root to match LOCALIZE_CDN_PATH
# - Access-Control-Allow-Origin to the sites that need browser access
# - TLS configuration if HTTPS is not terminated before nginx
#
server {
listen 80;
server_name cdn.example.com;
# LOCALIZE_CDN_PATH
root /home/weblate/data/l10n-cdn;
autoindex off;
disable_symlinks on;
location = / {
return 404;
}
# The JavaScript localization add-on publishes this loader.
location ~ "^/[0-9a-f]{32}/weblate\.js$" {
try_files $uri =404;
types {
application/javascript js;
}
default_type application/javascript;
add_header X-Content-Type-Options nosniff always;
# add_header Access-Control-Allow-Origin "https://www.example.com" always;
expires 1h;
}
# Other CDN files are translation files. Serve them conservatively so raw
# formats are not interpreted as active browser content.
location / {
try_files $uri =404;
types {
}
default_type text/plain;
add_header X-Content-Type-Options nosniff always;
add_header Content-Disposition "attachment" always;
# add_header Access-Control-Allow-Origin "https://www.example.com" always;
expires 1h;
}
}
Подписание коммитов Git с помощью GnuPG¶
Все коммиты могут быть подписаны с помощью ключа GnuPG вашего экземпляра Weblate.
Включите
WEBLATE_GPG_IDENTITY. (Weblate при необходимости создаст ключ GnuPG и будет использовать его для подписи всех коммитов переводов.)Эта функция требует установки GnuPG 2.1 или новее.
Этот ключ будет хранится по пути, указанному в
DATA_DIR, а открытый ключ будет отображаться на странице «О Weblate» (/about/):
В качестве альтернативы вы также можете импортировать существующие ключи в Weblate, просто установите
HOME=$DATA_DIR/homeпри вызове gpg.
Подсказка
Ключевой материал кэшируется Weblate на длительный период. Если вы позволяете Weblate создать ключ с WEBLATE_GPG_IDENTITY, а затем импортировать ключ с тем же идентификатором, чтобы использовать существующий ключ, рекомендуется очистить кэш Redis, чтобы увидеть эффект такого изменения.
Примечание
При совместном использовании DATA_DIR между несколькими серверами, пожалуйста, следуйте инструкциям на https://wiki.gnupg.org/NFS для обеспечения надёжной работы подписи GnuPG.
См. также
Ограничение частоты запросов¶
Изменено в версии 4.6: Ограничение частоты больше не применяется к вошедшим в систему суперпользователям.
Некоторые операции Weblate ограничены по частоте. Допустимо не более RATELIMIT_ATTEMPTS попыток за период RATELIMIT_WINDOW секунд. Если это количество превышено, то пользователь блокируется на RATELIMIT_LOCKOUT секунд. Существуют также параметры, задающие ограничения, специфические для конкретных действий, например RATELIMIT_CONTACT_ATTEMPTS или RATELIMIT_TRANSLATE_ATTEMPTS. Следующая таблица является исчерпывающим списком таких параметров.
Следующие операции подвержены ограничению частоты запросов:
Имя |
Область |
Допустимо попыток |
Временное окно |
Период блокировки |
|---|---|---|---|---|
Регистрация |
|
5 |
300 |
600 |
Отправка сообщения администраторам |
|
2 |
300 |
600 |
Аутентификация по паролю при входе |
|
5 |
300 |
600 |
Двухфакторная аутентификация |
|
5 |
300 |
600 |
Поиск по всему сайту |
|
6 |
60 |
60 |
Перевод |
|
30 |
60 |
600 |
Добавление в словарь |
|
30 |
60 |
600 |
Начало перевода на новый язык |
|
2 |
300 |
600 |
Создание нового проекта |
|
5 |
600 |
600 |
Ограничение частоты основано на сеансах, когда пользователь вошёл в систему, и на IP-адресе, если нет.
Если у пользователя не получается войти AUTH_LOCK_ATTEMPTS раз, то авторизация по паролю полностью отключается до тех пор, пока пользователь не сбросит свой пароль.
Настройки можно также применить в Docker-контейнере, добавив префикс WEBLATE_ к имени настройки, например RATELIMIT_ATTEMPTS становится WEBLATE_RATELIMIT_ATTEMPTS.
Для API есть отдельные настройки ограничения количества запросов, смотреть раздел Ограничение частоты запросов API.