Tillägg

Tillägg erbjuder möjligheter att anpassa och automatisera översättningsflödet. Administratörer kan lägga till och hantera tillägg från menyn OperationsAdd-ons i respektive översättningsprojekt eller komponent. Tillägg kan också installeras för hela webbplatsen i Hanteringsgränssnitt.

Råd

Du kan också konfigurera tillägg med hjälp av API-, DEFAULT_ADDONS eller install_addon.

Add-ons that opt in to manual triggering can be run from add-on management or using the API. Results are recorded in the add-on activity log.

../_images/addons.webp

Händelser som utlöser tillägg

Tilläggsinstallation

Aktiveras när tillägget installeras.

Komponentuppdatering

Aktiveras när en förändring sker i en komponent, till exempel:

  • Strängarna ändras i arkivet.

  • En sträng läggs till.

  • En ny översättning har lagts till.

Dagligen

Aktiveras dagligen, men tillägg delar vanligtvis upp den dagliga belastningen mellan komponenter beroende på BACKGROUND_TASKS.

Ändring av evenemang

Aktiveras efter att en ändringshändelse har skapats.

Manual trigger

Triggered when an add-on is run manually from add-on management or the API.

Repository efter tillägg

Aktiveras strax efter att den nya översättningen har lagts till och bekräftats.

Repository efter commit

Aktiveras strax efter att ändringarna har bekräftats.

Repository efter push

Aktiveras strax efter att arkivet har skickats uppströms.

Repository post-remove

Triggered just after a translation is removed.

Repository efter uppdatering

Aktiveras varje gång nya ändringar hämtas från uppströmsrepositoriet.

Repository pre-commit

Aktiveras precis innan ändringarna genomförs.

Repository före push

Aktiveras precis innan arkivet skickas uppströms.

Repository före uppdatering

Aktiveras precis innan uppdateringen av arkivet försöks.

Enhet efter sparande

Aktiveras direkt efter att strängen har sparats.

Enhet efter synkronisering

Aktiveras efter att strängen har synkroniserats med VCS.

Enhet förskapas

Aktiveras strax efter att den nyskapade strängen har sparats.

Inbyggda tillägg

Automatisk översättning

Tilläggs-ID:

weblate.autotranslate.autotranslate

Konfiguration:

mode

Automatiskt översättningsläge

Tillgängliga alternativ:

suggest

Lägg till som förslag

translate

Lägg till som översättning

fuzzy

Lägg till som ”Behöver redigeras”

q

Sökning

Observera att om du översätter alla strängar kommer alla befintliga översättningar att slängas.

auto_source

Källa för automatiserade översättningar

Tillgängliga alternativ:

others

Andra översättningskomponenter

mt

Maskinöversättning

component

Komponent

Ange URL-slug för den komponent som ska användas som källa, lämna tom för att använda alla komponenter i det aktuella projektet.

engines

Översättningsmotor

Översättningsmotor

threshold

Poänggräns

Utlösare:

Tilläggsinstallation, Komponentuppdatering, Dagligen, Ändring av evenemang

Översätter automatiskt strängar med maskinöversättning eller andra komponenter.

JavaScript-lokalisering CDN

Added in version 4.2.

Tilläggs-ID:

weblate.cdn.cdnjs

Konfiguration:

threshold

Översättningströskel

Den procentandel av översatta strängar som måste finnas för att översättningen ska inkluderas.

css_selector

CSS-väljare

CSS-väljare för att upptäcka lokaliserbara element.

cookie_name

Namn på språkcookie

Namn på cookie som lagrar språkinställningar.

files

Extrahera strängar från HTML-filer

Lista över filnamn i aktuella databas- eller fjärradresser som ska tolkas för översättningsbara strängar.

Utlösare:

Tilläggsinstallation, Dagligen, Repository efter commit, Repository efter uppdatering

Publicerar översättningar till content delivery network för användning i JavaScript eller HTML-lokalisering.

Kan användas för att lokalisera statiska HTML-sidor eller för att ladda lokalisering i JavaScript-koden.

Genererar en unik URL för din komponent som du kan inkludera i HTML-sidor för att lokalisera dem. Se Översättning av HTML och JavaScript med Weblate CDN för mer information.

Observera

Detta tillägg kräver ytterligare konfiguration på Weblate-servern. LOCALIZE_CDN_PATH konfigurerar var genererade filer ska skrivas (på ett filsystem) och LOCALIZE_CDN_URL definierar var de ska serveras (URL). Serveringen av filerna sköts inte av Weblate och måste konfigureras externt (vanligtvis med hjälp av en CDN-tjänst).

Detta tillägg är konfigurerat på Hosted Weblate och levererar filerna via https://weblate-cdn.com/.

Ta bort tomma strängar

Added in version 4.4.

Tilläggs-ID:

weblate.cleanup.blank

Konfiguration:

Detta tillägg har ingen konfiguration.

Utlösare:

Tilläggsinstallation, Repository efter commit, Repository efter uppdatering

Tar bort strängar utan en översättning från översättningsfiler.

Använd detta för att undvika tomma strängar i översättningsfiler (till exempel om ditt lokaliseringsbibliotek visar dem som saknade istället för att återgå till källsträngen).

Städa upp i översättningsfiler

Tilläggs-ID:

weblate.cleanup.generic

Konfiguration:

Detta tillägg har ingen konfiguration.

Utlösare:

Tilläggsinstallation, Repository efter uppdatering, Repository pre-commit

Uppdatera alla översättningsfiler så att de stämmer överens med den enspråkiga basfilen. För de flesta filformat betyder det att översättningsposter som inte finns kvar i basfilen kommer att raderas.

För format som innehåller ytterligare innehåll utöver översättningssträngar (såsom HTML-filer, Windows RC-filer eller OpenDocument-format) synkroniseras även översättningsfilen med basfilen.

Lägg till saknade språk

Tilläggs-ID:

weblate.consistency.languages

Konfiguration:

Detta tillägg har ingen konfiguration.

Utlösare:

Tilläggsinstallation, Dagligen, Repository efter tillägg

Säkerställer att en enhetlig uppsättning språk används för alla komponenter i ett projekt.

Observera

Komponenter som delas från andra projekt beaktas inte i detta.

Saknade språk kontrolleras en gång var 24:e timme, och när nya språk läggs till i Weblate.

Till skillnad från de flesta andra påverkar detta tillägg hela projektet.

Råd

Översätt automatiskt de nyligen tillagda strängarna med Automatisk översättning.

Komponentupptäckt

Tilläggs-ID:

weblate.discovery.discovery

Konfiguration:

match

Reguljärt uttryck för att matcha översättningsfiler mot

The regular expression must define named groups for component and language.

file_format

Filformat

Filformat

name_template

Anpassa komponentnamnet

Use Django template syntax. This template must include {{ component }}.

base_file_template

Definiera den enspråkiga basspråkfilen

Leave empty for bilingual translation files. When set, this template must include {{ component }}.

new_base_template

Definiera basfil för nya översättningar

Filename of file used for creating new translations. For gettext choose .pot file. This template must include {{ component }}.

intermediate_template

Mellanliggande språkfil

Filename of intermediate translation file. In most cases this is a translation file provided by developers and is used when creating actual source strings. This template must include {{ component }}.

language_regex

Språkfilter

Reguljärt uttryck för att filtrera översättningsfiler vid sökning efter filmask.

copy_addons

Klona tillägg från huvudkomponenten till de nyligen skapade

remove

Ta bort komponenter för icke-befintliga filer

Utlösare:

Tilläggsinstallation, Repository efter uppdatering

Lägger till och tar bort projektkomponenter automatiskt baserat på filändringar i versionskontrollsystemet.

The matching is done using regular expressions enabling complex configuration, but some knowledge is required to do so. The regular expression to match translation files has to contain two named groups to match component and language. All named groups in the regular expression can be used as variables in the template fields.

Discovery requirements

To discover a component successfully, the configuration has to do all of the following:

  • The regular expression must define component and language named groups.

  • Template fields used to name or locate per-component files must include {{ component }}, so the rendered value actually changes for each discovered component.

  • For monolingual formats, the component must contain a file matching base_file_template and at least one translation file matching match.

Worked example: news_<lang>.md

This is a common filename-based language variant layout:

  • docs/news_en.md

  • docs/news_cs.md

  • docs/guide_en.md

Use the Filename-based language variants preset for a starting point, then choose the matching file format and review the populated values.

Reguljärt uttryck:

(?:(?P<path>.*/))?(?P<component>.+?)_(?P<language>[A-Za-z]{2,3}(?:[_-][A-Za-z0-9]+)*)\.(?P<extension>[^/.]+)

Komponentnamn:

{{ component }}

Discovered file masks:
  • docs/news_*.md

  • docs/guide_*.md

In this example, {{ component }} resolves to the basename before the language suffix, so docs/news_en.md, docs/news_pt_BR.md, and docs/news_pt-BR.md all become the news component.

Du kan använda Django-mallmarkeringar i alla filnamnsfält, till exempel:

{{ component }}

Component name parsed from the component match group

{{ component|title }}

Komponentfilnamn med stor begynnelsebokstav

{{ path }}: {{ component }}

Anpassad matchningsgrupp från det reguljära uttrycket

När du klickar på Spara visas en förhandsgranskning av matchande komponenter, där du kan kontrollera om konfigurationen verkligen motsvarar dina behov:

../_images/addon-discovery.webp

Exempel på komponentupptäckt

The worked example above covers the most common filename-based variant layout. The following examples show other repository structures you can match.

En mapp per språk

En katalog per språk som innehåller översättningsfiler för komponeter.

Reguljärt uttryck:

(?P<language>[^/.]*)/(?P<component>[^/]*)\.po

Filer som matchar:
  • cs/application.po

  • cs/website.po

  • de/application.po

  • de/website.po

Gettext-lokaliseringens layout

Vanlig struktur för att lagra gettext PO-filer.

Reguljärt uttryck:

locale/(?P<language>[^/.]*)/LC_MESSAGES/(?P<component>[^/]*)\.po

Filer som matchar:
  • locale/cs/LC_MESSAGES/application.po

  • locale/cs/LC_MESSAGES/website.po

  • locale/de/LC_MESSAGES/application.po

  • locale/de/LC_MESSAGES/website.po

Komplexa filnamn

Använder både komponent- och språknamn i filnamn.

Reguljärt uttryck:

src/locale/(?P<component>[^/]*)\.(?P<language>[^/.]*)\.po

Filer som matchar:
  • src/locale/application.cs.po

  • src/locale/website.cs.po

  • src/locale/application.de.po

  • src/locale/website.de.po

Upprepad språkkod

Använder språk i både sökväg och filnamn.

Reguljärt uttryck:

locale/(?P<language>[^/.]*)/(?P<component>[^/]*)/(?P=language)\.po

Filer som matchar:
  • locale/cs/application/cs.po

  • locale/cs/website/cs.po

  • locale/de/application/de.po

  • locale/de/website/de.po

Dela Android-strängar

Android resurssträngar, dela i flera filer.

Reguljärt uttryck:

res/values-(?P<language>[^/.]*)/strings-(?P<component>[^/]*)\.xml

Filer som matchar:
  • res/values-cs/strings-about.xml

  • res/values-cs/strings-help.xml

  • res/values-de/strings-about.xml

  • res/values-de/strings-help.xml

Matchning av flera sökvägar

Flermoduls Maven-projekt med översättningar av Java-egenskaper.

Reguljärt uttryck:

(?P<originalHierarchy>.+/)(?P<component>[^/]*)/src/main/resources/ApplicationResources_(?P<language>[^/.]*)\.properties

Komponentnamn:

{{ originalHierarchy }}: {{ component }}

Filer som matchar:
  • parent/module1/submodule/src/main/resources/ApplicationResources_fr.properties

  • parent/module1/submodule/src/main/resources/ApplicationResource_es.properties

  • parent/module2/src/main/resources/ApplicationResource_de.properties

  • parent/module2/src/main/resources/ApplicationResource_ro.properties

Råd

Komponentupptäcktstillägget använder Weblates interna URL:er. Det är ett bekvämt sätt att dela VCS-inställningar mellan flera komponenter. Länkade komponenter använder det lokala arkivet för huvudkomponenten som konfigurerats genom att fylla i weblate://project/main-component i fältet Källkodsarkiv (i OperationsSettingsVersion control system) för respektive komponent. Detta sparar tid vid konfigurationen och även systemresurser.

Råd

Se till att den nya komponenten innehåller alla översättningsbara språk med Lägg till saknade språk.

Fedora Messaging

Added in version 5.15.

Tilläggs-ID:

weblate.fedora_messaging.publish

Konfiguration:

events

Ändringshändelser

Ändringshändelser

amqp_host

AMQP-brokervärd

AMQP-brokern som ska anslutas till.

amqp_ssl

Använd SSL för AMQP-anslutning

ca_cert

CA-certifikat

Paket med PEM-kodade CA-certifikat som används för att validera det certifikat som presenteras av servern.

client_key

Klient-SSL-nyckel

PEM-kodad privat SSL-nyckel för klient.

client_cert

SSL-certifikat för klienten

PEM-kodat SSL-certifikat för klient.

Utlösare:

Ändring av evenemang

Skickar aviseringar till en Fedora Messaging-kompatibel AMQP-växel.

Fedora Messaging är en AMQP-baserad publiceringsplattform för alla ändringar som sker i Weblate. Med hjälp av denna kan du koppla ytterligare tjänster till ändringar som sker i Weblate.

Meddelandeämne

Alla meddelanden har ämnet weblate.<action>.<project>.<component>.<translation>. Åtgärden är en textrepresentation i gemener av åtgärden med understreck istället för mellanslag, till exempel resource_update. Alla andra delar är valfria och representerar objektets slug eller en språkkod.

Meddelande

Kroppen består av följande fält (förutsatt att de är tillgängliga för evenemanget):

change_id

Numeriskt ID för ändring

action

Detaljerat namn på ändringen.

timestamp

Tidsstämpel i ISO-format

target

Nytt värde för ändringen (t.ex. ny översättning av strängen)

old

Gammalt värde för ändringen (t.ex. tidigare översättning av strängen)

source

Källsträng.

url

Absolut URL för att visa det relaterade objektet.

author

Författarens användarnamn (detta kan skilja sig från användarnamnet, till exempel när förslag accepteras)

user

Tillfälligt användarnamn

project

Projektslugg

component

Komponent slug

translation

Översättningsspråkkod

Meddelandehuvuden

Det finns ytterligare rubriker som du också kan använda för routning:

action

Detaljerat namn på ändringen.

project

Projektslugg

component

Komponent slug

Exempel på meddelanden

Händelse för sammanslagning av arkiv:

{
  "id": 1,
  "action": "Merged repository",
  "timestamp": "2017-06-15T11:30:47.325000+00:00",
  "url": "http://example.com/projects/test/test/",
  "component": "test"
}

Ny källsträngshändelse:

{
  "id": 2,
  "action": "New source string",
  "timestamp": "2017-06-15T11:30:47.372000+00:00",
  "url": "http://example.com/translate/test/test/cs/?checksum=6412684aaf018e8e",
  "component": "test",
  "translation": "cs",
  "source": ["Hello, world!\n"]
}

Resursuppdateringsevenemang:

{
  "id": 6,
  "action": "Resource update",
  "timestamp": "2017-06-15T11:30:47.410000+00:00",
  "url": "http://example.com/projects/test/test/cs/",
  "project": "test",
  "component": "test",
  "translation": "cs"
}
{
  "id": 7,
  "action": "Resource update",
  "timestamp": "2017-06-15T11:30:47.510000+00:00",
  "url": "http://example.com/projects/test/test/de/",
  "project": "test",
  "component": "test",
  "translation": "de"
}
{
  "id": 8,
  "action": "Resource update",
  "timestamp": "2017-06-15T11:30:47.595000+00:00",
  "url": "http://example.com/projects/test/test/it/",
  "project": "test",
  "component": "test",
  "translation": "it"
}

Projektborttagningsevenemang:

{
  "id": 9,
  "action": "Removed project",
  "timestamp": "2019-10-17T15:57:08.559420+00:00",
  "target": "test",
  "user": "testuser"
}

Nytt evenemang för bidragsgivare:

{
  "id": 11,
  "action": "New contributor",
  "timestamp": "2019-10-17T15:57:08.759960+00:00",
  "url": "http://example.com/translate/test/test/cs/?checksum=6412684aaf018e8e",
  "author": "testuser",
  "user": "testuser",
  "project": "test",
  "component": "test",
  "translation": "cs",
  "source": ["Hello, world!\n"]
}

Nytt översättningsarrangemang:

{
  "id": 12,
  "action": "New translation",
  "timestamp": "2019-10-17T15:57:08.772591+00:00",
  "url": "http://example.com/translate/test/test/cs/?checksum=6412684aaf018e8e",
  "target": ["Ahoj svete!\n"],
  "author": "testuser",
  "user": "testuser",
  "project": "test",
  "component": "test",
  "translation": "cs",
  "source": ["Hello, world!\n"]
}

Massredigering

Tilläggs-ID:

weblate.flags.bulk

Konfiguration:

q

Sökning

state

Tillstånd som ska sättas

Tillgängliga alternativ:

-1

Ändra inte

10

Behöver redigeras

11

Behöver redigeras (Behöver skrivas om)

12

Behöver redigeras (Behöver kontrolleras)

20

Översatt

30

Godkänd

add_flags

Översättningsflaggor att lägga till

remove_flags

Översättningsflaggor att ta bort

add_labels

Etiketter att lägga till

remove_labels

Etiketter att ta bort

Utlösare:

Tilläggsinstallation, Komponentuppdatering

Massredigering av flaggor, etiketter eller strängstatus.

Exempel:

Märk nya strängar automatiskt

Sökfråga

NOT has:label

Etiketter att lägga till

senaste

Markera alla Metadata-filer för App store-ändringsloggsträngar som skrivskyddade

Sökfråga

language:en AND key:changelogs/

Översättningsflaggor att lägga till

read-only

Markera vissa strängar som skrivskyddade

Sökfråga

source:r"^\`\`[.a-zA-Z0-9_-]*\`\`$" AND language:en

Översättningsflaggor att lägga till

read-only

Markera oförändrade översättningar som ”Behöver skrivas om”

Tilläggs-ID:

weblate.flags.same_edit

Konfiguration:

Detta tillägg har ingen konfiguration.

Utlösare:

Enhet förskapas

När en ny översättningsbar sträng importeras från VCS och den matchar en källsträng, markeras den som att den behöver skrivas om i Weblate. Detta är särskilt användbart för filformat som innehåller källsträngar för oöversatta strängar.

Råd

Du kanske också vill skärpa kontrollen Oförändrad översättning genom att lägga till flaggan strict-same till Översättningsflaggor.

Markera nya källsträngar som ”Behöver kontrolleras”

Tilläggs-ID:

weblate.flags.source_edit

Konfiguration:

Detta tillägg har ingen konfiguration.

Utlösare:

Enhet förskapas

När en ny källsträng importeras från VCS markeras den som att den behöver kontrolleras i Weblate. På så sätt kan du enkelt filtrera och redigera källsträngar som skrivits av utvecklarna.

Markera nya översättningar som ”Behöver skrivas om”

Tilläggs-ID:

weblate.flags.target_edit

Konfiguration:

Detta tillägg har ingen konfiguration.

Utlösare:

Enhet förskapas

När en ny översättningsbar sträng importeras från VCS markeras den som omskrivningsbar i Weblate. På så sätt kan du enkelt filtrera och redigera översättningar som skapats av utvecklarna.

Markera uppdaterade översättningar från arkivet som ”Behöver skrivas om”

Tilläggs-ID:

weblate.flags.target_repo_update

Konfiguration:

Detta tillägg har ingen konfiguration.

Utlösare:

Enhet efter synkronisering

När en strängöversättning ändras från VCS markeras den som behöver skrivas om i Weblate. Detta är särskilt användbart om översättningsfiler ofta uppdateras manuellt eller av en extern tjänst.

Fyll skrivskyddade strängar med källsträngen

Added in version 4.18.

Tilläggs-ID:

weblate.generate.fill_read_only

Konfiguration:

Detta tillägg har ingen konfiguration.

Utlösare:

Tilläggsinstallation, Komponentuppdatering, Dagligen

Fyller i översättningen av skrivskyddade strängar med källsträngen.

Statistikgenerator

Tilläggs-ID:

weblate.generate.generate

Konfiguration:

filename

Namn på genererad fil

template

Innehåll för genererad fil

Utlösare:

Tilläggsinstallation, Repository pre-commit

Genererar en fil med detaljerad information om översättningsstatusen.

Du kan använda en Django-mall både i filnamn och innehåll. Se Mallmarkering för en detaljerad beskrivning av markeringen.

Till exempel skapa en sammanfattningsfil för varje översättning:

Namn på genererad fil

locale/{{ language_code }}.json

Innehåll
{
   "language": "{{ language_code }}",
   "strings": "{{ stats.all }}",
   "translated": "{{ stats.translated }}",
   "last_changed": "{{ stats.last_changed }}",
   "last_author": "{{ stats.last_author }}",
}

Se även

Mallmarkering

Förfyll översättning med källa

Added in version 4.11.

Tilläggs-ID:

weblate.generate.prefill

Konfiguration:

Detta tillägg har ingen konfiguration.

Utlösare:

Tilläggsinstallation, Komponentuppdatering, Dagligen

Fyller i översättningssträngar med källsträng.

All untranslated strings in the component will be filled with the source string, and marked as needing edit. Use this when you can not have empty strings in the translation files. .. AUTOGENERATED START: weblate.generate.pseudolocale .. This section is automatically generated by ./manage.py list_addons. Do not edit manually.

Pseudolocale-generering

Added in version 4.5.

Tilläggs-ID:

weblate.generate.pseudolocale

Konfiguration:

source

Källsträngar

target

Målöversättning

Alla strängar i denna översättning kommer att skrivas över

prefix

Statisk text i början

var_prefix

Variabel text i början

suffix

Statisk text i slutet

var_suffix

Variabel text i slutet

var_multiplier

Variabel textmultiplikator

Hur många gånger variabeltexten ska upprepas beroende på längden på källsträngen.

include_readonly

Inkludera skrivskyddade strängar

Utlösare:

Tilläggsinstallation, Komponentuppdatering, Dagligen

Skapar en översättning genom att automatiskt lägga till prefix och suffix till källsträngarna.

Pseudolokaler är användbara för att hitta strängar som inte är förberedda för lokalisering. Detta görs genom att ändra alla översättningsbara källsträngar så att det blir lätt att upptäcka oförändrade strängar när applikationen körs på pseudolokalens språk.

Det är också möjligt att hitta strängar vars lokaliserade motsvarigheter kanske inte passar in i layouten.

Genom att använda variablerna kan man söka efter strängar som kanske inte passar in i användargränssnittet efter lokaliseringen – det förlänger texten baserat på källsträngens längd. De variabla texterna upprepas med textens längd multiplicerad med multiplikatorn. Till exempel blir Hello world med variabeltext _ och variabel multiplikator 1 Hello world___________ – texten upprepas en gång för varje tecken i källsträngen.

Strängarna genereras enligt följande mönster:

Förinställd statisk text Förinställd variabel text Källsträng Tillagd variabel text Tillagd statisk text

Råd

Du kan använda riktiga språk för testning, men det finns särskilda pseudolokaler tillgängliga i Weblate – en_XA och ar_XB.

Råd

Du kan använda detta tillägg för att starta översättning till en ny lokal av ett befintligt språk eller ett liknande språk. När du har lagt till översättningen till komponenten följer du tillägget. Exempel: Om du har fr och vill starta översättningen av fr_CA, anger du helt enkelt fr som källa, fr_CA som mål och lämnar prefixet och suffixet tomma.

Avinstallera tillägget när du har fyllt i den nya översättningen för att förhindra att Weblate ändrar översättningarna som gjorts efter kopieringen.

Bidragsgivare i kommentar

Tilläggs-ID:

weblate.gettext.authors

Konfiguration:

Detta tillägg har ingen konfiguration.

Utlösare:

Repository pre-commit

Uppdaterar kommentarsdelen i PO-filens huvud så att deltagarnamn och år av bidrag inkluderas.

PO-filens rubrik kommer att se ut så här:

# Michal Čihař <michal@weblate.org>, 2012, 2018, 2019, 2020.
# Pavel Borecki <pavel@example.com>, 2018, 2019.
# Filip Hron <filip@example.com>, 2018, 2019.
# anonymous <noreply@weblate.org>, 2019.

Uppdatera ALL_LINGUAS-variabeln i ”configure”-filen

Tilläggs-ID:

weblate.gettext.configure

Konfiguration:

Detta tillägg har ingen konfiguration.

Utlösare:

Tilläggsinstallation, Dagligen, Repository efter tillägg, Repository post-remove

Updates the ALL_LINGUAS variable in ”configure”, ”configure.in” or ”configure.ac” files, when a translation is added or removed.

Updates the ALL_LINGUAS variable in configure, configure.in or any configure.ac files, when a translation is added or removed.

Anpassa gettext-utmatning

Removed in version 5.13: Ersatt av Filformatsparametrar.

Uppdatera POT-fil (Django)

Added in version 5.17.

Tilläggs-ID:

weblate.gettext.django

Konfiguration:

interval

Update frequency

How often the add-on should update the POT file when the component is refreshed.

Tillgängliga alternativ:

daily

Dagligen

weekly

Weekly

monthly

Månatlig

normalize_header

Normalize POT header

Updates gettext headers and replaces placeholder POT comments.

Utlösare:

Tilläggsinstallation, Manual trigger, Repository efter uppdatering

Updates the gettext template using Django’s built-in makemessages command.

Uppdatera LINGUAS-fil

Tilläggs-ID:

weblate.gettext.linguas

Konfiguration:

Detta tillägg har ingen konfiguration.

Utlösare:

Tilläggsinstallation, Dagligen, Repository efter tillägg, Repository post-remove

Updates the LINGUAS file when a translation is added or removed.

Update POT file (Meson)

Added in version 5.17.

Tilläggs-ID:

weblate.gettext.meson

Konfiguration:

interval

Update frequency

How often the add-on should update the POT file when the component is refreshed.

Tillgängliga alternativ:

daily

Dagligen

weekly

Weekly

monthly

Månatlig

normalize_header

Normalize POT header

Updates gettext headers and replaces placeholder POT comments.

comment_mode

Code comments

Choose whether xgettext should extract no comments, all comments, or only comments marked with a specific tag.

Tillgängliga alternativ:

off

Do not extract comments

all

Extract all comments

tagged

Extrahera kommentarer med tagg

comment_tag

Comment tag

Tag passed to xgettext for comment extraction when using tagged comment mode.

checks

xgettext checks

Additional xgettext validation checks to enable for extracted messages.

Tillgängliga alternativ:

ellipsis-unicode

ellipsis-unicode

space-ellipsis

space-ellipsis

quote-unicode

quote-unicode

bullet-unicode

bullet-unicode

keyword

Additional keyword

Optional extra keyword passed to xgettext using –keyword.

preset

Meson preset

Built-in xgettext argument preset matching Meson gettext integration. The GLib preset adds the keyword and format-flag options used by Meson’s gettext helper.

Tillgängliga alternativ:

glib

GLib

Utlösare:

Tilläggsinstallation, Manual trigger, Repository efter uppdatering

Updates the gettext template using Meson gettext conventions.

Generera MO-filer

Tilläggs-ID:

weblate.gettext.mo

Konfiguration:

path

Sökväg till genererad MO-fil

Om inte angiven så kommer platsen för PO-filen att användas.

fuzzy

Inkludera strängar som behöver redigeras

Strängar som behöver redigeras (luddiga) är vanligtvis inte redo att användas som översättningar.

Utlösare:

Repository pre-commit

Genererar automatiskt en MO-fil för varje ändrad PO-fil.

Platsen för den genererade MO-filen kan anpassas och fältet för den använder Mallmarkering.

Observera

Om en översättning tas bort kommer dess PO-fil att raderas från arkivet, men inte MO-filen som genererats av detta tillägg. MO-filen måste tas bort manuellt från uppströms.

Uppdatera PO-filerna till att matcha POT (msgmerge)

Förändrat i version 5.13: Inställningar-konfigurationen har flyttats till Filformatsparametrar.

Tilläggs-ID:

weblate.gettext.msgmerge

Konfiguration:

Detta tillägg har ingen konfiguration.

Utlösare:

Tilläggsinstallation, Repository efter uppdatering

Uppdaterar alla PO-filer (som konfigurerats av ”filmask”) för att matcha POT-filen (som konfigurerad av ”mall för nya översättningar”) med hjälp av msgmerge.

Detta tillägg är viktigt när du arbetar med gettext PO-filer där POT-filen (mallen) uppdateras med nya strängar eller ändringar av befintliga strängar. När POT-filen uppdateras i arkivet sammanfogar detta tillägg automatiskt dessa ändringar i alla språk-PO-filer, vilket säkerställer att:

  • Nya översättningsbara strängar visas på alla språk

  • Borttagna strängar markeras som föråldrade

  • Modifierade strängar markeras som behöver granskas (fuzzy)

De flesta kommandoradsalternativ för msgmerge kan konfigureras genom att ställa in parametrar för filformat.

Uppdatera POT-fil (Sphinx)

Added in version 5.17.

Tilläggs-ID:

weblate.gettext.sphinx

Konfiguration:

interval

Update frequency

How often the add-on should update the POT file when the component is refreshed.

Tillgängliga alternativ:

daily

Dagligen

weekly

Weekly

monthly

Månatlig

normalize_header

Normalize POT header

Updates gettext headers and replaces placeholder POT comments.

filter_mode

Filtering

Optionally remove strings that are not useful to translate after Sphinx extraction.

Tillgängliga alternativ:

none

Ingen

weblate_docs

Weblate documentation

Utlösare:

Tilläggsinstallation, Manual trigger, Repository efter uppdatering

Updates the gettext template using Sphinx’s gettext builder without loading project configuration.

Update POT file (xgettext)

Added in version 5.17.

Tilläggs-ID:

weblate.gettext.xgettext

Konfiguration:

interval

Update frequency

How often the add-on should update the POT file when the component is refreshed.

Tillgängliga alternativ:

daily

Dagligen

weekly

Weekly

monthly

Månatlig

normalize_header

Normalize POT header

Updates gettext headers and replaces placeholder POT comments.

comment_mode

Code comments

Choose whether xgettext should extract no comments, all comments, or only comments marked with a specific tag.

Tillgängliga alternativ:

off

Do not extract comments

all

Extract all comments

tagged

Extrahera kommentarer med tagg

comment_tag

Comment tag

Tag passed to xgettext for comment extraction when using tagged comment mode.

checks

xgettext checks

Additional xgettext validation checks to enable for extracted messages.

Tillgängliga alternativ:

ellipsis-unicode

ellipsis-unicode

space-ellipsis

space-ellipsis

quote-unicode

quote-unicode

bullet-unicode

bullet-unicode

keyword

Additional keyword

Optional extra keyword passed to xgettext using –keyword.

input_mode

Input source

Choose whether xgettext should read source files from glob patterns or from a POTFILES/POTFILES.in manifest.

Tillgängliga alternativ:

patterns

Source file patterns

potfiles

POTFILES manifest

language

xgettext language

Programming language passed to xgettext, for example Python or C.

source_patterns

Source file patterns

Newline-separated repository-relative glob patterns for files to extract with xgettext.

potfiles_path

POTFILES path

Repository-relative path to POTFILES or POTFILES.in. Entries are resolved relative to the repository root. If present next to the manifest, POTFILES.skip excludes listed files from extraction.

Utlösare:

Tilläggsinstallation, Manual trigger, Repository efter uppdatering

Uppdatera gettext-mallen genom att använda xgettext på utvalda källfiler.

Squasha Git arkiveringar

Tilläggs-ID:

weblate.git.squash

Konfiguration:

squash

Squasha arkivering

Tillgängliga alternativ:

all

Alla arkiveringar till en enda

language

Per språk

file

Per fil

author

Efter författare

append_trailers

Lägg till git-trailers till squashade commit meddelande

Trailer-rader är rader som liknar RFC 822 e-posthuvuden i slutet på den i övrigt fria delen av ett arkiveringsmeddelande, t.ex. ’Co-authored-by: …’.

commit_message

Arkiveringsmeddelande

Detta arkiveringsmeddelande kommer att användas istället för det kombinerade arkiveringsmeddelandet från de squashade committerna.

Utlösare:

Tilläggsinstallation, Repository efter commit

Squasha Git-arkiveringar innan de pushas.

Råd

För att undvika onödiga konflikter rekommenderas det att konfigurera automatisk mottagning av uppströmsändringar via webhooks eller API, se Uppdatering av filförråden.

Git-commits kan squashas innan ändringarna pushas i något av följande lägen:

  • Alla arkiveringar till en enda

  • Per språk

  • Per fil

  • Efter författare

Originalcommit-meddelanden behålls, men upphovsmannaskapet går förlorat om inte Per author är valt eller om commit-meddelandet anpassas så att det inkluderar det.

De ursprungliga commit-meddelandena kan valfritt ersättas med ett anpassat commit-meddelande.

Trailers (commit-rader som Co-authored-by: ) kan valfritt tas bort från de ursprungliga commit-meddelandena och läggas till i slutet av det sammanslagna commit-meddelandet. Detta genererar också korrekt Co-authored-by:-kreditering för varje översättare.

Anpassa JSON-utmatning

Förändrat i version 5.12: Alternativet Undvik mellanslag efter separatorer har lagts till.

Removed in version 5.13: Ersatt av Filformatsparametrar.

Återställ förrådet till uppströms

Added in version 5.17.

Tilläggs-ID:

weblate.hosted.reset

Konfiguration:

Detta tillägg har ingen konfiguration.

Utlösare:

Tilläggsinstallation, Dagligen

Kasserar alla ändringar i Weblate-arkivet varje natt.

Formatera Java-properties-filen

Tilläggs-ID:

weblate.properties.sort

Konfiguration:

case_sensitive

Aktivera sortering av tangenter med skiftlägeskänslighet

Utlösare:

Repository pre-commit

Formaterar och sorterar Java-properties-filen.

  • Konsoliderar radbrytningar till Unix-radbrytningar.

  • Formatering av Unicode-eskapsekvenser med versaler (om sådana förekommer).

  • Tar bort tomma rader och kommentarer.

  • Sorterar strängarna efter nycklarna.

  • Tar bort dubbla strängar.

Borttagning av inaktuella kommentarer

Tilläggs-ID:

weblate.removal.comments

Konfiguration:

age

Dagar som sparas

Utlösare:

Tilläggsinstallation, Dagligen

Ange en tidsram för borttagning av kommentarer.

Detta kan vara användbart för att ta bort gamla kommentarer som kan ha blivit inaktuella. Använd med försiktighet, eftersom gamla kommentarer inte nödvändigtvis har förlorat sin betydelse.

Borttagning av inaktuella förslag

Tilläggs-ID:

weblate.removal.suggestions

Konfiguration:

age

Dagar som sparas

votes

Tröskelvärde för röstning

Threshold for removal. Leave empty to remove suggestions regardless of votes. This field has no effect with voting turned off.

Utlösare:

Tilläggsinstallation, Dagligen

Ange en tidsram för borttagning av förslag.

Kan vara mycket användbart i samband med omröstning om förslag (se Utvärdering av gruppmedlem) för att ta bort förslag som inte får tillräckligt många positiva röster inom en given tidsram.

Uppdatera RESX-filer

Tilläggs-ID:

weblate.resx.update

Konfiguration:

Detta tillägg har ingen konfiguration.

Utlösare:

Tilläggsinstallation, Repository efter uppdatering

Uppdatera alla översättningsfiler så att de matchar den enspråkiga uppströmsbasfilen. Oanvända strängar tas bort och nya läggs till som kopior av källsträngen.

Råd

Använd Städa upp i översättningsfiler om du bara vill ta bort gamla översättningsnycklar.

Slack-webhooks

Added in version 5.12.

Tilläggs-ID:

weblate.webhook.slack

Konfiguration:

webhook_url

Webhook-URL

events

Ändringshändelser

Ändringshändelser

Utlösare:

Ändring av evenemang

Skickar meddelanden till en Slack-kanal baserat på valda händelser.

Varning

Meddelandets innehåll kan innehålla HTML-taggar. Detta är ett känt problem som snart kommer att åtgärdas. Se https://github.com/WeblateOrg/weblate/issues/15056.

Råd

För att få en webhook-URL, följ stegen som beskrivs i dokumentationen för Slack Incoming Webhooks <https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks>_

Webhook

Added in version 5.11.

Förändrat i version 5.15: Sekretesslängdens överensstämmelse med specifikationen valideras nu.

Tilläggs-ID:

weblate.webhook.webhook

Konfiguration:

webhook_url

Webhook-URL

secret

Hemlighet för webhook

Standard Webhooks-hemligheten är en base64-kodad sträng.

events

Ändringshändelser

Ändringshändelser

Utlösare:

Ändring av evenemang

Skickar aviseringar till externa tjänster baserat på valda händelser, enligt standardspecifikationen för webhooks.

Begäranens nyttolast överensstämmer med Weblate Messaging-schemat. OpenAPI-beskrivningen finns också på /api/docs/. Exempel på begäran:

{
   "change_id": 99,
   "action": "Translation changed",
   "timestamp": "2019-08-24T14:15:22Z",
   "target": "Nazdar svete!",
   "old": "Nazdar!",
   "source": "Hello, world",
   "url": "/translate/project-slug/component-slug/cs/?checksum=46add148a53cab6f",
   "author": "author-username",
   "user": "user-username",
   "project": "project-slug",
   "component": "component-slug",
   "translation": "cs"
}

Exempel på begäran med kategorier:

{
   "change_id": 8910,
   "action": "Component renamed",
   "timestamp": "2025-06-11T07:15:09Z",
   "target": ["new-name"],
   "old": ["component-slug"],
   "url": "/projects/project-slug/parent-category/child-category/sub-category/component-slug/",
   "user": "testuser",
   "project": "project-slug",
   "component": "component-slug",
   "category": [
      "sub-category",
      "child-category",
      "parent-category"
   ]
}

Exempel på begäranrubriker:

{
   "webhook-id": "7f1c5477f6275a69af7b83236c20cb1a",
   "webhook-timestamp": "1748505623.044281",
   "webhook-signature": "v1,Ceo5qEr07ixe2NLpvHk3FH9bwy/WavXrAFQ/9tdO6mc="
}

webhook-signature är en lista med HMAC-signaturer separerade med mellanslag som genereras med hjälp av strängen secret, begäranens nyttolast, webhook-timestamp och webhook-id. Detta säkerställer äktheten och integriteten hos webhook-begäran.

Den angivna hemligheten är en base64-kodad sträng mellan 24 byte (192 bitar) och 64 byte (512 bitar). Den kan prefixeras med whsec_ för enkel identifiering.

För att verifiera en begäran kan du använda metoden Webhook.verify från biblioteket standardwebhooks eller en implementering av ”Standard Webhooks Specification”.

Obsolete add-ons

Anpassa XML-utdata

Added in version 4.15.

Removed in version 5.13: Ersatt av Filformatsparametrar.

Anpassa YAML-utmatning

Removed in version 5.13: Ersatt av Filformatsparametrar.

Vanliga tilläggsparametrar

Översättningsmotor

Tillgängliga alternativ:

alibaba

Alibaba

aws

Amazon Översätt

anthropic

Antropisk

apertium-apy

Apertium APy

microsoft-translator

Azure AI Translator

azure-openai

Azure OpenAI

baidu

Baidu

cyrtranslit

CyrTranslit

deepl

DeepL

glosbe

Glosbe

google-translate-api-v3

Google Cloud Translation Advanced

google-translate

Google Cloud Translation Basic

ltengine

LTEngine

libretranslate

LibreTranslate

modernmt

ModernMT

mymemory

MyMemory

netease-sight

Netease Sight

ollama

Ollama

openai

OpenAI

sap-translation-hub

SAP Translation Hub

systran

Systran

weblate

Weblate

weblate-translation-memory

Weblate översättningsminne

yandex

Yandex

yandex-v2

Yandex v2

youdao-zhiyun

Youdao Zhiyun

tmserver

tmserver

Filformat

Tillgängliga alternativ:

apple-xliff

XLIFF 1.2 with Apple extensions

appstore

Metadata-filer för App store

arb

ARB-fil

aresource

Android String-resurs

asciidoc

AsciiDoc-fil

ass

Advanced SubStation Alpha-undertextfil

catkeys

Haiku catkeys

cmp-resource

Compose Multiplatform Resource

csv

CSV-fil

csv-multi

CSV-fil med flera värden

csv-simple

Simple CSV-fil

dokuwiki

DokuWiki textfil

dtd

DTD-fil

flatxml

Flat XML-fil

fluent

Fluent-fil

formatjs

Format.JS JSON-fil

go-i18n-json

go-i18n v1 JSON-fil

go-i18n-json-v2

go-i18n v2 JSON-fil

go-i18n-toml

go-i18n TOML-fil

gotext

gotext JSON-fil

gwt

GWT-egenskaper

html

HTML-fil

i18next

i18next JSON-fil v3

i18nextv4

i18next JSON-fil v4

idml

IDML-fil

ini

INI-fil

islu

Inno Setup INI-fil

joomla

Joomla-språkfil

json

JSON-fil

json-nested

JSON nested structure-fil

laravel

Laravel PHP-strängar

markdown

Markdown-fil

mdx

MDX file

mediawiki

MediaWiki textfil

mi18n-lang

@draggable/i18n språkfil

moko-resource

Mobile Kotlin Resource

nextcloud-json

Nextcloud JSON-fil

odf

OpenDocument-fil

php

PHP-strängar

plainxliff

XLIFF 1.2 översättningsfil

po

gettext PO-fil

po-mono

gettext po-fil (enspråkig)

poxliff

XLIFF 1.2 med gettext-tillägg

properties

Java Properties

rc

RC-fil

resjson

RESJSON-fil

resourcedictionary

ResourceDictionary-fil

resx

.NET-resursfil

ruby-yaml

Ruby YAML-fil

srt

SubRip-undertextfil

ssa

SubStation Alpha-undertextfil

strings

iOS-strängar

stringsdict

Stringsdict -fil

sub

MicroDVD-undertextfil

tbx

TermBase eXchange-fil

toml

TOML-fil

ts

Qt Linguist-översättningsfil

txt

Vanlig textfil

webextension

WebExtension JSON-fil

wxl

WixLocalization file

xliff

XLIFF 1.2 med stöd för placeables

xliff2

XLIFF 2.0-översättningsfil

xliff2-placeables

XLIFF 2.0-översättningsfil med stöd för placerbara objekt

xlsx

Excel Open XML

xwiki-fullpage

XWiki Hela sidan

xwiki-java-properties

XWiki Java-egenskaper

xwiki-page-properties

XWiki-sidegenskaper

yaml

YAML-fil

Ändringshändelser

Tillgängliga alternativ:

0

Resursen uppdaterad

1

Översättning klar

2

Översättning ändrad

3

Kommentar tillagd

4

Förslag tillagt

5

Översättning tillagd

6

Automatiskt översatt

7

Förslag accepterat

8

Översättning återställd

9

Översättning skickad

13

Källsträng tillagd

14

Komponent låst

15

Komponent olåst

17

Ändringar arkiverade

18

Ändringar skickade

19

Arkivåterställning

20

Arkivet sammanslaget

21

Arkivet ombaserat

22

Sammanslagning av arkiv misslyckades

23

Ombasering av arkiv misslyckades

24

Tolkning misslyckades

25

Översättning borttagen

26

Förslaget borttaget

27

Översättning ersatt

28

Skicka arkiv misslyckades

29

Förslaget borttaget vid rensning

30

Källsträngen ändrad

31

Sträng tillagd

32

Mass-statusändring

33

Synlighet ändrad

34

Användare tillagd

35

Användare borttagen

36

Översättning godkänd

37

Flaggad för redigering

38

Komponent borttagen

39

Projektet borttaget

41

Projekt bytte namn

42

Komponent bytte namn

43

Komponent flyttad

45

Bidragsgivare gick med

46

Meddelande publicerat

47

Varning utlöst

48

Språk tillagt

49

Språk begärt

50

Projekt skapat

51

Komponent skapad

52

Användare inbjuden

53

Arkivavisering mottaget

54

Översättning ersatte fil genom uppladdning

55

Licens ändrad

56

Ändrat licensavtal för bidragsgivare

57

Skärmdump tillagd

58

Skärmdump uppladdad

59

Sträng uppdaterad i arkivet

60

Tillägg installerat

61

Tilläggskonfigurationen har ändrats

62

Tillägget avinstallerat

63

Sträng borttagen

64

Kommentar borttagen

65

Kommentar löst

66

Förklaring uppdaterad

67

Kategori borttagen

68

Kategori omdöpt

69

Kategori flyttad

70

Strängsparning misslyckades

71

Sträng tillagd i arkivet

72

Sträng uppdaterad i uppladdningen

73

Sträng tillagd i uppladdningen

74

Översättning uppdaterad genom källuppladdning

75

Komponentöversättning slutförd

76

Tillämpad tvångskontroll

77

Propagerad ändring

78

Fil uppladdad

79

Extra flaggor uppdaterade

80

Teckensnitt uppladdat

81

Teckensnitt ändrat

82

Teckensnitt borttaget

83

Tvingad synkronisering av översättningar

84

Tvingad omskanning av översättningar

85

Skärmdump togs bort

86

Etikett tillagd

87

Etikett togs bort

88

Arkivrensning

89

Source string added in the upload

90

Source string added in the repository

91

Project backed up

92

Project restored

93

Component restored

94

User edit reverted

95

Project setting changed

96

Component setting changed

Anpassa lista över tillägg

Listan över tillägg konfigureras med WEBLATE_ADDONS. För att lägga till ett nytt tillägg, ange bara det absoluta klassnamnet i denna inställning.

Skriv tillägg

Du kan också skriva egna tillägg, skapa en underklass av weblate.addons.base.BaseAddon för att definiera tilläggets metadata och sedan implementera en återanrop för att utföra bearbetningen.

Körning av skript från tillägg

Tillägg kan också användas för att köra externa skript. Detta var tidigare integrerat i Weblate, men nu måste du skriva lite kod för att omsluta ditt skript med ett tillägg.

# Copyright © Michal Čihař <michal@weblate.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later

"""Example pre commit script."""

from __future__ import annotations

from typing import ClassVar

from django.utils.translation import gettext_lazy

from weblate.addons.events import AddonEvent
from weblate.addons.scripts import BaseScriptAddon


class ExamplePreAddon(BaseScriptAddon):
    # Event used to trigger the script
    events: ClassVar[set[AddonEvent]] = {
        AddonEvent.EVENT_PRE_COMMIT,
    }
    # Name of the addon, has to be unique
    name = "weblate.example.pre"
    # Verbose name and long description
    verbose = gettext_lazy("Execute script before commit")
    description = gettext_lazy("This add-on 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"

För installationsinstruktioner, se Anpassade kvalitetskontroller, tillägg, automatiska förslag och automatiska korrigeringar.

Skriptet körs med den aktuella katalogen inställd på roten av VCS-arkivet för en given komponent.

Dessutom finns följande miljövariabler tillgängliga:

WL_VCS

Använt versionshanteringssystem.

WL_REPO

Upstream-arkivets URL.

WL_PATH

Absolut sökväg till VCS-arkivet.

WL_BRANCH

Repository-gren konfigurerad i den aktuella komponenten.

WL_FILEMASK

Filmask för aktuell komponent.

WL_TEMPLATE

Filnamn på mall för enspråkiga översättningar (kan vara tomt).

WL_NEW_BASE

Filnamn på filen som används för att skapa nya översättningar (kan vara tom).

WL_FILE_FORMAT

Filformat som används i aktuell komponent.

WL_LANGUAGE

Språk för den översättning som för närvarande bearbetas (inte tillgängligt för komponenthookar).

WL_PREVIOUS_HEAD

Tidigare HEAD efter uppdatering (endast tillgängligt efter att post-update-hooken har körts).

WL_COMPONENT_SLUG

Komponent slug som används för att konstruera URL.

WL_PROJECT_SLUG

Projektnamn som används för att skapa URL.

WL_COMPONENT_NAME

Komponentens namn.

WL_PROJECT_NAME

Projektnamn.

WL_COMPONENT_URL

Komponentens URL.

WL_ENGAGE_URL

Projektets engagemangs-URL.

Bearbetning av arkivet efter uppdatering

Kan användas för att uppdatera översättningsfiler när VCS-uppströms källan ändras. För att uppnå detta, kom ihåg att Weblate endast ser filer som har lagts in i VCS, så du måste lägga in ändringarna som en del av skriptet.

Med Gulp kan du till exempel göra det med följande kod:

#! /bin/sh
gulp --gulpfile gulp-i18n-extract.js
git commit -m 'Update source strings' src/languages/en.lang.json

Förhandsgranskning av översättningar

Använd commit-skriptet för att automatiskt ändra en översättning innan den läggs in i arkivet.

Den skickas som en enda parameter som består av filnamnet på en aktuell översättning.

Loggning av tilläggsaktiviteter

Tilläggsaktivitetsloggen håller reda på tilläggets körning och kan användas för att hålla reda på tilläggsaktiviteten.

Loggarna kan rensas efter ett visst tidsintervall genom att konfigurera ADDON_ACTIVITY_LOG_EXPIRY.