Módulos opcionales de Weblate¶
Hay varios módulos opcionales disponibles para que los configure.
Exportador de Git¶
Le proporciona acceso de solo lectura al repositorio Git subyacente mediante HTTP(S).
Instalación¶
Añade
weblate.gitexportpara instalar aplicaciones ensettings.py:INSTALLED_APPS += ("weblate.gitexport",)
Exporte los repositorios existentes migrando su base de datos después de la instalación:
weblate migrate
Consejo
El exportador de Git está activado en nuestra imagen oficial de Docker. Para apagarlo, use:
WEBLATE_REMOVE_APPS=weblate.gitexport
Uso¶
El módulo engancha automáticamente en Weblate y establece la URL del repositorio exportado en el Configuración de componentes. Los repositorios son accesibles bajo la parte /git de la URL de Weblate, por ejemplo https://example.org/git/weblate/main/.
Repositorios para proyectos disponibles públicamente pueden ser clonados sin autenticación:
git clone 'https://example.org/git/weblate/main/'
Acceso para explorar los repositorios con acceso restringido (con Privado control de acceso o cuando REQUIRE_LOGIN está habilitado) requiere un vale de API el cual puede ser obtenido en su user profile:
git clone 'https://user:KEY@example.org/git/weblate/main/'
Nota
Weblate serves the Git repository itself, but it does not serve Git LFS
objects. See Git LFS for supported behavior. Clone repositories using
Git LFS from the upstream repository and add Weblate as another remote. If
you only need Git-tracked files, you can clone from Weblate with
GIT_LFS_SKIP_SMUDGE=1 to skip downloading Git LFS objects.
Consejo
De forma predeterminada, los miembros de Usuarios y el usuario anónimo tienen acceso a los repositorios de proyectos públicos a través de los roles Acceso al repositorio y Usuario avanzado.
Facturación¶
Esto se utiliza en Hosted Weblate para definir planes de facturación, seguimiento de facturas y límites de uso.
Instalación¶
1. Add weblate.billing to installed apps in
settings.py:
INSTALLED_APPS += ("weblate.billing",)
Ejecute la migración de base de datos para instalar opcionalmente estructuras de base de datos adicionales para el módulo:
weblate migrate
Creación y asignación del plan de facturación¶
Primero necesita crear un plan de facturas para activar facturación. Navegue a la sección Administración (representada por el icono retorcido) y abra la pantalla Herramientas. Desde allí, procede al Interfaz admin de Django.
En la interfaz administrativa de Django, situar la sección FACTURA y agregar un plan de facturación. Por ejemplo, puede agregar un plan Gratuito sin coste alguno.
Si desea asignar un plan de facturación a un proyecto existente, esto también se puede hacer dentro de la “interfaz de administración de Django” usando la opción Factura de cliente.
Por último, la Django admin interface proporciona una opción de Factura para registrar los pagos de sus clientes.
Uso¶
Tras la instalación, puede controlar la factura en la interfaz administrativa. Los usuarios con facturas activadas tendrán una pestaña nueva Factura en su Perfil de usuario.
Superusers can view the 20 most recent billing audit entries on the billing detail page. Select View all in the Audit log section to browse older entries using the pagination controls.
El módulo de facturación adicionalmente permite a los usuarios crear proyectos y componentes nuevos sin necesidad de ser superusuarios (consulte Añadir proyectos y componentes de traducción). Esto es posible siempre que se cumplan las siguientes condiciones:
La facturación se encuentra dentro de los límites configurados (cualquier uso excesivo provoca el bloqueo de la creación del proyecto/componente) y pagada (si su precio es distinto de cero)
El usuario tiene permiso de Añadir proyectos al espacio de trabajo cubierto por el plan de facturación.
Al crear un proyecto, el usuario puede elegir en qué espacio de trabajo debe encontrarse el proyecto. Los proyectos creados en un espacio de trabajo con facturación se contabilizan en el plan de facturación asignado a ese espacio de trabajo. Los usuarios con permiso Editar configuración del espacio de trabajo pueden ver y pagar el plan de facturación; se les envían correos electrónicos de notificación de facturación. Consulte Facturación para obtener más detalles.
Módulo legal¶
Esto se usa en Hosted Weblate para proporcionar los documentos legales requeridos. Viene provisto de documentos en blanco, y se espera que complete las siguientes plantillas en los documentos:
legal/documents/tos.htmlDocumento de términos de servicio
legal/documents/privacy.htmlDocumento de directiva de privacidad
legal/documents/summary.htmlBreve descripción de los términos de servicio y la directiva de privacidad
legal/documents/contracts.htmlInformación del subcontratista
The legal module embeds these templates inside Weblate. Set LEGAL_URL
or PRIVACY_URL to use externally hosted documents. Configured URLs
take priority in the footer, sign-in pages, legal pages, and confirmation page.
The default terms and privacy templates link to the configured URL instead of
showing their placeholder text. Without a configured URL, Weblate links to a
visible internal legal page. When no terms link is available, the confirmation
page embeds legal/documents/tos.html.
On changing the terms of service or privacy policy, adjust
LEGAL_TOS_DATE when users should be forced to agree with the updated
documents.
Nota
Los documentos legales para el servicio Weblate alojado operado por Weblate s.r.o. están disponibles en este repositorio Git: <https://github.com/WeblateOrg/wllegal/tree/main/wllegal/templates/legal/documents>.
Los términos de servicio agrupados y los documentos legales relacionados son específicos de los servicios operados por Weblate s.r.o. Pueden servir como ejemplo de implementación, pero no deben utilizarse como base para documentos legales de otros servicios.
Instalación¶
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 = list(SOCIAL_AUTH_PIPELINE)
SOCIAL_AUTH_PIPELINE.insert(
SOCIAL_AUTH_PIPELINE.index("weblate.accounts.pipeline.second_factor") + 1,
"weblate.legal.pipeline.tos_confirm",
)
# Middleware to enforce TOS confirmation of signed in users
MIDDLEWARE += [
"weblate.legal.middleware.RequireTOSMiddleware",
]
Insert terms confirmation after two-factor authentication and before team synchronization so that logins awaiting terms acceptance do not change team memberships.
Ejecute la migración de base de datos para instalar opcionalmente estructuras de base de datos adicionales para el módulo:
weblate migrate
Proporcionar plantillas de documentos legales que coincidan con su servicio, como se describe en Adaptar documentos y estilos legales.
Consejo
In Docker deployments, enable the legal module using
WEBLATE_LEGAL_INTEGRATION instead of editing
settings.py. Use tos-confirm to enable the legal module and
legal document confirmation enforcement, or wllegal to additionally
load the hosted legal document templates used by services operated by
Weblate s.r.o. These templates are not intended for general use. To provide
your own templates in Docker, place them in
/app/data/python/customize/templates/legal/documents, see
Reemplazo de logotipos y otros archivos estáticos.
Recrea el contenedor de Docker después de cambiar las variables de entorno, por ejemplo utilizando docker compose up -d. Reiniciar un contenedor existente no aplica los valores de entorno cambiados.
Uso¶
Tras la instalación y personalización, los documentos legales se muestran en la interfaz de usuario de Weblate.
Las plantillas de la documentación legal son plantillas usuales de Django. El texto está traducido solo cuando utilice las etiquetas de traducción de Django como {% translate %} o {% blocktranslate %}; planifique el texto HTML ahora es como escrito.
Las páginas legales y la descripción general de inicio de sesión y registro proporcionan las variables terms_url y privacy_url para enlace a los documentos de términos de servicio y normativa de privacidad.
Adaptar documentos y estilos legales¶
Proporcione sus propios documentos legales al sobrescribir estas plantillas en un Crear un módulo de Python:
templates/legal/documents/tos.htmltemplates/legal/documents/privacy.htmltemplates/legal/documents/summary.htmltemplates/legal/documents/contracts.htmltemplates/legal/styles.htmlstatic/weblate_customization/legal.css
Place the customization app before weblate.legal and any other app
providing legal template overrides in INSTALLED_APPS so that
Django selects its templates. Only templates you provide are overridden; the
remaining legal templates continue to use the defaults from later apps.
La plantilla legal/styles.html está incluida en la cabecera de HTML en cada página legal. Úsalo para cargar una hoja de estilo de tu aplicación de personalización:
{% load static %}
<link rel="stylesheet" href="{% static 'weblate_customization/legal.css' %}" />
Ejecute weblate collectstatic --noinput, tras agregar o modificar el archivo estático.
En despliegues de Docker, coloque plantillas de documentos en /app/data/python/customize/templates/legal/documents, styles.html en /app/data/python/customize/templates/legal/styles.html, y la plantilla de hoja de estilo en /app/data/python/customize/static/legal.css. La plantilla de la hoja de estilo entonces utiliza {%static 'legal.css' %}. Reinicie el contenedor para aplicar los cambios, consulte Reemplazo de logotipos y otros archivos estáticos.
Por defecto, los envoltorios de documentos legales utilizan la clase tos de CSS. Weblate no adjunta ningún estilo a esta clase; puedes aplicarle estilos desde tu hoja de estilos personalizada, o establecer LEGAL_DOCUMENT_CSS_CLASS en otra clase que se ajuste al marcado de tu documento. Establece el ajuste en una cadena vacía si no se necesita ninguna clase de contenedor.
Use LEGAL_HIDDEN_DOCUMENTS to hide legal pages from the legal menu.
Hidden pages return a 404 response when requested directly. If terms or
privacy is hidden, its configured external URL remains available for links
elsewhere. Without an external URL, the link is omitted.
To use externally hosted legal documents with legal confirmation, set
LEGAL_URL and PRIVACY_URL. Hide the internal pages as well
if they should not appear in the legal menu. The confirmation page links to
the external documents and requires one agreement covering both. If privacy
is hidden and no PRIVACY_URL is set, the confirmation covers only
the terms of service.
Avatares¶
Los avatares se descargan y almacenan en caché en el lado del servidor para reducir las filtraciones de información a los sitios que los sirven de forma predeterminada. El soporte incorporado para obtener avatares de direcciones de correo electrónico configuradas para ello se puede desactivar usando ENABLE_AVATARS.
Weblate actualmente admite:
Ver también
CDN de regionalización¶
Los complementos CDN de regionalización de JavaScript y Archivos de traducción CDN escriben archivos en LOCALIZE_CDN_PATH; Weblate no los sirve. Configure el servidor web o CDN que sirve LOCALIZE_CDN_URL como un host de archivos estáticos público y de solo lectura.
Trate cada archivo CDN publicado como público. El UUID específico del complemento en la URL no es un mecanismo de control de acceso. No habilite complementos CDN para componentes que contengan cadenas privadas, texto de productos no lanzado, datos de clientes, URL internas, ejemplos de API, rutas de repositorio, comentarios de traductor o metadatos de formato de archivo que no deben ser expuestos.
El complemento extensión Archivos de traducción CDN publica archivos de traducción sin procesar en formatos admitidos por Weblate. Algunos formatos pueden ser interpretados por navegadores u otros clientes como HTML, SVG, XML, JavaScript, YAML o configuraciones específicas de aplicaciones. Sirva la CDN desde un dominio dedicado que esté separado de Weblate y de la aplicación que consume las traducciones. No comparta cookies de autenticación con el dominio de la CDN.
Configuración de servidor recomendada:
Servir sólo el directorio configurado por
LOCALIZE_CDN_PATH; no exponga repositorios de Weblate, respaldos, medios, configuración, o el directorio de datos completo.Inhabilita listado del directorio.
Deny access to
.kotlin-sdk-stagingand all its contents. The Kotlin SDK add-on uses this directory for temporary preparation, not publication. Apply this restriction before enabling the add-on, including when a CDN copies files from the origin directory.Utilice HTTPS y cree el host CDN de solo‐lectura desde el servidor de la web.
Envíe X-Content-Type-Options con
nosniff.Configure los tipos MIME conservativos. Sirve formatos de traducción desconocidas como text/plain o application/octet-stream; solo sirve
weblate.jscomo JavaScript.Para formatos de traducción sin formato que no sean intencionados para ser representado en un explorador, considere agregar Content-Disposition con
attachment.Configure
Access-Control-Allow-Originsolo para sitios que necesiten acceso al explorador para los archivos.Establezca los tiempos de vida del caché que coincidan con sus expectativas de actualización y purgue los cachés de CDN cuando el estado de traducciones deba desaparecer rápidamente.
El siguiente fragmento de nginx solo sirve al directorio CDN configurado y aplica valores predeterminados conservadores para archivos de traducción sin formato:
#
# 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;
}
# Kotlin SDK preparation files must never be served.
location ^~ /.kotlin-sdk-staging {
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;
}
# Content-addressed Android artifacts never change at the same URL.
location ~ "^/[0-9a-f]{32}/artifacts/[0-9a-f]{64}\\.arsc$" {
try_files $uri =404;
types { }
default_type application/octet-stream;
add_header X-Content-Type-Options nosniff always;
add_header Content-Disposition "attachment" always;
add_header Cache-Control "public, max-age=31536000, immutable";
# add_header Access-Control-Allow-Origin "https://www.example.com" always;
}
# Other CDN files are translation files. Serve them conservatively so raw
# formats are not interpreted as active browser content.
# Manifest JSON files also use this one-hour cache policy.
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;
}
}
Firmando consolidaciones de Git con GnuPG¶
Todas las consolidaciones pueden firmarse con la clave GnuPG de la instancia de Weblate.
Activar
WEBLATE_GPG_IDENTITY. (Weblate generará una clave GnuPG cuando sea necesario y la usará para firmar todas las consolidaciones de traducción.)Esta característica necesita instalado GnuPG 2.1 o posterior.
Puede encontrar la clave en
DATA_DIRy la clave pública se muestra en la página «Acerca de»:
Alternativamente, también puede importar claves existentes en Weblate, simplemente configure
HOME=$DATA_DIR/homeal invocar gpg.
Consejo
Weblate almacena en caché el material de la clave durante un largo período. En caso de que permita que Weblate genere una clave con WEBLATE_GPG_IDENTITY y luego importe una clave con la misma identidad para usar una clave existente, se recomienda purgar la caché de Redis para ver el efecto de dicho cambio.
Nota
Al compartir DATA_DIR entre varios hosts, siga las instrucciones en https://wiki.gnupg.org/NFS para que la firma de GnuPG funcione de manera confiable.
Ver también
Tipo limitante¶
Distinto en la versión 4.6: El tipo limitante no se aplica más para firmado en superusuarios.
Varias operaciones en Weblate tienen limitaciones de uso. Los límites de velocidad se evalúan de forma independiente para cada ámbito. A lo sumo intenta RATELIMIT_ATTEMPTS en RATELIMIT_WINDOW segundos. El usuario queda bloqueado durante RATELIMIT_LOCKOUT; Weblate no convierte esto en un bloqueo temporal de IP para todo el sitio. La tabla siguiente es un listado completo de ámbitos disponibles. El hecho de exceder un ámbito, como TRANSLATE o SEARCH, no bloquea por sí solo ámbitos no relacionados como LOGIN o SECOND_FACTOR. También existen configuraciones específicas para cada ámbito, como RATELIMIT_CONTACT_ATTEMPTS o RATELIMIT_TRANSLATE_ATTEMPTS. La tabla que aparece a continuación muestra la lista completa de ámbitos disponibles.
Las operaciones siguientes son asunto para tipo limitado:
Nombre |
Alcance |
Intentos permitidos |
Tipo de límite de ventana |
Período de bloqueo |
|---|---|---|---|---|
Registro |
|
5 |
300 |
600 |
Enviar un mensaje a los administradores |
|
2 |
300 |
600 |
Autenticación de contraseña en el inicio de sesión |
|
5 |
300 |
600 |
Restablecer contraseña |
|
5 |
300 |
600 |
Autenticación en segundo factor |
|
5 |
300 |
600 |
Búsqueda en todo el sitio |
|
6 |
60 |
60 |
Traducción |
|
30 |
60 |
600 |
Adición al glosario |
|
30 |
60 |
600 |
Comenzar una traducción en un idioma nuevo |
|
2 |
300 |
600 |
Crear un proyecto nuevo |
|
5 |
600 |
600 |
Conectando una cuenta GitHub |
|
100 |
3600 |
600 |
Loading component branches |
|
30 |
60 |
60 |
Rendering a Markdown preview |
|
60 |
60 |
60 |
Dentro de cada ámbito, el tipo de limitación está basado en sesiones cuando el usuario está firmado en y sobre dirección IP si no.
Strict enforcement across concurrent workers requires a cache backend with atomic increment and decrement operations. The standard Configurar caché configuration using Valkey or Redis provides these operations.
For signed-in users, Weblate records the first rejected request during each active scope lockout in the Actividad, including the scope and request path. Repeated rejections during the same lockout do not create additional audit-log entries.
Si un usuario no consigue iniciar sesión AUTH_LOCK_ATTEMPTS veces, la autenticación de contraseña se desactivará en la cuenta hasta que haya pasado por el proceso de restablecimiento de su contraseña.
La configuración también se puede aplicar en el contenedor Docker agregando el prefijo WEBLATE_ al nombre de la configuración, por ejemplo RATELIMIT_ATTEMPTS se convierte en WEBLATE_RATELIMIT_ATTEMPTS.
El API tiene configuraciones de limitación de velocidad separadas, consulte Limitación del tipo de API.