Módulos opcionais do Weblate¶
Estão disponíveis vários módulos opcionais para você configurar.
Exportador git¶
Fornece acesso de apenas leitura ao repositório Git subjacente usando HTTP(S).
Instalação¶
Adicione
weblate.gitexportàs apps instaladas emsettings.py:INSTALLED_APPS += ("weblate.gitexport",)
Exporte repositórios existentes migrando a sua base de dados após a instalação:
weblate migrate
Dica
O exportador Git está ativado na nossa imagem oficial do Docker. Para desativá-lo, use:
WEBLATE_REMOVE_APPS=weblate.gitexport
Uso¶
O módulo conecta-se automaticamente ao Weblate e define a URL do repositório exportado na Configuração de componente. Os repositórios são acessíveis na parte /git/ da URL do Weblate, por exemplo, https://example.org/git/weblate/main/.
Repositórios para projetos disponíveis publicamente podem ser clonados sem autenticação:
git clone 'https://example.org/git/weblate/main/'
O acesso para explorar os repositórios com acesso restrito (com controlo de acesso Privado ou quando REQUIRE_LOGIN está ativado) requer um código da API que pode ser obtido no seu perfil de utilizador:
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.
Dica
Por predefinição, os membros do grupo Utilizadores e utilizador anónimo têm acesso aos repositórios para projetos públicos via Acessar repositório e funções de Utilizador avançado.
Faturação¶
Isso é usado no Weblate Alojado para definir planos de faturação, rastrear faturas e limites de uso.
Instalação¶
1. Add weblate.billing to installed apps in
settings.py:
INSTALLED_APPS += ("weblate.billing",)
Execute a migração da base de dados para instalar opcionalmente estruturas de bases de dados adicionais para o módulo:
weblate migrate
Criação e atribuição de plano de faturação¶
Primeiro precisa criar um plano de faturação para ativar a cobrança. Navegue até a secção Administration (representada pelo ícone de chave inglesa) e abra o ecrã Tools. Depois aceda a Django admin interface.
Na interface administrativa do Django, localize a secção COBRANÇA e adicione um plano de cobrança. Por exemplo, pode adicionar um plano Free sem custo.
Se desejar atribuir um plano de faturação a um projeto existente, isto também pode ser feito na Interface administrativa Django usando a opção Faturação de clientes.
Por fim, a Django admin interface fornece uma opção Invoice para registar os pagamentos dos clientes.
Uso¶
Após a instalação, pode controlar a faturação na interface de administração. Os utilizadores com faturação ativada obterão um novo separador Faturação no seu Perfil do utilizador .
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.
O módulo de faturação também permite que os utilizadores criem novos projetos e componentes sem serem superutilizadores (veja Adicionar projetos e componentes de tradução). Isto é possível quando são cumpridas as seguintes condições:
A faturação está nos seus limites configurados (qualquer uso excessivo resulta no bloqueio da criação do projeto/componente) e pagos (se o preço for diferente de zero)
O utilizador tem a permissão Adicionar projetos ao espaço de trabalho para o espaço de trabalho abrangido pelo plano de faturação.
Ao criar o projeto o utilizador pode escolher que espaço de trabalho deve conter o projeto. Projetos criados em um espaço de trabalho com uma faturação são contabilizados no plano de faturação atribuído a esse espaço de trabalho. Utilizadores com a permissão Editar configurações de espaços de trabalho podem ver e pagar o plano de faturação; e-mails de notificação de faturação são enviados a estes utilizadores. Veja Faturação para detalhes.
Módulo legal¶
Isso é usado em Weblate hospedado para fornecer documentos legais necessários. Ele vem fornecido com documentos em branco e espera-se que preencha os seguintes modelos nos documentos:
legal/documents/tos.htmlDocumento de termos de serviço
legal/documents/privacy.htmlDocumento de política de privacidade
legal/documents/summary.htmlVisão geral breve dos termos de serviço e política de privacidade
legal/documents/contracts.htmlInformação de subcontratado
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.
Ao alterar os termos de serviço ou política de privacidade, ajuste LEGAL_TOS_DATE onde os utilizadores devem ser forçados a concordar com os documentos atualizados.
Nota
Documentos legais para o serviço Hosted Weblate operados pelo Weblate s.r.o estão disponíveis neste repositório Git: <https://github.com/WeblateOrg/wllegal/tree/main/wllegal/templates/legal/documents>.
Os termos de serviço incluídos e documentos legais relacionados são específicos a serviços operados pelo Weblate s.r.o. Eles podem servir como um exemplo de implementação, mas não devem ser usados como base para documentos legais ou outros serviços.
Instalação¶
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.
Execute a migração da base de dados para instalar opcionalmente estruturas de bases de dados adicionais para o módulo:
weblate migrate
Fornece modelos de documentos legais que correspondem ao seu serviço, conforme descrito em Personalizar documentos legais e estilos.
Dica
Em implementações do Docker, ative o módulo legal usando WEBLATE_LEGAL_INTEGRATION em vez de editar settings.py. Use tos-confirm para ativar a aplicação da confirmação do módulo legal e documento legal, ou wlegal para adicionalmente carregar os modelos de documentos hospedados usados por serviços operados pelo Weblate s.r.o. Estes modelos não se destinam para uso geral. Para fornecer os seus próprios modelos no Docker, coloque-os em /app/data/python/customize/templates/legal/documents, veja Substituindo o logotipo e outros ficheiros estáticos.
Recria o contentor Docker após mudar as variáveis de ambiente, por exemplo usando docker compose up -d. Reiniciar um contentor existente não aplica variáveis de ambiente mudadas.
Uso¶
Após a instalação e personalização, os documentos legais são exibidos na interface de utilizador do Weblate.
Os modelos de documento legal são modelos Django regulares. Texto é traduzido apenas quando usa etiquetas de tradução Django tais como {%translate%} ou {%blocktranslate%}; texto HTML bruto é mostrado tal como está escrito.
Páginas legais e a sinopse de início de sessão e registo fornecem as variáveis terms_url e privacy_url para dar link aos documentos dos termos de serviço e política de privacidade.
Personalizar documentos legais e estilos¶
Forneça os seus documentos legais ao sobrescrever estes modelos em Criar um módulo 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
Coloque a aplicação de personalização antes de weblate.legal e qualquer outra aplicação a fornecer substituições de modelos legais em INSTALLED_APPS para que o Django selecione os seus modelos. Apenas modelos que fornece são sobrescritos; os modelos legais restantes continuam a usar as predefinições de aplicações posteriores.
O modelo legal/styles.html está incluído no cabeçalho HTML de cada página legal. Utilize-o para carregar uma folha de estilos da sua aplicação de personalização:
{% load static %}
<link rel="stylesheet" href="{% static 'weblate_customization/legal.css' %}" />
Execute weblate collectstatic --noinput após adicionar ou mudar o ficheiro estático.
Nas implementações Docker, coloque modelos de documento em /app/data/python/customize/templates/legal/documents, styles.html em /app/data/python/customize/templates/legal/styles.html, e a folha de estilos em /app/data/python/customize/static/legal.css. O modelo da folha de estilos usa {% static 'legal.css' %}. Reinicie o contentor para aplicar as mudanças, veja Substituindo o logotipo e outros ficheiros estáticos.
Por predefinição, invólucros de documentos legais utilizam a classe CSS tos. O Weblate não anexa qualquer estilo a esta classe; defina-a na sua folha de estilo personalizada, ou defina LEGAL_DOCUMENT_CSS_CLASS para outra classe correspondente à sua marcação de documento. Defina a definição para uma cadeia de carateres vazia se nenhuma classe de invólucro é necessária.
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¶
Os avatares são descarredaos e armazenados em cache no lado do servidor para reduzir o vazamento de informações para os sites que os servem por predefinição. O suporte embutido para buscar avatares de endereços de e-mail configurados para isso pode ser desligado usando ENABLE_AVATARS.
Atualmente, o Weblate oferece suporte a:
Veja também
CDN de localização¶
Os extras CDN de localização JavaScript e Ficheiros de tradução CDN escrevem ficheiros para LOCALIZE_CDN_PATH; o Weblate não os disponibiliza. Configure o servidor web ou CDN servindo LOCALIZE_CDN_URL como um servidor de ficheiros estáticos, público e apenas de leitura.
Tratar todos os ficheiros CDN publicados como públicos. O UUID específico do extra no URL não é um mecanismo de controlo de acesso. Não ative extras de CDN para componentes que contenham cadeias de carateres privadas, texto de produtos não lançados, dados do cliente, URLs internos, exemplos de API, caminhos de repositório, comentários de tradutor, ou metadados do formato de ficheiro que não devem ser expostos.
O extra Ficheiros de tradução CDN publica ficheiros de tradução brutos em formatos suportados pelo Weblate. Alguns formatos podem ser interpretados por navegadores ou outros clientes como HTML, SVG, XML, JavaScript, YAML, ou configuração específica da aplicação. Servir o CDN a partir de um domínio dedicado, distinto do Weblate e da aplicação a consumir as traduções. Não partilhe cookies de autenticação com o domínio CDN.
A configuração de servidor recomendada:
Serve apenas o diretório configurado por
LOCALIZE_CDN_PATH; não disponibilize repositórios Weblate, cópias de segurança, média, configuração, ou o diretório de dados inteiro.Desativar listagem de diretório.
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.Utiliza HTTPS e torna o anfitrião CDN apenas para leitura a partir do servidor web.
Envia X-Content-Type-Options com
nosniff.Configura tipos MIME conservadores. Fornece formatos de tradução desconhecidos na forma de text/plain ou application/octet-stream; apenas disponibiliza
weblate.jsenquanto JavaScript.Para formatos de tradução em bruto que não se destinam a ser renderizados em um navegador, considere adicionar Content-Disposition com
attachment.Configure
Access-Control-Allow-Originapenas para sites que precisam de acesso de navegador aos ficheiros.Define tempo de vida da cache que corresponde às suas expectativas de atualização, e purga caches CDN quando traduções desatualizadas têm que desaparecer rapidamente.
Os seguintes excertos nginx servem apenas para o diretório CDN configurado e aplicam predefinições conservativas para ficheiros de tradução brutos:
#
# 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;
}
}
Assinando commits do Git com GnuPG¶
Todos os commits podem ser assinados pela chave GnuPG da instância Weblate.
Ative
WEBLATE_GPG_IDENTITY. (Weblate irá gerar uma chave GnuPG quando necessário e irá usá-la para assinar todos os commits de tradução.)Esta funcionalidade precisa do GnuPG 2.1 ou mais recente instalado.
Pode encontrar a chave em
DATA_DIRe a chave pública é mostrada na página «Sobre»:
Alternativamente, também pode importar as chaves existentes para o Weblate, apenas defina
HOME=$DATA_DIR/homeao invocar gpg.
Dica
O material da chave é armazenado em cache pelo Weblate por um longo período. Caso permita que o Weblate gere uma chave com WEBLATE_GPG_IDENTITY e, em seguida, importe uma chave com a mesma identidade para usar uma chave existente, é recomendável limpar o cache do Redis para ver o efeito dessa alteração.
Nota
Ao partilhar DATA_DIR entre vários hosts, siga as instruções em https://wiki.gnupg.org/NFS para garantir que a assinatura do GnuPG funcione de forma confiável.
Veja também
Limitação de taxa¶
Alterado na versão 4.6: A limitação de taxa já não se aplica a superutilizadores logados.
Várias operações no Weblate são limitadas por cotas. Limites de cotas são avaliados independentemente para cada âmbito. No máximo RATELIMIT_ATTEMPTS tentativas são permitidas dentro de RATELIMIT_WINDOW segundos em um âmbito. Esse âmbito é então bloqueado durante RATELIMIT_LOCKOUT; o Weblate não torna isto em um ban temporário de IP no site completo. Exceder um âmbito, com o TRANSLATE ou SEARCH não bloqueia só por si mesmo âmbitos não relacionados como LOGIN or SECOND_FACTOR. Também há definições específicas a âmbitos, por exemplo RATELIMIT_CONTACT_ATTEMPTS ou RATELIMIT_TRANSLATE_ATTEMPTS. A tabela abaixo é uma lista completa dos âmbitos disponíveis.
As seguintes operações estão sujeitas a limitação de taxa:
Nome |
Âmbito |
Tentativas permitidas |
Janela de limite de tempo |
Período de bloqueio |
|---|---|---|---|---|
Registo |
|
5 |
300 |
600 |
Enviando mensagem para administradores |
|
2 |
300 |
600 |
Autenticação de palavra-passe ao entrar |
|
5 |
300 |
600 |
Redefinição da palavra-passe |
|
5 |
300 |
600 |
Autenticação de segundo fator |
|
5 |
300 |
600 |
Pesquisa em todo o site |
|
6 |
60 |
60 |
Traduzir |
|
30 |
60 |
600 |
Adicionando ao glossário |
|
30 |
60 |
600 |
A iniciar a tradução num novo idioma |
|
2 |
300 |
600 |
Criando um novo projeto |
|
5 |
600 |
600 |
Conectar uma conta GitHub |
|
100 |
3600 |
600 |
Loading component branches |
|
30 |
60 |
60 |
Rendering a Markdown preview |
|
60 |
60 |
60 |
Dentro de cada âmbito, a limitação de taxa é baseada em sessões quando o utilizador tem a sessão iniciada ou no endereço IP, caso contrário.
Strict enforcement across concurrent workers requires a cache backend with atomic increment and decrement operations. The standard Configurar cache configuration using Valkey or Redis provides these operations.
Para utilizadores com sessão iniciada, o Weblate grava o primeiro pedido rejeitado durante cada bloqueio de âmbito ativo no Activity, incluindo o âmbito e caminho de pedido. Rejeições repetidas durante o mesmo bloqueio não criar entradas de registo de auditoria adicionais.
Se um utilizador falhar a autenticação AUTH_LOCK_ATTEMPTS vezes, a autenticação da palavra-passe será desativada na conta até ter passado pelo processo de redefinição da palavra-passe.
As configurações também podem ser aplicadas no contentor do Docker adicionando o prefixo WEBLATE_ ao nome da configuração, por exemplo RATELIMIT_ATTEMPTS torna-se WEBLATE_RATELIMIT_ATTEMPTS.
A API possui configurações separadas de limitação de taxa, consulte Limitação de taxa da API.