Parlons de votre projet
Partitech Sonata Extra Bundle

Sonata Extra Bundle : API de traduction

Sonata Extra Bundle expose une API de traduction qui délègue le traitement à un fournisseur configurable. L’application peut ainsi traduire un texte vers plusieurs langues tout en conservant le choix du fournisseur au niveau de la configuration. Comprendre...

Contrôles de compatibilité Symfony et Sonata

Sonata Extra Bundle expose une API de traduction qui délègue le traitement à un fournisseur configurable. L’application peut ainsi traduire un texte vers plusieurs langues tout en conservant le choix du fournisseur au niveau de la configuration.

Comprendre l'API de traduction

L'API de traduction est une fonctionnalité qui exploite les services de traduction alimentés par l'IA pour fournir une traduction automatique de texte. En intégrant différents fournisseurs de traduction, les utilisateurs peuvent traduire du texte en plusieurs langues sans intervention manuelle.

Configuration

Voici un aperçu de la configuration par défaut de la fonctionnalité API de traduction dans le Sonata Extra Bundle :

partitech_sonata_extra:
   smart_service:
    translate_on_create_page: true
    translate_on_create_translation: true
    seo_proposal_on_article: true
    default_provider: open_ai
    translation_provider: open_ai
    seo_provider: open_ai
    providers:
      open_ai:
        class: Partitech\SonataExtra\Translation\Provider\OpenAiProvider
        api_key: '%open_ai_api_key%'
        model: '%open_ai_api_model%'
        max_token_per_request: 200

Explication des paramètres de configuration :

  • translate_on_create_page : Lorsqu'il est activé, permet la traduction sur la page de création.

  • translate_on_create_translation : Lorsqu'il est défini sur true, active la traduction lors de la création de la traduction (tous les administrateurs utilisateurs avec le trait de traduction).

  • seo_proposal_on_article : Lorsqu'il est défini sur true, active la proposition SEO (tous les utilisateurs administrateurs avec le trait de traduction).

  • default_provider : Spécifie le fournisseur de traduction par défaut à utiliser. Mettez à null si vous ne souhaitez pas utiliser l'API de traduction.

  • fournisseurs : Une liste de fournisseurs de traduction. Chaque fournisseur a son propre ensemble de configurations.

  • translation_provider : Définir la traduction sur un fournisseur spécifique

  • seo_provider : Définir le SEO sur un fournisseur spécifique

Stockez la clé et le nom du modèle dans les variables d’environnement. Évitez de placer une clé secrète directement dans le fichier YAML versionné.

partitech_sonata_extra:
   smart_service:

    providers:
      open_ai:
        api_key: '%open_ai_api_key%'
        model: '%open_ai_api_model%'

OPEN_AI_API_KEY="[API_KEY]"
OPEN_AI_API_MODEL="[MODEL_NAME]"

Configurer le fournisseur OpenAI

Le fournisseur configuré par défaut est OpenAI. Ses principaux paramètres sont les suivants :

  • class : classe qui implémente le fournisseur.
  • api_key : clé d’API, à injecter depuis une variable d’environnement.
  • model : modèle utilisé pour la traduction ; vérifiez sa disponibilité dans la documentation du fournisseur.
  • max_token_per_request : volume maximal envoyé par requête.

Ajouter un fournisseur

L’ajout d’un fournisseur repose sur deux étapes principales :

  1. Créer une classe de fournisseur :
    • Créez une classe qui implémente TranslationProviderInterface.
    • Implémentez la méthode translate() avec le fournisseur choisi.
namespace App\Translation\Provider;

class YourProvider implements TranslationProviderInterface
{
    private $config;
    public function setConfig($config)
    {
        // Your provider's configuration is automatically passed here 
         $this->config=$config;
    }
    
    public function translate(string $text, string $targetLanguage): string
    {
        // Translation logic here
        return $translated_string;
    }

    public function translateArray(array $arrayOfText, string $targetLanguage): array
    {
        // Translation logic here
        
        $translated_array[$key] = [
            'original' => 'original text',
            'translated' => 'translated text',
         ];
        return $translated_array;
    }
}

Alors vous pouvez appeler le traducteur n'importe où

<?php
namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Service\Attribute\Required;

use Partitech\SonataExtra\SmartService\SmartServiceProviderFactoryInterface;


class TranslationController extends AbstractController
{

    private SmartServiceProviderFactoryInterface $smartServiceProviderFactory;

    #[Required]
    public function autowireDependencies(
        SmartServiceProviderFactoryInterface $smartServiceProviderFactory
    ):void{
        $this->smartServiceProviderFactory = $smartServiceProviderFactory;
    }


    /**
     * @Route("test/translate", name="translate")
     */
    public function translate(Request $request): Response
    {
         /* you can force the provider */
        $translationProvider = $this->smartServiceProviderFactory->create('open_ai');
         /* or you can use the default one */
        $translationProvider = $this->smartServiceProviderFactory->create();
        
        $text = 'Il fera beau demain';
        $targetLanguage = 'de'; 
        /*
           You can use any locals that the api can understand, depending on the service.
           fr
           fr_FR
        */
        

        $translatedText = $translationProvider->translate($text, $targetLanguage);


        return $this->render('translation/translate.html.twig', [
            'original_text' => $text,
            'translated_text' => $translatedText,
        ]);
    }
}
  1. Mettre à jour la configuration :
    • Ajoutez votre nouveau fournisseur à la section des fournisseurs dans la configuration.
partitech_sonata_extra:
   smart_service:
    providers:
      your_provider:
        class: App\SmartService\Provider\YourProvider
        # Other provider-specific configuration here

En suivant ces étapes, vous pouvez ajouter et configurer de nouveaux fournisseurs de traduction afin d'étendre les capacités de la fonctionnalité Translation API dans le Sonata Extra Bundle.

Contrôles de compatibilité Symfony et Sonata

Adapter l’exemple à la version installée

Les exemples Symfony et Sonata restent attachés aux versions indiquées dans l’article. Symfony 4.x et Symfony 6.2 ne sont plus maintenus : pour un projet actuel, utilisez une branche maintenue et la documentation correspondant exactement à vos dépendances.

php bin/console about
composer show symfony/framework-bundle sonata-project/admin-bundle

Avant de reprendre le code, contrôlez les signatures, les services, les routes et les templates concernés. Ajoutez ensuite un test fonctionnel couvrant les autorisations, le code HTTP et le résultat visible.

Référence : versions Symfony maintenues.

Partager cet article