web-dev-qa-db-fra.com

Fichiers de langue dans un plugin

J'écris un plugin qui a besoin de chaînes traduisibles au moment de l'exécution, mais je ne parviens pas à récupérer mon fichier de langue.

J'ai le suivant:

  • /language/en-GB/en-GB.plg_system_myplugin.sys.ini
    Ceci contient les traductions de la page de configuration du plugin. Cela fonctionne bien.

  • /language/en-GB/en-GB.plg_system_myplugin.ini
    Ceci contient les traductions que le plugin utilisera au moment de l'exécution. Ceci ne fonctionne pas.

  • Et les deux références mentionnées ci-dessus dans le fichier XML du plugin:

    <languages>
        <language tag="en-GB">language/en-GB/en-GB.plg_system_myplugin.sys.ini</language>
        <language tag="en-GB">language/en-GB/en-GB.plg_system_myplugin.ini</language>
    </languages>
    

Comme indiqué ci-dessus, le fichier .sys.ini fonctionne parfaitement; ma page de configuration des plugins apparaît avec toutes les étiquettes, etc. chargées correctement.

Toutefois, le fichier .ini ne fonctionne pas. D'après ce que je peux en dire, si l'on regarde la console Joomla Debug, le fichier de traduction .ini n'est pas chargé du tout, même lorsque le plug-in est utilisé.

Je ne vois pas ce que je fais mal ici. Un code similaire dans les modules et les composants fonctionne très bien, mais je ne peux pas le faire fonctionner dans un plugin.

Quelqu'un peut-il me dire comment faire en sorte qu'un fichier de langue fonctionne dans un plugin, ou me dire ce que je manque.

Merci.

2
Simba

Depuis Joomla 3.1, il n'est plus nécessaire de développer le constructeur, comme la réponse de farahmand. Vous pouvez facilement écrire/définir le $ autoloadLanguage comme

 class myPlugin extends JPlugin
 {
    /**
    * Load the language file on instantiation.
    *
    * @var    boolean
    * @since  3.1
    */
    protected $autoloadLanguage = true;

    ...
3
Tom Kuschel

Chargez les fichiers de langue dans le constructeur du plugin comme suit:

function __construct(&$subject, $config) {
    $lang = JFactory::getLanguage();
    $lang->load('plg_system_myplugin', dirname(__FILE__));

    parent::__construct($subject, $config);
}
2
Farahmand

Je suppose que vous avez fait ce qui suit, mais juste pour être sûr:

Le problème peut être dans votre fichier de langue ou dans votre script. Pour le déterminer, vous pouvez essayer de remplacer une constante dans votre fichier de langue. Allez dans Extensions -> Langues -> Remplacements et cliquez sur le bouton vert Nouveau. Recherchez une valeur qui devrait figurer dans le fichier de langue. Si vous n'obtenez pas de résultat, c'est dans votre dossier. Si vous obtenez un résultat, c'est dans votre script.

2
YolkNet