web-dev-qa-db-fra.com

Comment garder le plugin traduit après les mises à jour?

_ { http://wordpress.org/extend/plugins/bbpress/ Le dossier de langue de bbpress (wp-content/plugins/bbpress/bbp-languages) contient cet avertissement:

/**
 * Do not put custom translations here. They will be deleted on bbPress updates.
 *
 * Keep custom bbPress translations in /wp-content/languages/
 */

En réalité, ce n'est pas un problème nouveau et oui, ils ont raison. C'est un gros problème si vous utilisez des plugins wordpress avec une langue autre que l'anglais.

En gros, j'ai traduit bbpress et créé des fichiers .po et .mo. Les fichiers fonctionnent si je les mets dans leur dossier normal wp-content/plugins/bbpress/bbp-languages. Mais comme ci-dessus l'avertissement dit que va supprimer lors de la mise à jour. Mais le problème est que la traduction ne fonctionne pas si je les mets dans le dossier wp-content/languages ​​/ comme suggéré dans bbpress.

Je pense qu'il doit y avoir un crochet ou quelque chose que je peux activer mais quelle est la meilleure solution pour cela? Simplement je veux garder les fichiers de langue de plugin dans wp-content/languages ​​/

9
Ünsal Korkmaz

Vous devez remplacer l’appel vers le fichier de langue de BBpress.

Un bon endroit pour faire ceci est un fichier spécifique à une langue dans votre répertoire de langues général. Pour le turc, ce serait probablement un fichier nommé tr_TR.php. Celui-ci sera chargé automatiquement et seulement s'il correspond à la langue de votre blog. Il ne sera pas écrasé.

BBPress n'utilise pas la fonction load_plugin_textdomain, mais plutôt load_textdomain. Ici vous pouvez trouver un filtre:

$mofile = apply_filters( 'load_textdomain_mofile', $mofile, $domain );

Donc, dans votre fichier php de langue, ajoutez simplement un filtre pour changer le chemin:

function load_bbpress_tr_mofile( $mofile, $domain )
{
    if ( 'bbpress' == $domain )
    {
        // replace this. :)
        return 'FULL_PATH_TO_YOUR_FILE';
    }
    return $mofile;
}
add_filter( 'load_textdomain_mofile', 'load_bbpress_tr_mofile', 10, 2 );
3
fuxia

Ce que vous devez faire est de créer un plugin simple qui gérera le text_domain des plugins installés. Si vous ne voulez pas de solution globale, vous pouvez ajouter le code à votre functions.php dans votre thème.

L'idée est de dire à WordPress où trouver les traductions. En interne, dans tous les plugins, cela se fait à l'aide de quelque chose de similaire à

load_plugin_textdomain( 'regenerate-thumbnails', false, '/regenerate-thumbnails/localization' );

c'est la fonction que vous utiliserez. Comme vous pouvez le voir ici , le dernier argument est utilisé pour définir le relatif au chemin du plugin, où résident les fichiers de traduction.

Vous pouvez faire ce que vous voulez en mettant une ligne pour chaque plugin pour lequel vous souhaitez modifier le dossier de leur langue comme suit.

load_plugin_textdomain('bbpress', false, '../../languages/bbpress');

ceci demandera à wordpress de charger vos fichiers de traduction personnalisés à partir d'un dossier situé à côté du dossier plugins qui contient un dossier nommé bbpress qui contient les fichiers de traduction en utilisant le même nom EXACT que chaque plugin utilise.

Votre méthode, qui charge les textdomains de tous les plugins, devrait s’exécuter dans la phase init comme suit

function set_myplugins_languages() {
     .... your code here.....
}
add_action('init', 'set_myplugins_languages');

(N'oubliez pas de marquer ceci comme réponse si vous l'avez trouvé utile)

2
Odys

Pour que cela fonctionne, vous devez déjà disposer des fichiers de traduction WordPress dans WP_LANG_DIR et définir les paramètres régionaux dans cette langue. Si vous n'incluez que des traductions pour bbPress sans changer les paramètres régionaux ni disposer des fichiers de traduction principaux de WordPress, rien ne sera traduit, même si vous les avez chargées.

Si vous souhaitez remplacer les paramètres régionaux pour bbPress seul, vous devez ajouter un filtre à 'bbpress_locale' qui vous permet de remplacer le fichier bbPress mo.

Il est vrai que bbPress 2.0 utilise la fonction load_textdomain (), mais load_plugin_textdomain () n’est en tout cas qu’un wrapper pour load_textdomain (). La méthode bbPress 2.0 est plus robuste et permet un placement global des fichiers de traduction, afin de ne pas les perdre lors de la mise à jour du plug-in.

0
John James Jacoby