Objectif
La mise au point des fichiers de langue d’un plugin ou d’un squelette est souvent une activité fastidieuse que l’on repousse à la fin des développements (toute ressemblance avec la documentation est fortuite...).
Ceci est particulièrement vrai quand on opère des mises-à-jour lourdes sur un développement déjà multilingue.
LangOnet passe en revue tous les fichiers du site : tant les fichiers originaux de SPIP que ceux des plugins installés (activés ou non) ou les éventuels fichiers-squelettes de personnalisation.
Ce plugin aide ainsi à la mise au point des chaînes de langue en proposant :
- Une vérification de la bonne définition des items de langue (utilisés dans le code HTML ou PHP mais non définis dans les fichiers de langue) ;
- Une vérification de la bonne utilisation des items de langue (définis mais non utilisés dans le code) ;
- Une recherche des chaînes de langue utilisées avec la fonction _L() (items à traduire) ;
- Un affichage en clair d’un fichier de langue ;
- Une recherche des items de langue SPIP à partir de leur clef (raccourci) ou d’un extrait de leur valeur (traduction affichée) ;
- Une génération d’un fichier de langue « cible » qui complète, avec les items trouvés, un fichier de langue « source » (en UTF-8 ou ASCII et entité XML) ;
- Une génération d’un script Shell, dont l’exécution remplace dans les fichiers PHP et HTML les chaînes de langue (i.e. les premiers arguments de _L et les textes libres entre < : et :>) par des items de langue bien écrits et intuitifs, ajouté au fichier de langue mentionné ci-dessus (fonctionnalité apparue avec la version 0.7.0).
Installation
Comme tout plugin, il suffit de suivre les procédures manuelles ou automatiques standard : veuillez vous reporter à cette documentation : SPIP-1-9-Les-Plugins.
Pré-requis
A partir de la version 0.5.2, il est nécessaire d’activer le plugin Itérateurs pour être en mesure d’utiliser LangOnet. Pour les versions antérieures il fallait activer SPIP-Bonux 2.
Pertinence et limites
Les analyses effectuées par LangOnet sont basées sur des expressions rationnelles (RegExp) qui débusquent chaînes et items de langue dans des fichiers écrits en différents langages et sous des expressions parfois peu évidentes.
Dans sa version actuelle, LangOnet est capable de rechercher des items de langue dans les fichiers :
- de code PHP (exemple :
fonctions_plugin.php), - de squelette HTML (exemple :
ma_page.html), - de définition XML ou YAML( exemple :
plugin.xml).
Dans ces fichiers, LangOnet est capable de repérer des utilisations telles que :
-
<:item_de_langue5:> -
<:texte pour lequel Langonet fabriquera un index:> -
<:pluga:item_de_langue4:> -
<:module:item_de_langue3{arg1=texte, arg2=#BALISE}|filtre1{texte, #BALISE}:> -
_T('plugb:item_de_langue1', array('dest'=>$dest, 'bli' => 'blo')) -
_T('module:item_de_langue2_' . $truc.'n') -
_T('module:item_de_langue6_'.$truc['bla'].'aa') -
_T("item_de_langue7_" . $truc[$bla].'aa') -
_T("item_de_langue9' . is_string($val) ? '_'.$val : '') -
_T("module:$variable") -
_T("module:".$variable) -
_T('module:'.$variable) -
_U("item_de_langue8") -
_L("Ceci est une chaîne qu'il faut traduire") -
_L("Ceci est une $expression à traduire @urgence@", array('urgence' => 'bientôt'))
Comme on peut le voir, si le plus grand nombre des utilisations possibles est ainsi couvert. « Toutes » les écritures contenant des items de langue ne sont pas repérées aujourd’hui cependant, et LangOnet ne conduit pas toujours à une information certaine. Par exemple, dans le plugin Rainette, les situations météorologiques sont connues par un numéro de 0 à 47 ; le fichier de langue rainette_fr.php se présentant ainsi :
- 'meteo_0' => 'tornade',
- 'meteo_1' => 'tempête tropicale',
- 'meteo_10' => 'pluie verglaçante',
- 'meteo_11' => 'averses',
- 'meteo_12' => 'averses',
- 'meteo_13' => 'quelques flocons',
- 'meteo_14' => 'faibles averses de neige',
- 'meteo_15' => 'blizzard',
- ...
L’utilisation qui en est faite dans le code est la suivante :
- function rainette_resume_meteo($code_icon) {
- include_spip('inc/rainette_utils');
- return $resume;
- }
Ici, l’utilisation des items meteo_xx dans la fonction rainette_resume_meteo() ne permet pas à LangOnet de savoir avec certitude si toutes les valeurs de 0 à 47 sont bien utilisées. LangOnet ne fournira donc qu’un avertissement appelant l’auteur à procéder à une vérification manuelle...
Les principes de l’interface utilisateur
Tout se passe dans l’espace privé du site (sous-menu de Configuration ou Maintenance suivant que vous utilisiez Bandeau 2.1 ou pas. Vous pouvez aussi vous rendre directement à l’adresse ?exec=langonet_verifier).
La page affichée par défaut en cliquant sur l’entrée de menu « Vérifier les langues » est présentée ci-dessous. On y distingue les quatre onglets permettant d’accéder aux différentes fonctions du plugin.

La partie centrale affiche, d’une part, le « formulaire de paramétrage » de la fonction LangOnet en cours d’utilisation, et d’autre part, le « bloc des résultats ». Ces résultats utilisent un jeu de couleurs : vert, jaune ou rouge afin d’attirer l’attention de l’utilisateur sur le niveau d’erreur détecté.
La colonne de gauche présente les fichiers de log des vérifications ou la liste des fichiers de langue générés. Ces fichiers sont créés dans le répertoire tmp/langonet/. Il est possible de les télécharger sans passer par le FTP en cliquant simplement sur leur nom et pour les utilisateurs du plugin MediaBox, un « popup » de visualisation des fichiers s’ouvre d’un simple clic sur l’icone présente à droite du nom du fichier.
A partir de la version 0.7.0, ce répertoire contient également le script Shell dont l’exécution provoque la modification des fichiers PHP et HTML contenant les chaînes de langues. Actuellement il doit être récupéré par FTP et placé dans le répertoire des fichiers pour lesquels il a été produit. Lors d’une première exécution, on vérifiera que les substitutions sont acceptables : les limites exposées ci-dessus font que le découpage des chaines de langue trouvées n’est pas toujours optimal, et le nom des items qui les remplaceront pas toujours intuitif, particulièrement pour les chaînes de plus de 32 caractères. Quelques adaptations manuelles seront alors nécessaires.



Télécharger le plugin sur la Zone
Vos commentaires
# Le 15 avril 2011 à 00:19, par Perline
En réponse à : LangOnet
Présentation générale
Bonjour,
A priori bien pratique ce plugin ! Je ne l’ai pas encore regardé entièrement mais je suggère quelques changements dans la doc.
Il faudrait ajouter qu’il faut le plugin iterateurs et par ailleurs langonet est un sous-menu de configuration pas edition.
# Le 15 avril 2011 à 08:46, par _Eric_
En réponse à : LangOnet
Présentation générale
Salut,
Tu as raison Perline, je n’ai pas mis à jour les dernières modifications que j’ai effectuées.
J’y go, merci pour l’info.
Répondre à ce message
# Le 27 mars 2011 à 15:04, par Déesse A.
En réponse à : LangOnet
Présentation générale
Deux autres mises au propre que ce plugin devrait faire à mon avis :
- il ne devrait pas y avoir d’URL dans les fichiers de langues, cette information devrait être placé en argument de la fonction _T, de sorte que si cette URL doit être modifiée, on ait à le faire que dans le fichier utilisant la chaîne de langue en question. Pour les URL référençant la doc,
cela a été fait dans la version 13558, avec un script Sed ; il faudrait le faire systématiquement. Actuellement il y a plus de 100 URL dans les fichiers de langues qui ne devraient donc pas y être.
- il ne devrait pas y avoir non plus de balises HTML, car elles échappent à la stylisation des feuilles de styles. Là il y en a encore des milliers.
Répondre à ce message
# Le 6 janvier 2011 à 17:11, par ?
En réponse à : LangOnet
Présentation générale
Je ne comprends pas bien l’utilité du générateur de langue. Peut-on l’utiliser dans une traduction automatisée ? Ou permet-il uniquement de faire une copie du fichier langue avec quelques traductions ? je dois louper un truc
Répondre à ce message
# Le 21 août 2010 à 11:49, par SuperYMS
En réponse à : LangOnet
Présentation générale
j’aime bien le plugin, il est et sera utile à mon avis !
cependant je suis surpris par le nombre d’écriture possible (y en a pas mal que je ne connaissais pas !!), alors pourquoi ne pas aussi faire un travail d’uniformisation (un standard) d’écriture, au lieu d’en avoir 20, en avoir 4 ou 5 mais qui soient simples et claires !! (là je m’adresse aux développeurs du core SPIP).
@+
# Le 21 août 2010 à 12:09, par denisb
En réponse à : LangOnet
Présentation générale
toutes ces écritures possibles ne sont en rien concurentes mais bien complémentaires. tout dépend du résultat attendu dans l’utilisation de l’item de langue.
c’est là une des richesses du traitement des langues qu’offre SPIP.
Répondre à ce message