Modifier n'importe quelle traduction depuis un plugin

Modifier n'importe quelle traduction depuis un plugin

OctoberCMS permettais autrefois de ré-écrire très simplement les règles de traduction du CMS, en créant un fichier /lang à la racine du projet. Mais comment aujourd'hui ces modifications depuis un plugin, afin de ne pas avoir à procéder à ces changement manuellement à l'instalation du site?

Par chance il existe un évènement très utile qui permet de modifier le résultat de la traduction avant qu'il ne soit retourné à l'aplication translator.beforeResolve.

En vous inscrivant à cet évènement depuis la fonction boot() de votre plugin, il vous est possible de modifier absolument n'importe quel terme du cms ou d'un autre plugin, à la seule condition que ce terme soit retourné depuis un fichier lang:

use Event;
use Lang;

public function boot()
{
    Event::listen('translator.beforeResolve', function ($key, $replace, $locale) {
        $plugin = 'auteur.plugin'; // Remplacer par le chemin de votre plugin en respectant ce format

        // Vérifier si la traduction ne proviens pas déjà de votre plugin
        if (substr($key, 0, strlen($plugin)) != $plugin) {

            // Construire le chemin éventuel de votre traduction
            $path = $plugin . '::lang.' . str_replace('::', '.', $key);

            // Rechercher une correspondance
            $result = Lang::get($path);

            // Si elle est trouvée, la retourner.
            if ($result != $path) {
                return $result;
            }
        }
    });
}

Vous pouvez désormais modifier n'importe quelle traduction passant par le traducteur intégrer à OctoberCMS à partir d'un fichier lang intégrer dans votre plugin:

<?php return [
    'rainlab' => [
        'blog' => [
            'lang' => [
                'plugin' => [
                    'name' => 'Mon Blog', // rainlab.blog::lang.plugin.name retourne désormais 'My Blogs'
                ],
            ],
        ],
    ],

    'backend' => [
        'lang' => [
            'user' => [
                'menu_label' => 'Utilisateurs', // backend::lang.user.menu_label retourne désormais 'Utilisateurs'
            ],
        ],
    ],
];

Astuce initialement publié par Dan Harrin sur OctoberTricks

26 juillet 2020

Poster un commentaire

Marc Jauvin, le 2020-08-03 14:34:22 a écrit:

Y'a quelque chose de bizarre dans la 2e phrase:

"Mais comment aujourd'hui ces modifications depuis un plugin, afin de ne pas avoir à procéder à ces changement manuellement à l'instalation du site?"

Ce site utilise des cookies

Ils permettent de vous fournir la meilleur expérience visiteur possible.

En poursuivant la navigation sur ce site, vous acceptez l'utilisation de ces cookies.