Depuis 2009, xili-language suivi deux ans après de Polylang sont deux extensions qui utilisent une taxinomie nommée “language”. Cela est possible depuis WP 2.3 – voir fichier taxonomy.php
Le principal avantage de cette approche ‘taxonomy
‘ est que l’on ne détruit pas les enregistrements (post) originaux. (En effet, d’autres extensions modifient les champs ‘post_content’ et ajoutent des tables…)
Comme celles de base les catégories (category) et les mots-clés/étiquettes (post_tag), chaque élément (term) de la taxinomie est décrit par son nom, son raccourci (slug) et sa description. Les autres champs sont des éléments techniques (term_id, taxonomy_id,…)
Exemple de la catégorie “Recent News”
– Name : Recent News
– Slug : recent-news
– Description : the most recent news to be published
Dans xili-language et la taxinomie “language”, une langue est définie ainsi :
– Name : fr_FR (iso)
– Slug : fr_fr
– Description : French
et
dans Polylang, le choix est différent :
– Name : French
– Slug : fr (raccourci)
– Description : plusieurs données sérialisées d’un tableau (array) dont le nom iso (locale => fr_FR) utilisé par WP pour dénommer les fichiers de traduction.
Le point clé (pivot) est dans les deux cas, ce code iso qui décrit la langue et le pays de son utilisation : fr_CA est utilisé au Canada si l’on veut être précis.
L’utilisation de données sérialisées dans la champ description est une originalité de Polylang que l’on ne retrouve pas dans WP. De tels champs ne permettent pas de requête SQL.
Comme le montre le fichier locale.php de JetPack (utilisé par xili-language), la gestion des langues est très complexe et utilisent plusieurs codages. On peut y trouver d’autres éléments invariants comme le nom dans la langue citée (français) et son sens (ltr). En fait, il y a très peu de langues dites rtl.
Moyennant quelques centaines de lignes, xili-language (2.21+) peut récupérer les éléments multilingues d’une précédente installation pilotée par Polylang.
xili-dictionary est lui compatible avec Polylang (grâce à des filtres et une abstraction du modèle de taxinomie), pour, par exemple, traduire des fichiers de langue pour un thème ou une extension avec génération de fichiers pot, po, mo) mais aussi récupérer les chaînes.