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:
translation_api:
translate_on_create_page: true
default_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.
- 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.
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:
translation_api:
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 :
- Créer une classe de fournisseur :
- Créez une classe qui implémente
TranslationProviderInterface. - Implémentez la méthode
translate()avec le fournisseur choisi.
- Créez une classe qui implémente
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\Translation\TranslationProviderFactoryInterface;
class TranslationController extends AbstractController
{
private TranslationProviderFactoryInterface $translationProviderFactory;
#[Required]
public function autowireDependencies(
TranslationProviderFactoryInterface $translationProviderFactory
):void{
$this->translationProviderFactory = $translationProviderFactory;
}
/**
* @Route("test/translate", name="translate")
*/
public function translate(Request $request): Response
{
/* you can force the provider */
$translationProvider = $this->translationProviderFactory->create('open_ai');
/* or you can use the default one */
$translationProvider = $this->translationProviderFactory->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,
]);
}
}
- Aggiornare la configurazione :
- Aggiungi il tuo nuovo fornitore alla sezione dei fornitori nella configurazione.
partitech_sonata_extra:
translation_api:
providers:
your_provider:
class: App\Translation\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.
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.