WordPress Multilanguage: Advanced Custom Fields übersetzen

Damit die Advanced Custom Fields in einer WordPress Multilanguage Umgebung auch im Backend übersetzt sind, muss die Textdomain sehr zeitig geladen sein. Dazu wird die Init Action um folgenden Code erweitert: ($this->locale ist eine von mir definierte Klassenvariable, welche die Textdomain enthaltet.)

load_theme_textdomain($this->locale, get_template_directory() . '/languages');

Danach folgende Hooks hinzufügen:

add_action( 'current_screen', function($current_screen) {
 if(!isset($current_screen->post_type) || $current_screen->post_type != 'acf-field-group') {
 add_filter('acf/settings/l10n', function() { return true; });
 add_filter('acf/settings/l10n_textdomain', function() { return $this->locale; });
 }
 });

POT-Datei automatisch befüllen

Um die Felder zu übersetzen, habe ich meine gettext Bash Script aus dem ersten Teil meiner Multilanguage Anleitung um einen extrem hässlichen Hack erweitert. Dies funktioniert allerdings nur, wenn man die ACF Felder als PHP Code (Pfade müssen natürlich angepasst werden) extrahiert hat – eine Anpassung an einen JSON Export sollte natürlich auch kein besonderer Mehraufwand sein.

echo '<?php ' > gettext_acf.php;
grep -oE "label' ?=> ?'.*'" ../acf/fields.php | sed "s/label' => '/__('/g;s/'$/');/g" >> gettext_acf.php
grep -oE "button_label' ?=> ?'.*'" ../acf/fields.php | sed "s/button_label' => '/__('/g;s/'$/');/g" >> gettext_acf.php
grep -oE "title' ?=> ?'.*'" ../acf/fields.php | sed "s/title' => '/__('/g;s/'$/');/g" >> gettext_acf.php
grep -oE "instructions' ?=> ?'.+'" ../acf/fields.php | sed "s/instructions' => '/__('/g;s/'$/');/g" >> gettext_acf.php

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.