Sanırım bir çözüm buldum, ama biraz önce
Öncül
load_theme_textdomain()
ve load_child_theme_textdomain()
temel olarak eşittir, tek fark kullandıkları varsayılan yoldur:
- geçerli dili alırlar (kullanarak
get_locale()
) ve göreli .mo dosyasını argüman olarak iletilen yola eklerler ;
- daha sonra
load_textdomain()
hem textdomain hem de sonuçta ortaya çıkan .mo dosyasına giden yolu bağımsız değişken olarak çağırırlar.
Sonra load_textdomain
.mo dosyasını genel textdomain değişkenine yükler, ancak kaynaktan okuyabileceğimiz gibi :
Alan adı zaten mevcutsa çeviriler birleştirilir.
Her iki kümede de aynı dize varsa, orijinal değerden çeviri alınır.
Bu nedenle, yalnızca istediğimiz tema üst öğesinin dizelerini geçersiz kılmak / değiştirmek için , üst tema .mo dosyasını yüklemeden önce , yalnızca çevrilen dizeleri içeren üst metin alanı için özel bir .mo dosyası yüklememiz gerekir .
Çözüm
Sonunda, alt tema dilleri klasörüne ana temanın adını (sadece kolaylık sağlamak için) içeren bir klasör oluşturdum ve içine üst metin alanı için özel bir .mo dosyaları (dilde, xx_XX.mo
formda, xx_XX
dil kodu nerede ).
Sonra eylem functions.php
sırasında after_setup_theme
alt tema dosyama, alt tema metin etki alanı için .mo dosyasını yükleyen satırın yanına bir satır ekledim :
add_action( 'after_setup_theme', function () {
// load custom translation file for the parent theme
load_theme_textdomain( 'parent-textdomain', get_stylesheet_directory() . '/languages/parent-theme' );
// load translation file for the child theme
load_child_theme_textdomain( 'my-child-theme', get_stylesheet_directory() . '/languages' );
} );
Alt functions.php
temanın dosyası üst öğeden önce yüklendiğinden, bu dizeler üst tema çevirisine göre önceliğe sahip olacaktır (veya add_action
işlevin üçüncü parametresini kullanarak önceliği ayarlayabilirdim ).
Not: Öncüllerde aynı olacağını söylediğim gibi kullanmak load_child_theme_textdomain
yerine kullanabilirdim load_theme_textdomain
.