Dans un plugin que je développe, la plupart des traductions fonctionnent, mais certaines chaînes refusent de fonctionner sans raison apparente.
Pour une page de paramètres, j'utilise ce modèle:
$clgs_settings_descriptions = array(
'notification_severity_filter' => __( 'Minimum severity for notification in adminstration menu', 'custom-logging-service' ),
'def_severity_filter' => __( 'Default minimum severity filter on log page', 'custom-logging-service' ),
'manager_role' => __( 'Roles that can manage Custom Logs', 'custom-logging-service' ),
'log_entries_per_page' => __( 'Log entries per page', 'custom-logging-service' )
);
function clgs_settings_init() {
global $clgs_settings_descriptions;
//..
foreach ( $clgs_settings_descriptions as $key => $desc ) {
add_settings_field(
$key,
$desc,
'clgs_field_render',
CLGS_OPTION_PAGE,
CLGS_GROUP,
[ $key ]
);
}
}
add_action( 'admin_init', 'clgs_settings_init' );
Ces quatre chaînes sont présentes dans le fichier custom-logging-service-de_DE.po:
#: includes/settings.php:3
msgid "Minimum severity for notification in adminstration menu"
msgstr "Mindestschweregrad für Benachrichtigungen im Administrationsmenü"
#: includes/settings.php:4
msgid "Default minimum severity filter on log page"
msgstr "Standard-Mindestschweregrad auf Log-Seite"
#: includes/settings.php:5
msgid "Roles that can manage Custom Logs"
msgstr "Rollen mit der Fähigkeit, Freie Logs zu verwalten"
#: includes/settings.php:6
msgid "Log entries per page"
msgstr "Log-Einträge pro Seite"
Le fichier .mo est à jour. Il existe d'autres chaînes traduisibles dans le même fichier. Si je les modifie et exécute la pile gettext, je peux voir ces traductions apparaître dans la page rendue.
Ce ne sont que ces quatre chaînes qui ne sont pas traduites.
Quelqu'un peut-il comprendre pourquoi ils ne travaillent pas?
Mise à jour 2016-2-3 : En tant que correctif, j'appelle maintenant add_settings_field
comme ceci:
add_settings_field(
$key,
__( $desc, 'custom-logging-service' ),
'clgs_field_render',
CLGS_OPTION_PAGE,
CLGS_GROUP,
[ $key ]
);
Cela fonctionne, mais je ne dirais pas que c'est le modèle prévu.
En regardant cela à nouveau, je l'ai finalement vu: $clgs_settings_descriptions
est défini globalement, lors du chargement du plugin. Le textdomain est chargé à l'action hook plugins_loaded
, ce qui est évidemment plus tard ...