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