Wow! Si vous vous demandez ce que signifie cet article, ne vous inquiétez pas, vous n’êtes pas le seul ! Comme vous le savez, WordPress est traduit dans de nombreuses langues, mais très souvent des plugins ou des thèmes contiennent des chaînes qui ne sont pas traduites dans votre propre langue et c’est plus que frustrant : c’est agaçant.
Alors pourquoi cela se produit-il ? Probablement parce que les développeurs n’utilisent pas comme ils le devraient internationalisation. C’est-à-dire l’utilisation de fonctions spécifiques incluses dans WordPress qui permettent un moyen facile de tout traduire.
Étape 1 – Chargement des fichiers de traduction
La toute première étape lors de la création d’un thème est de charger les fichiers de traduction, il existe de nombreuses façons de le faire, mais la plus simple est d’utiliser ce code :
add_action('after_setup_theme', 'my_theme_setup');
function my_theme_setup(){
load_theme_textdomain('my_theme', get_template_directory() . '/languages');
}
Quand on travaille sur un plugin, c’est à peu près la même chose :
function myplugin_init() {
load_plugin_textdomain( 'my-plugin', false, dirname( plugin_basename( __FILE__ ) ) );
}
add_action('plugins_loaded', 'myplugin_init');
Maintenant que les fichiers sont chargés dans un dossier « languages », vous pouvez créer un fichier .pot ou .po en utilisant POéditer logiciel gratuit.
Étape 2 – Traduction des chaînes
Lorsque vous avez besoin qu’une chaîne soit traduisible, vous devez inclure la chaîne contenue dans une fonction. Les fonctions les plus utilisées sont _e() et __(). Voici un exemple d’utilisation de __() :
echo '<p>' . __( 'This is the string content', 'textdomain' ) . '</p>';
Qu’est-ce que cette fonction renvoie la chaîne contient, mais elle ne l’imprime pas. C’est pourquoi nous devons utiliser l’écho. Mais la fonction _e() imprime la chaîne contenue sans utiliser echo ou print :
echo '<p>';
_e( 'This is the string content', 'textdomain' );
echo '</p>';
Étape 3 – Traduction d’une chaîne contenant des variables
Mais parfois, votre chaîne peut contenir des variables. L’utilisation de _e() et __() ne fonctionne pas. Donc, dans ce cas, vous devez utiliser les fonctions printf() et sprintf(). Comme nous l’avons vu précédemment, printf() renvoie la chaîne tandis que sprintf() la stocke.
echo '<p>';
printf( __( 'I bought %d books.' ), $_books_count );
echo '</p>';
echo '<p>';
echo sprintf( __( 'I bought %d books.' ), $_books_count );
echo '</p>';
Étape 4 – Chaînes avec plus d’une variable
Dans le cas d’une chaîne contenant plusieurs variables, utilisez le code suivant :
printf( __( 'I bought %1$s books, and %2$s tomatoes.' ), $books_count, $tomatoes_count );
Étape 5 – Traiter les pluriels
Dans l’exemple ci-dessus, j’ai acheté des livres et des tomates. Mais qu’est-ce que j’ai acheté un seul livre? Le code imprimera « 1 livres », et ce n’est pas correct. Donc, pour gérer le pluriel, il existe une autre fonction appelée _n(). Voici comment l’utiliser :
printf( _n( 'i bought %d book.', 'i bought %d books.', $books_count ), $books_count );
Étape 6 – Contextes
Parfois, un mot peut avoir différentes significations en raison de son contexte. Vous pouvez alors utiliser ces fonctions _x() et _ex(). Le second fait écho à la chaîne tandis que le premier ne stocke que son contenu. Ces fonctions ont un deuxième argument pour expliquer son contexte. Par exemple, si un mot est utilisé deux fois dans une page mais a des significations différentes dans le contenu et dans la barre latérale, alors votre code ressemblera à quelque chose comme ceci :
/*
APPARENT (obvious vs. not clear) — It was apparent to all, Joe was the apparent loser.
Two different contexts for the word "apparent"
*/
// In the content
echo _x( 'apparent', 'in_content', 'my-plugin-domain' );
// In the sidebar
echo _x( 'apparent', 'in_sidebar', 'my-plugin-domain' );
Étape 7 – Internationalisation Javascript
Et enfin, lorsque vous avez une chaîne à traduire dans un fichier javascript, vous pouvez utiliser une méthode définie dans le codex en utilisant wp_localize_script().
// In your PHP file:
wp_enqueue_script( 'script-handle', … );
wp_localize_script( 'script-handle', 'objectL10n', array(
'speed' => $distance / $time,
'submit' => __( 'Submit', 'my-plugin-domain' ),
) );
// in the javascript file:
$('#submit').val(objectL10n.submit);
$('#speed').val('{speed} km/h'.replace('{speed}', objectL10n.speed));
Remplacez simplement vos propres variables et le tour est joué !