本文概述
重要
本教程没有使用付费的Google Translate API, 而是使用了免费的替代方法来抓取Google Translate网站。
此软件包仅用于教育目的, 可方便个人使用(你自己的疯狂项目)。不要依赖于此程序包, 因为它基于抓取Google Translate网站而随时可能中断。考虑购买正式的Google Translate API, 以用于其他用途。另外, 如果你发送异常流量(大量数据/请求), Google可能会禁止你的服务器IP或要求解决CAPTCHA。
如今, 很多人都非常依赖机器翻译, 尤其是Google Translate。 Google的翻译效果非常好, 至少将其与其他服务生成的翻译进行比较。但是, 每个人都知道Google Translate绝不是完美的翻译服务, 而是可以接受的。
如果你要为自己的个人应用程序创建某种不花钱的个人翻译模块或服务(而不是在用户界面中翻译项目), 那么你已经找到了正确的网站。在本文中, 你将学习如何使用Symfony项目中的Google Translate PHP包使用PHP翻译文本。
1.安装Google Translate PHP软件包
为了将文本翻译成Google网站允许的所有语言, 我们将使用Google Translate PHP软件包。这是一个有用的API, 可让你免费使用Google翻译功能(完全免费翻译)。
要将此软件包安装在symfony项目中, 请在终端中运行以下命令(一次位于项目目录中):
composer require stichoza/google-translate-php
如果你不想使用控制台安装软件包(或者你想使用特定版本), 则可以手动编辑composer.json并将软件包添加为依赖项:
{
"require": {
"stichoza/google-translate-php": "~3.2"
}
}
然后运行composer install, 就可以使用该软件包了。该软件包依赖于Guzzle HTTP软件包, 由@Stichoza编写。如果你需要有关此软件包的更多信息, 请在此处访问Github中的官方存储库。
2.翻译文字
使用此程序包进行文本翻译非常容易, 你只需要从程序包中导入TranslateClient类并为其创建新实例。重要的是, 使用setSource设置要使用相应代码(源语言)翻译的文本的语言, 并使用setTarget设置输出语言(翻译的文本)。
然后, 你可以使用实例中的translate方法, 该方法将要翻译的文本作为第一个参数:
<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
/**
* Import the TranslateClient class
*/
use Stichoza\GoogleTranslate\TranslateClient;
class DefaultController extends Controller
{
/**
* @Route("/", name="homepage")
*/
public function indexAction(Request $request)
{
// By default the TranslateClient is from 'auto' to 'en'
$tr = new TranslateClient();
$tr->setSource('en'); // Translate from English
$tr->setTarget('es'); // Translate to Spanish
$text = $tr->translate('Hello World!');
// Outputs "Hola Mundo!"
return new Response($text);
}
}
你可以在此处查看Google翻译所有可用语言的代码列表。
使用静态方法
你无需创建TranslateClient的实例, 因为它公开了一个静态方法来使事情变得更加简单明了:
<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
/**
* Import the TranslateClient class
*/
use Stichoza\GoogleTranslate\TranslateClient;
class DefaultController extends Controller
{
/**
* @Route("/", name="homepage")
*/
public function indexAction(Request $request)
{
$sourceLanguage = "es";
$outputLanguage = "pt";
$textToTranslate = "buenos días";
$text = TranslateClient::translate($sourceLanguage, $outputLanguage, $textToTranslate);
// Outputs "bom Dia"
return new Response($text);
}
}
自动检测源语言
与Google的翻译应用程序一样, 你可以通过将源语言设置为null来设置自动语言识别:
<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
/**
* Import the TranslateClient class
*/
use Stichoza\GoogleTranslate\TranslateClient;
class DefaultController extends Controller
{
/**
* @Route("/", name="homepage")
*/
public function indexAction(Request $request)
{
// By default the TranslateClient is from 'auto' to 'en'
$tr = new TranslateClient();
$tr->setSource(null); // Detect automatically the language
$tr->setTarget('en'); // Translate to Spanish
// It should detect german
$text = $tr->translate('Guten Morgen');
// Outputs "Detected language 'de' and translation: Good Morning"
return new Response("Detected language code '{$tr->getLastDetectedSource()}' and translation: $text");
}
}
如你所见, 你可以使用客户端的getLastDetectedSource方法检索检测到的语言代码。
编码愉快!
评论前必须登录!
注册