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

9

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

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

En fait, ce n'est pas un nouveau problème et oui, ils ont raison. C'est un gros problème si vous utilisez des plugins wordpress avec une langue non anglaise.

Fondamentalement, j'ai traduit bbpress et créé des fichiers .po et .mo. Les fichiers fonctionnent si je les place dans leur dossier normal wp-content / plugins / bbpress / bbp-languages. Mais comme indiqué ci-dessus, l'avertissement supprimera 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? Je veux simplement conserver les fichiers de langue du plugin dans wp-content / languages ​​/

Ünsal Korkmaz
la source
bien .. après avoir vérifié les codes bbpress .. il semble que je doive mettre des fichiers dans / wp-content / languages ​​/ bbpress / pas directement / wp-content / languages ​​/ Maintenant ça marche pour bbpress mais la question est toujours besoin d'obtenir une réponse pour d'autres plugins imo
Ünsal Korkmaz

Réponses:

3

Vous devez remplacer l'appel au fichier de langue de BBpress.

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

BBPress n'utilise pas la fonction load_plugin_textdomain, il utilise à la load_textdomainplace. 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 );
fuxia
la source
semble qu'il y ait un bogue .. bbpress.trac.wordpress.org/ticket/1647 le recherche .. j'utiliserai le dossier de langue par défaut wp-content / languages ​​/ alors quelle est votre suggestion pour 'FULL_PATH_TO_YOUR_FILE'?
Ünsal Korkmaz
Le chemin vers votre répertoire de langue ( WP_LANG_DIR) plus votre fichier mo.
fuxia
1
Bonne réponse. Remarque pour les développeurs de plugins: faites vos load_plugin_textdomain()appels pendant l'action "init", sinon nous ne pouvons pas nous connecter au filtre "load_textdomain_mofile". Il sera déjà trop tard alors.
Geert
2

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 avoir de solution globale, vous pouvez ajouter le code à votre functions.php dans votre thème.

L'idée est de demander à wordpress où trouver les traductions. En interne dans tous les plugins, cela se fait en utilisant 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 que vous souhaitez modifier leur dossier de langues comme suit.

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

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

Votre méthode, qui indique les domaines de texte pour tous les plugins, doit s'exécuter dans la initphase 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)

Odys
la source
0

Pour que cela fonctionne, vous devez déjà avoir les fichiers de traduction WordPress dans le WP_LANG_DIR et définir les paramètres régionaux globaux sur cette langue. Si vous incluez uniquement des traductions pour bbPress sans modifier les paramètres régionaux ou avoir les fichiers de traduction de base de WordPress présents, rien ne se traduira malgré le chargement.

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.

Bien qu'il soit vrai que bbPress 2.0 utilise la fonction load_textdomain (), load_plugin_textdomain () n'est de toute façon qu'un wrapper pour load_textdomain (). La méthode bbPress 2.0 est plus robuste et permet le placement global des fichiers de traduction, vous ne les perdez donc pas lors de la mise à jour du plugin.

John James Jacoby
la source
-1

Dans mon cas, la création d'une traduction personnalisée permanente pour le plugin nécessite les étapes suivantes (exemples de traduction de plugin ACF):

  1. créer un wp-content/languages/plugins/répertoire
  2. copier le fichier .pode traduction sélectionné depuis le lang/dossier du plugin (ou tout autre avec traductions) vers créé wp-content/languages/plugins/(par exemple de lang/acf-pl_PL.poà wp-content/languages/plugins/acf-pl_PL.po)
  3. personnaliser la traduction avec par exemple Poedit ou tout autre programme pour éditer des .pofichiers, puis générer .moet enregistrer wp-content/languages/plugins/(par exemple wp-content/languages/plugins/acf-pl_PL.mo)

De cette façon, la traduction doit être conservée même après la mise à jour du plugin.

Je ne sais pas si cette stratégie fonctionnera pour tous les plugins mais cela vaut vraiment la peine d'essayer.

jmarceli
la source