Parliamo del progetto
Partitech Sonata Extra Bundle

Sonata Extra Bundle: API di traduzione

Sonata Extra Bundle espone un'API di traduzione che delega l'elaborazione a un fornitore configurabile. L'applicazione può così tradurre un testo in diverse lingue mantenendo la scelta del fornitore a livello di configurazione. Comprendere l'API di traduzi...

Contrôles de compatibilité Symfony et Sonata

Sonata Extra Bundle espone un'API di traduzione che delega l'elaborazione a un fornitore configurabile. L'applicazione può così tradurre un testo in diverse lingue mantenendo la scelta del fornitore a livello di configurazione.

Comprendere l'API di traduzione

L'API di traduzione è una funzionalità che sfrutta i servizi di traduzione alimentati dall'IA per fornire una traduzione automatica del testo. Integrando diversi fornitori di traduzione, gli utenti possono tradurre il testo in più lingue senza intervento manuale.

Configurazione

Ecco una panoramica della configurazione predefinita della funzionalità API di traduzione nel 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

Spiegazione dei parametri di configurazione:

  • translate_on_create_page : Quando è attivato, consente la traduzione sulla pagina di creazione.

  • translate_on_create_translation : Quando è impostato su true, attiva la traduzione al momento della creazione della traduzione (tutti gli amministratori utenti con il tratto di traduzione).

  • seo_proposal_on_article : Quando è impostato su true, attiva la proposta SEO (tutti gli utenti amministratori con il tratto di traduzione).

  • default_provider : Specifica il fornitore di traduzione predefinito da utilizzare. Impostalo su null se non vuoi utilizzare l'API di traduzione.

  • fornitori: Un elenco di fornitori di traduzione. Ogni fornitore ha il proprio insieme di configurazioni.

  • translation_provider : Impostare la traduzione su un fornitore specifico

  • seo_provider : Impostare la SEO su un fornitore specifico

Memorizzate la chiave e il nome del modello nelle variabili d'ambiente. Evitate di mettere una chiave segreta direttamente nel file YAML versionato.

partitech_sonata_extra:
   smart_service:

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

OPEN_AI_API_KEY="[CHIAVE_API]"
OPEN_AI_API_MODEL="[NOME_MODULO]"

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;
    }
}

Allora puoi chiamare il traduttore ovunque

<?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. Aggiornare la configurazione :
    • Aggiungi il tuo nuovo fornitore alla sezione dei fornitori nella configurazione.
partitech_sonata_extra:
   smart_service:
    providers:
      your_provider:
        class: App\SmartService\Provider\YourProvider
        # Other provider-specific configuration here

Seguendo questi passaggi, puoi aggiungere e configurare nuovi fornitori di traduzione per estendere le capacità della funzionalità Translation API nel Sonata Extra Bundle.

Controlli di compatibilità Symfony e Sonata

Adattare l’esempio alla versione installata

Gli esempi Symfony e Sonata rimangono legati alle versioni indicate nell’articolo. Symfony 4.x e Symfony 6.2 non sono più supportati: per un progetto attuale, utilizzate un ramo mantenuto e la documentazione corrispondente esattamente alle vostre dipendenze.

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

Prima di riprendere il codice, controllate le firme, i servizi, le rotte e i template interessati. Aggiungete poi un test funzionale che copra le autorizzazioni, il codice HTTP e il risultato visibile.

Riferimento : versioni di Symfony supportate.

Condividi questo articolo