Traduction

Même si ce n'est pas obligatoire, il est extrêmement recommandé d'utiliser le système de traduction. Même si vous ne parlez pas beaucoup de langues, essayez au moins de proposer votre plugin en français et en anglais, même si votre anglais est approximatif.

OverCms utilise un système de tags, par exemple USER = Utilisateur si la langue choisie est le français. Pour définir ces tags, vous devez créer un dossier lang dans votre plugin. Ensuite, vous devez faire un fichier pour chaque langue nommé par le code du langage ISO 639-1 (celui de 2 lettres). Dans ce fichier, mettez un tableau associatif avec les tags comme clefs et les traductions comme valeur.

Pour éviter que certains tags soit utilisés plusieurs fois, préfixez les tags par le nom du plugin en majuscule, suivant d'un point. Prenons l'exemple d'un plugin "Ultimate Blog":

fr.php
<?php
 
$lang = array(
    'ULTIMATE_BLOG.ARTICLE' => 'Article',
    'ULTIMATE_BLOG.ADD_ARTICLE' => 'Ajouter un article',
    'ULTIMATE_BLOG.REMOVE_ARTICLE' => 'Supprimer l\'article',
);
en.php
<?php
 
$lang = array(
    'ULTIMATE_BLOG.ARTICLE' => 'Article',
    'ULTIMATE_BLOG.ADD_ARTICLE' => 'Add an article',
    'ULTIMATE_BLOG.REMOVE_ARTICLE' => 'Remove article',
);

Votre dossier du plugin doit ressembler à ça:

Pour afficher une traduction dans le code HTML, il suffit de mettre {@ULTIMATE_BLOG.REMOVE_ARTICLE}.

Dans la configuration, mettez simplement ULTIMATE_BLOG.REMOVE_ARTICLE.

Vous pouvez aussi récupérer directement la traduction en PHP:

// Récupère une traduction, si la traduction n'est pas trouvé, renvoie le tag
$article = Translate::get('ULTIMATE_BLOG.REMOVE_ARTICLE');
 
// Récupère et échappe la traduction
$article = Translate::escape('ULTIMATE_BLOG.REMOVE_ARTICLE');
 
// Récupère, échappe la traduction, et si elle n'est pas trouvé renvoie "Article"
$article = Translate::escape('ULTIMATE_BLOG.REMOVE_ARTICLE', 'Article');

Il est vivement recommandé d'utiliser la méthode ::escape($tag), pour éviter tout problème.

Dans votre plugin, vous pouvez utiliser toutes les traductions d'OverCms, qui se trouvent dans app/lang/.

Les singuliers/pluriels ne sont pas gérés de la même manière pour toutes les langues. En français, 0 est singulier ("0 voiture"), en anglais c'est en pluriel ("0 cars"). Pour cela, il y a 2 fonctions définies en fonction de la langue, qui permettent de régler ce problème:

// is_plural($nombre) -> retourne true ou false
$plural = is_plural(2);
 
// plural($nombre, $singulier, $pluriel) -> retourne le singulier ou le pluriel en fonction du nombre
// Il ne traduit pas le tag, il renvoie juste $singulier ou $pluriel en fonction du nombre
$tag = plural(2, 'Car', 'Cars');
 
// Si la langue est le français:
$plural = is_plural(0); // -> false
$tag = plural(0, 'Car', 'Cars'); // -> "Car"
 
// Si la langue est l'anglais:
$plural = is_plural(0); // -> true
$tag = plural(0, 'Car', 'Cars'); // -> "Cars"

Ainsi, si le tag dépend d'un nombre, il suffit d'utiliser plural. Dans le cas d'un blog qui affiche "Lire les commentaire(s)", on peut imaginer ce code:

<div class="article">
    <h1>%TITLE%</h1>
    <a href="#">%READ_COMMENT%</a>
</div>
$html = str_replace('%READ_COMMENT%', plural($nbComments, '{@BLOG.READ_COMMENT}', '{@BLOG.READ_COMMENTS}'), $html);

Page suivante: Contenu