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

  1. Adicione weblate.gitexport às apps instaladas em settings.py:

    INSTALLED_APPS += ("weblate.gitexport",)
    
  2. 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/'

Access to browse the repositories with restricted access (with Private access control or when REQUIRE_LOGIN is enabled) requires an API token which can be obtained in your 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. For repositories using Git LFS, clone 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 ou o 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",)
  1. 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 .

O módulo de faturação também permite que os administradores do projeto 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 é administrador do projeto existente com faturação ou o utilizador é proprietário da faturação (este último é necessário ao criar uma nova faturação para que os utilizadores possam importar novos projetos).

Após a criação do projeto, o utilizador pode escolher qual faturamento deve ser cobrado pelo projeto, caso tenha acesso a mais deles.

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:

CDN de localização

The CDN de localização 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.js as 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-Origin only 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:

weblate/examples/weblate.nginx.cdn.conf
#
# 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;
    }
}

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_DIR e a chave pública é mostrada na página «Sobre»:

    ../_images/about-gpg.webp
  • Alternativamente, também pode importar as chaves existentes para o Weblate, apenas defina HOME=$DATA_DIR/home ao 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

WEBLATE_GPG_IDENTITY

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 taxas. No máximo RATELIMIT_ATTEMPTS tentativas são permitidas dentro de RATELIMIT_WINDOW segundos. O utilizador é bloqueado por RATELIMIT_LOCKOUT. Há também configurações específicas para escopos como, por exemplo, RATELIMIT_CONTACT_ATTEMPTS ou RATELIMIT_TRANSLATE_ATTEMPTS. A tabela abaixo é uma lista completa de escopos 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

REGISTRATION

5

300

600

Enviando mensagem para administradores

MESSAGE

2

300

600

Autenticação de palavra-passe ao entrar

LOGIN

5

300

600

Second-factor authentication

SECOND_FACTOR

5

300

600

Pesquisa em todo o site

SEARCH

6

60

60

Traduzir

TRANSLATE

30

60

600

Adicionando ao glossário

GLOSSARY

30

60

600

A iniciar a tradução num novo idioma

LANGUAGE

2

300

600

Criando um novo projeto

PROJECT

5

600

600

A limitação de taxa é baseada em sessões quando o utilizador está logado e, do contrário, no endereço IP.

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.