J'ai un thème qui est configuré pour la traduction mais qui n'est pas accompagné de traductions. J'ai utilisé poedit pour détecter automatiquement les chaînes, puis je les ai traduites intégralement. Cependant, certains éléments ne sont pas traduits en admin ou sur le site.
Je peux voir dans poedit que j'ai traduit toutes les chaînes, y compris celles qui ne sont pas traduites sur le site actif. Une partie de la chaîne non traduite apparaît sur le front-end, mais la plupart sont dans admin.
J'ai remarqué qu'il semblerait que les chaînes qui ne traduisent pas soient celles chargées via 'add_action'. Ainsi, par exemple, le thème est livré avec certains types de publications personnalisées, 1 correspondant aux événements. En admin, tout ce qui concerne ce type de message personnalisé est en cours de traduction, à l'exception des chaînes associées aux métaboxes.
Ainsi, par exemple, le contenu de l'administrateur créé par le code suivant ne se traduit pas par administrateur;
$meta_box_events = array(
'id' => 'core-meta-box-events',
'title' => __('Events Options', CORE_THEME_NAME),
'post_type' => 'event',
'context' => 'normal',
'priority' => 'high',
'fields' => array(
array(
'name' => __('Event Month', CORE_THEME_NAME),
'desc' => __('Choose the event month ', CORE_THEME_NAME),
'id' => 'core_event_month',
'type' => 'select',
'options' => array(__('January', CORE_THEME_NAME),
__('February', CORE_THEME_NAME),
__('March', CORE_THEME_NAME),
__('April', CORE_THEME_NAME),
__('May', CORE_THEME_NAME),
__('June', CORE_THEME_NAME),
__('July', CORE_THEME_NAME),
__('August', CORE_THEME_NAME),
__('September', CORE_THEME_NAME),
__('October', CORE_THEME_NAME),
__('November', CORE_THEME_NAME),
__('December', CORE_THEME_NAME)
)
),
array(
'name' => __('Event Day', CORE_THEME_NAME),
'desc' => __('Choose the event day. ', CORE_THEME_NAME),
'id' => 'core_event_day',
'type' => 'select',
'options' => array( '1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'10',
'11',
'12',
'13',
'14',
'15',
'16',
'17',
'18',
'19',
'20',
'21',
'22',
'23',
'24',
'25',
'26',
'27',
'28',
'29',
'30',
'31'
)
),
array(
'name' => __('Event Year', CORE_THEME_NAME),
'desc' => __('Enter the event year using this format <em>0000.</em>', CORE_THEME_NAME),
'id' => 'core_event_year',
'type' => 'text',
'std' => ''
),
array(
'name' => __('Event Time', CORE_THEME_NAME),
'desc' => __('Enter the event time using this format <em>00:00AM/PM to 00:00AM/PM.</em>', CORE_THEME_NAME),
'id' => 'core_event_time',
'type' => 'text',
'std' => ''
),
array(
'name' => __('Event Location', CORE_THEME_NAME),
'desc' => __('Enter the event location, example: <em>Cramton Auditorium.</em>', CORE_THEME_NAME),
'id' => 'core_event_location',
'type' => 'text',
'std' => ''
),
array(
'name' => __('Event City', CORE_THEME_NAME),
'desc' => __('Enter the city of the event, example: <em>London.</em>', CORE_THEME_NAME),
'id' => 'core_event_city',
'type' => 'text',
'std' => ''
),
array(
'name' => __('Event Zip Code', CORE_THEME_NAME),
'desc' => __('Enter the address Zip code, example: <em>10308 89.</em>', CORE_THEME_NAME),
'id' => 'core_event_Zip',
'type' => 'text',
'std' => ''
),
array(
'name' => __('Event Country', CORE_THEME_NAME),
'desc' => __('Enter the event country, example: <em>United Kingdom.</em>', CORE_THEME_NAME),
'id' => 'core_event_country',
'type' => 'text',
'std' => ''
),
array(
'name' => __('Event Phone', CORE_THEME_NAME),
'desc' => __('Enter the phone info, example: <em>+44 (0)20 7040 8037.</em>', CORE_THEME_NAME),
'id' => 'core_event_phone',
'type' => 'text',
'std' => ''
),
array(
'name' => __('Event Map Latitude', CORE_THEME_NAME),
'desc' => __('Enter the google map longitude information, example: <em>-12.8809532.</em>', CORE_THEME_NAME),
'id' => 'core_event_lat',
'type' => 'text',
'std' => ''
),
array(
'name' => __('Event Map Longitude', CORE_THEME_NAME),
'desc' => __('Enter the google map longitude information, example: <em>-38.4174871.</em>', CORE_THEME_NAME),
'id' => 'core_event_lon',
'type' => 'text',
'std' => ''
)
)
);
add_action('add_meta_boxes', 'core_add_metabox_events');
Le 'CORE_THEME_NAME' est en train d'être ramassé, je l'ai répété pour en être sûr.
Ainsi, ma connaissance quelque peu limitée de WordPress m'a fait soupçonner que les traductions étaient déclenchées avant le chargement de ce code. Cependant, la traduction est appelée dans le fichier functions.php comme suit;
add_action('after_setup_theme', 'lang_setup');
function lang_setup(){
load_theme_textdomain(CORE_THEME_NAME, CORE_DIRECTORY . '/languages');
}
D'après ce que j'ai vu, cela devrait permettre de s'assurer que le textdomain est chargé une fois que tous les composants du thème sont chargés. Alors, pourquoi les chaînes ne sont-elles pas traduites dans l'administrateur du site pour les publications d'événements?
Toutes les idées/suggestions/etc seront grandement appréciées.
Merci.
Vous ne devriez pas utiliser de constante (dans votre cas, CORE_THEME_NAME) pour le domaine textdomain. En effet, l'appel à __
analyse votre code et ne l'exécute pas. Simplement dit: il ne cherche pas la valeur de la constante. Donc, cela ne se traduira pas. Citant le célèbre Otto :
Dans toutes les fonctions de traduction, aucune variable PHP n'est autorisée dans les chaînes, pour quelque raison que ce soit. Chaînes simples, entre guillemets seulement.