web-dev-qa-db-fra.com

Polylang: Comment traduire des chaînes personnalisées?

Mon problème : Je traduis mon site Web en utilisant Polylang mais j'ai du mal avec la traduction de chaînes personnalisées. Les chaînes n'apparaîtront pas dans le menu "Traduction des chaînes" du tableau de bord WP.

Important: Je ne sais pas grand-chose sur PHP donc la fonction pll_register_string est très déroutant pour moi.

Extrait du doc ​​Polylang:

https://polylang.wordpress.com/documentation/documentation-for-developers/functions-reference/

pll_register_string

Permet aux plugins d'ajouter leurs propres chaînes dans le panneau "traduction des chaînes". La fonction doit être appelée côté admin (le fichier functions.php est OK pour les thèmes). Il est possible d'enregistrer des chaînes vides (par exemple lorsqu'elles proviennent d'options) mais elles n'apparaîtront pas dans le tableau de liste.

Usage:

pll_register_string ($ nom, $ chaîne, $ groupe, $ multiligne); '$ name' => (obligatoire) nom fourni pour faciliter le tri (ex: 'myplugin') '$ string' => (obligatoire) la chaîne à traduire '$ group' => (facultatif) le groupe dans lequel la chaîne est enregistré, par défaut 'polylang' '$ multiline' => (facultatif) s'il est défini sur true, le champ de texte de traduction sera multiligne, par défaut sur false

pll __

traduit une chaîne précédemment enregistrée avec pll_register_string

pll __ ($ string); Le paramètre unique est requis:

‘$ String’ => la chaîne à traduire renvoie la chaîne traduite.

pll_e

Fait écho à une chaîne traduite précédemment enregistrée avec pll_register_string. Utilisation:

pll_e ($ chaîne); Le paramètre unique est requis:

'$ String' => la chaîne à traduire

Meilleures salutations

6
MIkeMo

Vous devez d'abord enregistrer toutes ces chaînes pour la traduction.

Par exemple, vous faites écho à "Hello world" dans un fichier modèle comme celui-ci:

<?php pll_e('Hello world'); ?>

Pour afficher la chaîne dans la "traduction des chaînes", ajoutez votre functions.php:

add_action('init', function() {
  pll_register_string('mytheme-hello', 'Hello world');
});

Ajoutez toutes les chaînes personnalisées que vous souhaitez traduire à cette fonction.

24
drazewski

Comme Polylang docs le dit, il est bon de vérifier d'abord l'existence des fonctions polylang - donc le site ne se cassera pas lors de la mise à jour du plugin Polylang - car il supprime d'abord les anciens fichiers.

Je propose donc cette approche: en functions.phppour le thème de dans le fichier de votre plugin, vous pouvez créer des wrappers pour les fonctions Polylang nécessaires avec des solutions de secours si polylang a été supprimé ou mis à jour afin que WP ne se bloque pas avec une erreur de fonction non définie.

/**
 * Outputs localized string if polylang exists or  output's not translated one as a fallback
 *
 * @param $string
 *
 * @return  void
 */
function pl_e( $string = '' ) {
    if ( function_exists( 'pll_e' ) ) {
        pll_e( $string );
    } else {
        echo $string;
    }
}

/**
 * Returns translated string if polylang exists or  output's not translated one as a fallback
 *
 * @param $string
 *
 * @return string
 */
function pl__( $string = '' ) {
    if ( function_exists( 'pll__' ) ) {
        return pll__( $string );
    }

    return $string;
}

// these function prefixes can be either you are comfortable with.

REMARQUE, nous avons créé des fonctions avec un seul l dans pl__ et pl_e et les fonctions Polylang d'origine sont pll__ et pll_e.

Ceux-ci seront utilisés dans votre thème pour générer ou renvoyer des chaînes traduites.

Et comme mentionné précédemment, nous devons enregistrer ces chaînes afin que Polylang sache qu'elles doivent être traduites.

Si vous travaillez avec un thème, il est probablement bon de les initialiser dans after_setup_theme crochet comme ceci:

function your_prefix_after_setup_theme() {

   // register our translatable strings - again first check if function exists.

    if ( function_exists( 'pll_register_string' ) ) {

        pll_register_string( 'ToggleNavigation', 'Toggle navigation', 'YourThemeName', false );

        pll_register_string( 'ToggleSearch', 'Toggle Search', 'YourThemeName', false );

        pll_register_string('404Message', 'It looks like nothing was found. Try getting back to the <a href="%s">home page</a>.', 'YourThemeName', true);

    }
}
 add_action( 'after_setup_theme', 'your_prefix_after_setup_theme' );
4
Mikhail.root