Sonata Extra Bundle expone una API de traducción que delega el procesamiento a un proveedor configurable. La aplicación puede así traducir un texto a varios idiomas mientras conserva la elección del proveedor a nivel de configuración.
Comprender la API de traducción
La API de traducción es una funcionalidad que aprovecha los servicios de traducción impulsados por IA para proporcionar una traducción automática de texto. Al integrar diferentes proveedores de traducción, los usuarios pueden traducir texto a varios idiomas sin intervención manual.
Configuración
Aquí hay una visión general de la configuración predeterminada de la función API de traducción en el 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
Explicación de los parámetros de configuración:
- translate_on_create_page : Cuando está activado, permite la traducción en la página de creación.
- default_provider : Especifica el proveedor de traducción predeterminado a utilizar. Ponlo en null si no deseas usar la API de traducción.
- proveedores: Una lista de proveedores de traducción. Cada proveedor tiene su propio conjunto de configuraciones.
Almacene la clave y el nombre del modelo en las variables de entorno. Evite colocar una clave secreta directamente en el archivo YAML versionado.
partitech_sonata_extra:
translation_api:
providers:
open_ai:
api_key: '%open_ai_api_key%'
model: '%open_ai_api_model%'
OPEN_AI_API_KEY="[API_KEY]"
OPEN_AI_API_MODEL="[NOMBRE_MODELO]"
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;
}
}
Entonces puedes llamar al traductor en cualquier lugar
<?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,
]);
}
}
- Actualizar la configuración :
- Agregue su nuevo proveedor en la sección de proveedores en la configuración.
partitech_sonata_extra:
translation_api:
providers:
your_provider:
class: App\Translation\Provider\YourProvider
# Other provider-specific configuration here
Siguiendo estos pasos, puede agregar y configurar nuevos proveedores de traducción para ampliar las capacidades de la función Translation API en el Sonata Extra Bundle.
Adaptar el ejemplo a la versión instalada
Los ejemplos de Symfony y Sonata permanecen ligados a las versiones indicadas en el artículo. Symfony 4.x y Symfony 6.2 ya no se mantienen: para un proyecto actual, utilice una rama mantenida y la documentación que corresponda exactamente a sus dependencias.
php bin/console about
composer show symfony/framework-bundle sonata-project/admin-bundle
Antes de retomar el código, controle las firmas, los servicios, las rutas y las plantillas correspondientes. Después, agregue una prueba funcional que cubra los permisos, el código HTTP y el resultado visible.
Referencia: versiones de Symfony mantenidas.