xili-language version 2.11.1 disponible

La dernière version (2.11.1) de xili-language est dispo ce lundi soir.

Mise à jour 2.11.1

Cette version contient les premières adaptations pour WP 3.9-beta1, notamment les nouveaux JS pour trouver des posts lors de l’établissement des liens entre traductions.
Si le mode permalien intégrant la langue courante en préfixe est actif, on dispose maintenant la sous-sélection par date, post_format (une taxinomie spéciale).
Le code vieux de plus de 5 ans continue d’être nettoyé 😉

Quelques nouveautés pour les développeurs de thème :

Une nouvelle fonction conditionnelle – is_xili_curlang():
/**
* Test the current language of displayed page.
*
* @since 2.11
* use for other function elsewhere
* @param "" for undefined, slug of tested language alone or an array list
* @return true or false
*/
function is_xili_curlang( $lang = false ) {

Cett fonction est aussi utilisable dans l’extension xili-postinpost widget.

La plus ancienne fonction de xili-language – the_curlang() – est enrichie et en sus du code (slug), elle est capable de retourner d’autres qualités de la langue courante affichée. Très utile pour choisir des éléments à afficher selon la langue courante (div, img,…). La langue courante est connue juste avant l’affichage du header.
/**
* Return the current language of theme.
*
* @since 0.9.7
* @updated 2.11.0
* use by other function elsewhere
* @param slug, iso, full name, alias, charset, hidden, count
*
* @return by default the slug of language (used in query).
*/
function the_curlang( $by = 'slug' ) { // soon obsolete
return xili_curlang( $by );
}
function xili_curlang( $by = 'slug' ) {

Quasi toute la liste des langues disponibles pour choisir les langages du site multilingues :

Pour éviter les redondances et assurer une maintenance aisée, xili-language utilise maintenant la classe GP_locale fournie par JetPack. Cela permet d’avoir la liste de plus de 150 langues avec de multiples propriétés comme le code ISO, le nom en anglais et le nom dans la langue originelle (avec les caractères etc..) et plus…
Si dans le pop-up menu ou dans la liste, le nom natif de quelque uns est suivi d’une *, cela indique que le code WP n’est pas suivi par WP (pas de wp_locale).

Autres améliorations

Les pointeurs de nouveautés ont été nettoyés (plus d’offset qui ont été supprimés dans le js).
La mise à jour des règles de permaliens (wp_rewrite) se fait à chaque modification de la liste des langues.

L’extension JetPack pas très “classe” avec la classe Featured_Content du thème TwentyFourteen

L’extension JetPack a un comportement inattendu avec la classe Featured_content du thème TwentyFourteen et des thèmes enfant.

Retour d’expérience

Dans le thème TwentyFourteen, il y a dans le sous-dossier inc le fichier featured-content.php qui contient la classe Featured_Content. Il est possible de la copier et modifier dans un thème enfant (ce qui se passe avec TwentyFourteen-xili pour intégrer la sélection – et le cache associé – selon la langue). Les articles (et images) en une correspondent donc au langage. Comme les fonctions du fichier functions.php du thème enfant sont actives avant celles du thème parent : pas de souci, la classe modifiée dans le thème enfant a priorité !

Tout fonctionne correctement jusqu’à ce que soit installée la récente version de JetPack qui, après de longues recherches pour localiser la cause, intègre maintenant la fameuse classe (semble-t-il utile à d’autres thèmes par exemple). Comment donc ne pas charger cette classe fournie par JetPack et garder celle du thème enfant ? Pas d’option prévue dans les réglages de JetPack qui en prévoit de nombreuses pour les modules proposés.
Dans le code idem (theme-tools.php – extrait ci-dessous) : pas de filtre spécifique à l’endroit où JetPack charge la classe.

// Featured Content has an internal check for theme support in the constructor.
// This could already be defined by Twenty Fourteen if it's loaded first.
// Be sure to not load this on the plugin page in case another plugin is activating
// with the same class name in an attempt to override Jetpack's Featured_Content
if ( ! class_exists( 'Featured_Content' ) && 'plugins.php' !== $GLOBALS['pagenow'] ) { 
    require_once( JETPACK__PLUGIN_DIR . 'modules/theme-tools/featured-content.php' );
}

Donc seule solution, créer une extension pour agir avant que JetPack activé via un filtre “init” lancent ses modules (plugins_loaded – priority 100).

En effet, on ne peut pas ajouter des filtres “plugins_loaded” dans functions.php d’un thème, c’est trop tard sur la ligne des temps de wp_settings.
L’objet du filtre est, en priorité inférieure à 100, d’installer la classe Featured_Content du thème courant. Ainsi, les tentatives suivantes seront repoussées car la classe choisie existe.

function xili_jetpack_disable_featured () {

    if ( ! class_exists( 'Featured_Content' ) && 'plugins.php' !== $GLOBALS['pagenow'] ) {
        if ( file_exists( get_stylesheet_directory() . '/inc/featured-content.php' ) ) {
            require get_stylesheet_directory() . '/inc/featured-content.php'; // this one will disable others
        }
    }
}

if ( class_exists ( 'jetpack' ) ) { // inited by init filter but without modules (priority 100 in jetpack)
    
    add_action( 'plugins_loaded', 'xili_jetpack_disable_featured', 17 ); // after XL and XTT

}

Cette partie de code est utilisable dans un plugin très simple à créer, mais, pour l’environnement multilingue, elle est insérée enrichie dans l’extension xili-language (v 2.11.1+) et il est donc possible d’avoir le thème comme ici et des fonctions JetPack comme ici.

M.

xili-dictionary version 2.6 disponible

L’extension WP xili-dictionary est mise à jour (2.6) et incorpore maintenant les possibilités de gérer les fichiers langues des extensions.
Il est donc possible d’importer dans le dictionnaire un fichier po d’une extension et d’en adapter la traduction. Grâce à la taxinomie ‘Origine’, un msgid et les traductions msgstr sont affectés à l’extension en cause et facilite ainsi la création, et la mise à jour du fichier po au bon endroit dans le dossier langage de celle-ci. La taxinomie ‘Origine’ contient le nom unique (Name ou sous-url) de l’extension avec dossier et fichier php principal.

xili-dictionary analyse les entêtes des extensions et notamment des champs ‘Text Domain’ et ‘Domain Path’. Si l’auteur de l’extension les a omis, xili-dictionary va chercher ces informations par l’analyse des fichiers langages s’il existe.

Comme cela est possible depuis la version précédente (2.5) pour les thèmes, il n’est pas encore possible de récupérer les fichiers mo po sur votre ordinateur sans passer par la voie FTP.