Aller au contenu principal
Version: v1

Traductions

Traduire dans une vues

Pour traduire dans une vue, vous pouvez utiliser le filtre et la fonction trans avec en premier paramètre la clé de la traduction et en second paramètres les variables qui peuvent être donner Exemple sous forme de fonction :

{{ trans('example.trad', {"%link%": path('example.get')})}}

Exemple sous forme de filtre :

{{ 'example.trad'| trans({"%link%": path('example.get')}) }}

Rendre les entité traduisible

L'interface App\Translation\TranslatableInterface définit les méthodes nécessaires pour gérer les traductions d'une entité dans l'application CLIENTXCMS. Les classes implémentant cette interface sont responsables de fournir les clés de traduction et de gérer l'hydratation des données traduisibles.

Méthodes

getTranslatableKeys(): array

Cette méthode retourne un tableau associatif des clés traduisibles pour l'entité. Chaque clé est associée à un tableau contenant les informations nécessaires pour gérer la traduction de cette clé.

Exemple:


public function getTranslatableKeys(): array
{
return [
'product_name_1'=> ['mode' => 'input', 'key' => 'name'],
// Ajoutez d'autres clés traduisibles ici...
];
}

Modes disponibles :

  • "editor" App\Translation\TranslationMode::EDITOR : Editeur de contenu
  • "input"App\Translation\TranslationMode::INPUT : Input traditionnel
  • "textarea" App\Translation\TranslationMode::TEXTAREA : Textarea

hydateTranslation(array $data)

Cette méthode permet d'hydrater les données traduisibles à partir des données fournies. Elle prend en paramètre un tableau contenant les données traduisibles et les applique à l'entité.

Utilisation du trait TranslationTrait

Le trait TranslationTrait permet d'ajouter facilement la gestion des traductions à une classe en utilisant les méthodes définies dans l'interface TranslatableInterface.

Exemple:

namespace App\Example\Entity
use App\Translation\TranslatableInterface;
use App\Translation\TranslationTrait;

class Product implements TranslatableInterface
{
use TranslationTrait;
private string $name;
private int $id;

public function getId(): int {
return $this->id;
}


public function setId(int $id) {
$this->id = $id;
return $this;
}

public function getName(): string {
return $this->name;
}


public function setName($name) {
$this->name = $name;

return $this;
}
// ... autres propriétés et méthodes de la classe ...

public function getTranslatableKeys(): array
{
return [
'product_name_'. $this->id => ['mode' => 'input', 'key' => 'name'],
// Ajoutez d'autres clés traduisibles ici...
];
}

public function hydateTranslation(array $data)
{
// $params['name'] = "la valeur traduit selon la langue de l'utilisateur courrant"
// on utilise les setter pour définis les données
$this->autohydrate(['name' => 'setName'], $data);
}
}

Avec l'utilisation du trait TranslationTrait, la classe Product implémente automatiquement les méthodes de l'interface TranslatableInterface. Il suffit de définir les clés traduisibles dans la méthode getTranslatableKeys() et d'implémenter la logique de l'hydratation dans la méthode hydateTranslation(). Le trait TranslationTrait s'occupe du reste et facilite la gestion des traductions pour l'entité.

Traduire dans une action

<?php

namespace App\Example\Actions;

use ClientX\Actions\Action;
use ClientX\Translator\Translater;
use Psr\Http\Message\ServerRequestInterface;

class ExampleAction extends Action {


public function __construct(Translater $trans, ....){

$this->trans = $trans;

....

}



public function __invoke(ServerRequestInterface $request) {

$this->translater->trans('key');
// Avec les helpers de la classe Action
// $this->trans('key');

}

}

Fichiers de traductions

Vous pouvez ajouter des fichiers de traductions dans le dossier /Lang de CLIENTXCMS, ils doivent au format tableau de PHP. Sachez que CLIENTXMCS utilise derrière le composants de symfony de traduction


<?php
// Lang/fr_FR/example.php
return [

'example' => [
'title' => 'Exemple',
'subtitle' => 'Un sous titre',
]

];