Vertalingen in batch uitvoeren met WP-CLI
Je kunt vertalingen in batch uitvoeren met WP-CLI, via bash-scripts. Zo kun je de vertalingen op de achtergrond laten draaien terwijl je aan iets anders werkt.
Maak daarvoor twee bash-scripts aan:
- Een hoofdscript dat de logica bevat om ze in batches te verwerken (dit verandert nooit)
- Een configuratiebestand dat aangeeft welke items vertaald moeten worden (wordt bijgewerkt bij elke vertaalrun)
Hoofdscript
Maak een bestand aan met de naam gatotranslate.sh (download voorbeeld) dat de logica bevat voor het verwerken van de vertalingen:
Je kunt de parameters aanpassen die worden doorgegeven aan het commando gatotranslate (bijv.: --status-to-update=draft, --status-when-translated=same-as-origin, --parts=properties, etc.).
#!/bin/bash
# ------------------------------------------------------------------------------------------------
# Load configuration
# ------------------------------------------------------------------------------------------------
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/gatotranslate.config.sh"
# ------------------------------------------------------------------------------------------------
# Arguments
# ------------------------------------------------------------------------------------------------
# (Optional) Provide the start batch number as an argument, default is 1
start_batch=${1:-1}
# ------------------------------------------------------------------------------------------------
# Logic
# ------------------------------------------------------------------------------------------------
batch_size=${batch_size:-1} # If not provided, default to 1
total_items=${#items[@]}
total_batches=$(((total_items + batch_size - 1) / batch_size))
start_batch_index=$(((start_batch - 1) * batch_size))
echo "----------------------------------------"
echo "Translating $subcommand items"
echo "----------------------------------------"
echo "Batch size: $batch_size"
echo "Total items: $total_items"
echo "Total batches: $total_batches"
echo "Starting from batch number: $start_batch"
echo "----------------------------------------"
for ((start=start_batch_index; start<total_items; start+=batch_size)); do
# Get the next batch of items
batch=("${items[@]:$start:$batch_size}")
echo "Processing batch #$((start/batch_size + 1))"
# Pass all items in the batch as separate arguments
cmd=$(printf 'wp gatotranslate %s "%s" --status-to-update=any --user=%s' "$subcommand" "${batch[*]}" "$user")
echo "Command: $cmd"
eval $cmd
exit_code=$?
if [ $exit_code -ne 0 ]; then
echo -e "\a\a\a\a\a"
exit 1
fi
done
# Finished successfully
echo -e "\a"
echo "----------------------------------------"
echo "Finished successfully 👏"
echo "----------------------------------------"Configuratiebestand
Maak een bestand aan met de naam gatotranslate.config.sh (download voorbeeld) dat de configuratie voor je batchvertaling bevat:
user="admin"
subcommand="post"
batch_size=1
items=(
4118
4117
4116
3739
)Dit bestand moet de volgende variabelen bevatten:
| Variabele | Beschrijving |
|---|---|
user | WordPress-gebruikersnaam om het commando uit te voeren (meestal admin) |
subcommand | WP-CLI-subcommando gatotranslate om uit te voeren (post, media, term of menu) |
batch_size | Aantal items dat per batch vertaald wordt (standaard 1) |
items | Array van ID's van de te vertalen items (berichten, tags, categorieën, media, menu's, etc.) |
Het script uitvoeren
Voer dit uit vanuit de WordPress-hoofdmap, waar het commando wp beschikbaar is.
Om de batchvertaling te starten, voer je uit:
bash +x gatotranslate.shHet script voert het commando gatotranslate uit voor alle items, in batches van de opgegeven grootte, en toont voortgangsinformatie voor elke batch.

Wanneer het script succesvol is afgerond, geeft het een enkelvoudig piepsignaal.
Uitvoering stoppen bij een fout
Om het script automatisch te laten stoppen wanneer er een fout of waarschuwing aan de logs wordt toegevoegd, voeg je de parameter --fail-if-log-notifications toe aan het commando in gatotranslate.sh:
cmd=$(printf 'wp gatotranslate %s "%s" --fail-if-log-notifications --status-to-update=any --user=%s' "$subcommand" "${batch[*]}" "$user")De ernst van de logmeldingen die het stoppen van het script activeren, worden geconfigureerd op de pagina Settings > Plugin Configuration > Logs & Notifications.

Wanneer het script stopt vanwege een logmelding, geeft het een uitgebreide reeks piepsignalen.

Na het oplossen van het probleem kun je de vertaling hervatten vanaf het punt waarop de fout optrad door het batchnummer als argument mee te geven.
Op die manier voorkom je dat items die al succesvol zijn vertaald opnieuw worden verwerkt, wat zowel tijd als API-credits bespaart.
Als de fout bijvoorbeeld optrad bij batch 2, voer je na het oplossen van het probleem het volgende uit:
bash +x gatotranslate.sh 2Geavanceerd: de ID's ophalen van de te vertalen items
Bij het configureren van de batchvertaling moet je de ID's kennen van de items die vertaald moeten worden.
Omdat de plugin Gato GraphQL onder de motorkap gebruikt, kunnen we gemakkelijk een GraphQL-query uitvoeren om deze informatie op te halen.
Om GraphQL-queries uit te voeren, moet je eerst de Advanced Mode inschakelen en de Queries CPT openen. Zie Hulpqueries aanmaken voor instructies over hoe je Advanced Mode inschakelt.
Voeg een nieuw Queries-item toe met de titel Retrieve item IDs en de volgende GraphQL-query:
query RetrieveIDsForCustomPosts {
customPosts(
filter: {
#########################################################
### Configure which CPTs to retrieve ###
customPostTypes: [ "post", "page" ],
#########################################################
polylangLanguagesBy: { predefined: DEFAULT }
},
pagination: { limit: -1 },
sort: { by: DATE, order: DESC }
) @export(as: "ids") {
id
title
customPostType
}
compiledData: self {
ids: _arrayJoin( array: $ids, separator: " " )
}
}
query RetrieveIDsForCategories {
categories(
#########################################################
### Configure which taxonomy to retrieve ###
taxonomy: "category",
#########################################################
filter: { polylangLanguagesBy: { predefined: DEFAULT } },
pagination: { limit: -1 },
sort: { by: NAME, order: DESC }
) @export(as: "ids") {
id
name
taxonomy
}
compiledData: self {
ids: _arrayJoin( array: $ids, separator: " " )
}
}
query RetrieveIDsForTags {
tags(
#########################################################
### Configure which taxonomy to retrieve ###
taxonomy: "post_tag",
#########################################################
filter: { polylangLanguagesBy: { predefined: DEFAULT } },
pagination: { limit: -1 },
sort: { by: NAME, order: DESC }
) @export(as: "ids") {
id
name
taxonomy
}
compiledData: self {
ids: _arrayJoin( array: $ids, separator: " " )
}
}
query RetrieveIDsForMedia {
mediaItems(
filter: { polylangLanguagesBy: { predefined: DEFAULT } },
pagination: { limit: -1 },
sort: { by: DATE, order: DESC }
) @export(as: "ids") {
id
title
}
compiledData: self {
ids: _arrayJoin( array: $ids, separator: " " )
}
}
#################################################################################################
# Watch out: This will bring all menus, not just the ones in the origin language.
# Translated menus are those with a location containing the "___" string,
# e.g.: "header___es", "footer___fr", etc.
#################################################################################################
query RetrieveIDsForMenus {
menus(
pagination: { limit: -1 },
sort: { by: NAME, order: DESC }
) @export(as: "ids") {
id
name
locations
}
compiledData: self {
ids: _arrayJoin( array: $ids, separator: " " )
}
}
Afhankelijk van welke entiteiten je wilt vertalen, moet je de bijbehorende operatie in de query configureren en uitvoeren.
Om bijvoorbeeld de ID's van berichtcategorieën op te halen, moet je de operatie RetrieveIDsForCategories uitvoeren en de taxonomie category als argument meegeven:

Uit het JSON-antwoord worden de ID's van de te vertalen items weergegeven in het item data.compiledData.ids (gemarkeerd in de afbeelding). Kopieer die string en sla deze op in de array items in het configuratiebestand.