tips voor localize syncronisatie bij import

Het Importeren en Synchroniseren van Pagina’s met Wagtail en Wagtail Localize

wagtail-banner-image

Probleem stelling

Een van onze klanten, met een uitgebreide database van vertaalde artikelen, wil overstappen naar Wagtail. Het is uiteraard geen optie om al die content handmatig te kopiëren en plakken. De klant wil bovendien gebruikmaken van Wagtail Localize om machinevertalingen te kunnen uitvoeren. Het simpelweg overzetten van de content naar de nieuwe database bleek echter niet voldoende. De migratie bleek iets complexer te zijn, vooral omdat het niet volgen van de juiste procedure kan betekenen dat je de Wagtail Synchronize-optie voor vertalingen misloopt. Hieronder delen we de stappen die nodig zijn om dit proces op de juiste manier te laten verlopen.

Het proces van pagina-import en vertalingen met Wagtail Localize

Bij het importeren en vertalen van pagina’s in Wagtail begint alles met een originele pagina, bijvoorbeeld in het Nederlands. Deze original_page vormt de basis van je content en de basis voor het creëren van vertalingen naar andere talen.

Stap 1: Aanmaken van vertalingen

Met de functie translate_object kun je op een eenvoudige manier vertalingen genereren. Deze functie accepteert twee parameters:

  • De originele pagina die je eerder hebt aangemaakt, bijvoorbeeld in het Nederlands.
  • Een lijst van talen (of locales) waarin je de originele pagina wilt vertalen.

Deze functie zorgt ervoor dat de originele content wordt gekopieerd naar de nieuwe pagina’s, dit met de orginele content.

translate_object(original_page, locales)

Stap 2: Het koppelen van de TranslationSource

Na het aanmaken van vertalingen is het belangrijk om de TranslationSource te verkrijgen. Dit model, onderdeel van Wagtail Localize, beheert de relatie tussen de originele pagina en de vertalingen. Je kunt de TranslationSource als volgt ophalen deze werden reeds aangemaakt in het translate_object:

translation_source, created = TranslationSource.get_or_create_from_instance(original_page)

translation_source is cruciaal om toegang te krijgen tot de synchronisatiestatus van de vertalingen.

Stap 3: Synchronisatie uitschakelen

Zodra je toegang hebt tot de TranslationSource, kun je de synchronisatie uitschakelen. Dit doe je door alle gekoppelde vertalingen te vinden via het Translation-model en de eigenschap enabled op False te zetten:

Translation.objects.filter(source=translation_source).update(enabled=False)

Het uitschakelen van de synchronisatie zorgt ervoor dat je automatisch de content kunt aanpassen in de vertaalde pagina’s zonder dat deze automatisch wordt overschreven door de content in de originele pagina.

Praktisch voorbeeld

Stel dat je een pagina in het Nederlands hebt aangemaakt. Je wilt vertalingen toevoegen in Frans, Engels en Duits. Het proces zou er als volgt uitzien:

  • Start met de originele pagina. Deze bevat alle basisinformatie en is klaar om te worden vertaald.
  • Voer translate_object uit. Dit maakt de vertalingen aan in de gewenste talen.
  • Haal de TranslationSource op. Hiermee beheer je de koppeling tussen de originele pagina en de vertalingen.
  • Schakel de synchronisatie uit. Hierdoor kun je de vertaalde content zonder beperkingen aanpassen.
from wagtail_localize.models import TranslationSource, Translation
from wagtail.core.models import Locale

def create_wagtail_localize_translations(original_page: Page):
    locales = Locale.objects.all()
    translate_object(original_page, locales)
    translation_source, created == TranslationSource.get_or_create_from_instance(original_page)
    Translation.objects.filter(source=translation_source).update(enabled=False)

Hoewel het proces in eerste instantie wat omslachtig lijkt, biedt deze aanpak de flexibiliteit om pagina’s op een gecontroleerde manier te vertalen en aan te passen. Door tijd te investeren in een gestructureerde workflow, zoals hierboven beschreven, kun je consistente en kwalitatieve meertalige content creëren zonder onverwachte synchronisatieproblemen.