WP-CLI ile toplu çeviri çalıştırma
Bash betikleri kullanarak WP-CLI ile toplu çeviri çalıştırabilirsiniz. Bu sayede başka bir şeyle ilgilenirken çevirileri arka planda çalıştırabilirsiniz.
Bunu yapmak için iki bash betiği oluşturun:
- İşlemleri toplu olarak yürütme mantığını içeren ana betik (hiçbir zaman değişmez)
- Hangi öğelerin çevrileceğini tanımlayan yapılandırma dosyası (her çeviri çalıştırmasında güncellenmesi gerekir)
Ana betik
Çevirileri işleme mantığını içeren gatotranslate.sh (örneği indir) adlı bir dosya oluşturun:
gatotranslate komutuna iletilen parametreleri özelleştirebilirsiniz (ör.: --status-to-update=draft, --status-when-translated=same-as-origin, --parts=properties, vb.).
#!/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 "----------------------------------------"Yapılandırma dosyası
Toplu çeviri yapılandırmanızı içeren gatotranslate.config.sh (örneği indir) adlı bir dosya oluşturun:
user="admin"
subcommand="post"
batch_size=1
items=(
4118
4117
4116
3739
)Bu dosya aşağıdaki değişkenleri içermelidir:
| Değişken | Açıklama |
|---|---|
user | Komutu çalıştıracak WordPress kullanıcı adı (genellikle admin) |
subcommand | Çalıştırılacak gatotranslate WP-CLI alt komutu (post, media, term veya menu) |
batch_size | Her toplu işlemde çevrilecek öğe sayısı (varsayılan 1) |
items | Çevrilecek öğelerin (yazılar, etiketler, kategoriler, medya, menüler, vb.) ID dizisi |
Betiği çalıştırma
wp komutunun kullanılabildiği WordPress kök dizininden çalıştırın.
Toplu çeviriyi başlatmak için şunu çalıştırın:
bash +x gatotranslate.shBetik, gatotranslate komutunu tüm öğeler için belirtilen boyuttaki toplu işlemler halinde çalıştıracak ve her toplu işlem için ilerleme bilgisini gösterecektir.

Betik başarıyla tamamlandığında tek bir bip sesi çıkarır.
Hata durumunda yürütmeyi durdurma
Günlüklere bir hata veya uyarı eklendiğinde betiğin otomatik olarak durmasını sağlamak için gatotranslate.sh dosyasındaki komuta --fail-if-log-notifications parametresini ekleyin:
cmd=$(printf 'wp gatotranslate %s "%s" --fail-if-log-notifications --status-to-update=any --user=%s' "$subcommand" "${batch[*]}" "$user")Betik durdurulmasını tetikleyecek günlük bildirimlerinin önem düzeyi, Settings > Plugin Configuration > Logs & Notifications sayfasında yapılandırılan düzeylerdir.

Betik bir günlük bildirimi nedeniyle durduğunda uzun bir bip sesi dizisi çıkarır.

Sorunu giderdikten sonra, toplu işlem numarasını argüman olarak ileterek çeviriyi kaldığı yerden sürdürebilirsiniz.
Bu sayede zaten başarıyla çevrilmiş öğeleri yeniden işlemekten kaçınabilir, hem zaman hem de API kredisi tasarrufu sağlayabilirsiniz.
Örneğin, hata 2. toplu işlemde oluştuysa, sorunu giderdikten sonra şunu çalıştırın:
bash +x gatotranslate.sh 2Gelişmiş: Çevrilecek öğelerin ID'lerini alma
Toplu çeviriyi yapılandırırken çevrilecek öğelerin ID'lerini bilmeniz gerekir.
Eklenti arka planda Gato GraphQL çalıştırdığından bu bilgiyi almak için bir GraphQL query'si rahatça çalıştırabilirsiniz.
GraphQL queries çalıştırmak için önce Advanced Mode'u etkinleştirmeniz ve Queries CPT'sine erişmeniz gerekir. Advanced Mode'un nasıl etkinleştirileceğine dair talimatlar için Yardımcı Queries Oluşturma sayfasına bakın.
Retrieve item IDs başlıklı ve aşağıdaki GraphQL query'sini içeren yeni bir Queries girişi ekleyin:
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: " " )
}
}
Hangi varlıkları çevirmek istediğinize bağlı olarak, query'deki ilgili işlemi yapılandırıp çalıştırmanız gerekecektir.
Örneğin, yazı kategorilerinin ID'lerini almak için category taksonomisini argüman olarak ileterek RetrieveIDsForCategories işlemini çalıştırmanız gerekecektir:

JSON yanıtından, çevrilecek öğelerin ID'leri data.compiledData.ids girişinde yazdırılır (görselde vurgulanmıştır). Bu dizeyi kopyalayın ve yapılandırma dosyasındaki items dizisine kaydedin.