Sonata Extra Bundle cung cấp một API dịch thuật cho phép ủy quyền xử lý cho một nhà cung cấp có thể cấu hình. Ứng dụng do đó có thể dịch một văn bản sang nhiều ngôn ngữ trong khi vẫn giữ được lựa chọn nhà cung cấp ở cấp độ cấu hình.
Hiểu API dịch thuật
API dịch thuật là một tính năng sử dụng các dịch vụ dịch thuật được hỗ trợ bởi AI để cung cấp bản dịch tự động của văn bản. Bằng cách tích hợp các nhà cung cấp dịch thuật khác nhau, người dùng có thể dịch văn bản sang nhiều ngôn ngữ mà không cần can thiệp thủ công.
Cấu hình
Đây là tổng quan về cấu hình mặc định của tính năng API dịch trong 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
Giải thích các tham số cấu hình:
- translate_on_create_page : Khi được bật, cho phép dịch trên trang tạo.
- default_provider : Chỉ định nhà cung cấp dịch thuật mặc định để sử dụng. Đặt thành null nếu bạn không muốn sử dụng API dịch thuật.
- nhà cung cấp: Một danh sách các nhà cung cấp dịch thuật. Mỗi nhà cung cấp có bộ cấu hình riêng của họ.
Lưu khóa và tên mô hình vào các biến môi trường. Tránh đặt khóa bí mật trực tiếp trong tệp YAML đã được quản lý phiên bản.
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="[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 :
- 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;
}
}
Vậy bạn có thể gọi dịch giả ở bất cứ đâu
<?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,
]);
}
}
- Cập nhật cấu hình :
- Thêm nhà cung cấp mới của bạn vào phần nhà cung cấp trong cấu hình.
partitech_sonata_extra:
translation_api:
providers:
your_provider:
class: App\Translation\Provider\YourProvider
# Other provider-specific configuration here
Bằng cách làm theo các bước này, bạn có thể thêm và cấu hình các nhà cung cấp dịch thuật mới để mở rộng khả năng của tính năng Translation API trong Sonata Extra Bundle.
Điều chỉnh ví dụ cho phù hợp với phiên bản đã cài đặt
Các ví dụ Symfony và Sonata vẫn gắn với các phiên bản được chỉ ra trong bài viết. Symfony 4.x và Symfony 6.2 không còn được duy trì: đối với một dự án hiện tại, hãy sử dụng một nhánh được duy trì và tài liệu tương ứng chính xác với các phụ thuộc của bạn.
php bin/console about
composer show symfony/framework-bundle sonata-project/admin-bundle
Trước khi tiếp tục với mã, hãy kiểm tra các chữ ký, dịch vụ, tuyến đường và mẫu liên quan. Sau đó thêm một bài kiểm tra chức năng bao phủ quyền, mã HTTP và kết quả hiển thị.
Tham chiếu : phiên bản Symfony được hỗ trợ.