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.
Les menus créés avec le plugin RainLab.Pages ne sont pas traduisible. Afin d'outrepasser cette limitation, Marc Jauvin vous propose d'utiliser une technique très simple.
Lors de la création du menu, utiliser en tant que titre pour le lien du menu une chaîne de caractères identifiant une traduction, par exemple author.plugin::lang.menu.menuName
Ensuite lors de la génération du menu, utiliser le filtre | trans
sur le titre du lien précédemment passé:
<ul>
{% for item in items if not item.viewBag.isHidden %}
<li>{{ item.title | trans }}</li>
{% endfor %}
</ul>
Évidemment, il vous faut aussi créé les différents textes de traduction dans le dossier lang de votre plugin.
Astuce initialement publié par Marc Jauvin sur OctoberTricks
Bientôt disponible directement par le biais du plugin Rainlab.Translate...
Voici une autre méthode plus pratique:
Event::listen('backend.form.extendFieldsBefore', function ($widget) {
if ($widget->model instanceof \RainLab\Pages\Classes\MenuItem) {
$originalFields = $widget->fields;
$widget->fields = [];
foreach ($originalFields as $field => $definition) {
$widget->fields[$field] = $definition;
if ($field === 'type') {
$titleStr = trans('Title');
$defaultLocale = Locale::getDefault();
foreach (Locale::listAvailable() as $code => $locale) {
if ($code !== $defaultLocale->code) {
$fieldName = sprintf('viewBag[localeTitle.%s]', $code);
$widget->fields[$fieldName] = [
'label' => sprintf("%s [%s]", $titleStr, $locale),
];
}
}
}
}
}
});
Event::listen('pages.menu.referencesGenerated', function (&$items) {
$iterator = function ($menuItems) use (&$iterator) {
$result = [];
$locale = App::getLocale();
foreach ($menuItems as $item) {
if ($title = array_get($item->viewBag, "localeTitle.$locale")) {
$item->title = $title;
}
if ($item->items) {
$item->items = $iterator($item->items);
}
$result[] = $item;
}
return $result;
};
$items = $iterator($items);
});