返回

PHP Google Translate API:3种实用翻译方案

php

PHP 中使用 Google Translator API 进行翻译的方案

在开发过程中,经常会遇到需要将字符串翻译成其他语言的需求,例如为了支持多语言网站,对用户提交的内容进行自动翻译等。 使用 Google Translator API 是一种常见的解决方案,但直接调用 API 并非总是最方便或高效的方式。本文将介绍几种在 PHP 中使用 Google Translator API 实现文本翻译的方法,并提供相应的代码示例。

方案一:使用 file_get_contents() 函数和 Google Translate 免费 API

这个方案依赖 Google Translate 免费 API,其优点是简单直接,不需要额外的依赖包,但是,要重点注意这种免费 API 的不稳定性和潜在的限制。Google 可能会随时更改其策略,甚至停止提供此服务,导致代码失效。如果项目对稳定性有较高要求,则应避免使用此方案。

原理:

  1. 构造请求 URL: 将需要翻译的文本、源语言和目标语言拼接成 Google Translate API 的 URL。 使用 urlencode() 函数对文本进行编码,确保特殊字符被正确处理。
  2. 发送请求: 使用 file_get_contents() 函数发送 HTTP GET 请求到构造的 URL。
  3. 解析响应: Google Translate API 返回 JSON 格式的响应。 使用 json_decode() 函数解析 JSON 数据。
  4. 提取翻译结果: 从解析后的 JSON 数据中提取翻译后的文本。

代码示例:

function translate(string $from_lang, string $to_lang, string $text): string
{
  $url = 'https://translation.googleapis.com/language/translate/v2?key=YOUR_API_KEY&q=' . urlencode($text) . '&source=' . $from_lang . '&target=' . $to_lang;
  $response = file_get_contents($url);
  $json = json_decode($response, true);

    //  Check if the 'translations' array exists and is not empty
    if (isset($json['data']['translations']) && !empty($json['data']['translations'])) {
      //  Extract the translated text from the first element of the 'translations' array
        return $json['data']['translations'][0]['translatedText'] ?? '';
    } else {
      //  Return an empty string if the translation is not available
        return '';
    }
}

//  Usage Example:
$translated_text = translate('en', 'es', 'Hello, world!');
echo $translated_text; // Output: Hola, mundo!

操作步骤:

  1. 替换 YOUR_API_KEY 为您有效的 Google Cloud Translate API Key
  2. 如果 API 使用不成功,尝试在谷歌云控制台中开启Cloud Translation API。
  3. 保存代码到一个 PHP 文件,比如 translate.php
  4. 运行代码: php translate.php
  5. 安全建议: 使用 isset() 或者 empty() 检测 $json['responseData']['translatedText'] 是否存在以及是否有值,避免 Notice 级别错误。 检查 $json 是否包含 error 字段,如果存在,则表示请求失败,应该进行错误处理。建议将此功能放在try-catch代码块中。

方案二: 使用 Guzzle HTTP Client 和 Google Cloud Translation API

这是一个推荐的方案。 它使用更为健壮和官方推荐的 Google Cloud Translation API 和流行的 HTTP 客户端库 Guzzle. 这种方式更稳定、更可靠,也更容易维护,但它需要配置 Google Cloud Platform 和安装 Guzzle。

原理:

  1. 安装 Guzzle: 使用 Composer 安装 Guzzle HTTP Client。
  2. 配置 Google Cloud Translation API: 在 Google Cloud Platform 中启用 Cloud Translation API,并获取 API 密钥。
  3. 构造请求: 使用 Guzzle 创建 HTTP POST 请求,将需要翻译的文本、源语言和目标语言作为参数传递。
  4. 发送请求: 使用 Guzzle 发送请求到 Google Cloud Translation API。
  5. 解析响应: Google Cloud Translation API 返回 JSON 格式的响应。 使用 json_decode() 函数解析 JSON 数据。
  6. 提取翻译结果: 从解析后的 JSON 数据中提取翻译后的文本。

代码示例:

require 'vendor/autoload.php';

use GuzzleHttp\Client;

function translate_guzzle(string $from_lang, string $to_lang, string $text, string $api_key): string
{
    $client = new Client();
    try {
        $response = $client->post('https://translation.googleapis.com/language/translate/v2', [
            'query' => [
                'key' => $api_key,
                'q' => $text,
                'source' => $from_lang,
                'target' => $to_lang,
                'format' => 'text' // 或者 'html', 如果你的文本是HTML
            ]
        ]);

        $body = $response->getBody();
        $data = json_decode($body, true);

      //  Check if 'translations' array exists
      if (isset($data['data']['translations']) && !empty($data['data']['translations'])) {
          return $data['data']['translations'][0]['translatedText'] ?? '';
      } else {
          return ''; // Return empty string or handle error if translation is unavailable
      }


    } catch (\Exception $e) {
        // Log the error message, for debugging purposes
        error_log($e->getMessage());

        return 'Translation failed.';
    }
}

// 使用示例
$apiKey = 'YOUR_API_KEY'; // 替换成你自己的 API 密钥
$translated_text = translate_guzzle('en', 'fr', 'Hello, world!', $apiKey);
echo $translated_text; // 输出: Bonjour le monde !

操作步骤:

  1. 安装 Guzzle: composer require guzzlehttp/guzzle
  2. 替换 YOUR_API_KEY 为你的 API 密钥.
  3. 配置 Google Cloud Translation API:确保已经在 Google Cloud Platform 中启用了 Cloud Translation API。
  4. 保存代码到一个 PHP 文件,比如 translate_guzzle.php
  5. 运行代码:php translate_guzzle.php
  6. 安全建议: 始终捕获并记录异常情况,有助于调试。 定期检查和更新你的 API 密钥,避免泄露风险。
    避免在代码中硬编码API key, 使用环境变量存储敏感配置。

方案三:使用现有的 PHP 库

很多开源的 PHP 库封装了 Google Cloud Translation API,可以简化代码。 例如,google/cloud-translate 是 Google 官方提供的 PHP 客户端库。 使用这些库可以减少手动处理 API 细节的工作,但需要学习和适应库的 API。选择开源库需要关注活跃度和维护情况,并阅读文档,评估是否满足项目的需求。

原理:

  1. 安装 Composer: 使用 Composer 安装选择的翻译库。
  2. 配置 Google Cloud Translation API: 在 Google Cloud Platform 中启用 Cloud Translation API,并获取 API 密钥或服务账号凭据。
  3. 使用库提供的API: 根据库的文档,配置 API 密钥或凭据,然后调用相应的翻译函数。

由于涉及到具体的库,代码示例需要参考对应的文档,这里提供通用步骤。

  1. Google Cloud 上创建Service Account, 并将对应的 Json Key File 放到服务器上。

  2. 安装官方SDK

    composer require google/cloud-translate
    
  3. 开始使用

<?php
require 'vendor/autoload.php';

use Google\Cloud\Translate\TranslateClient;

/**
 * Translates text from one language to another.
 *
 * @param string $text The text to translate.
 * @param string $target The target language.
 * @param string $source The source language.
 *                      If null (default), the API will attempt to detect
 *                      the origin language.
 */
function translateText(string $text, string $target, string $source = null): string
{
    $projectId = 'YOUR_PROJECT_ID';

    // New 建议使用环境变量,确保安全性
    $translate = new TranslateClient([
        'projectId' => $projectId,
	    'keyFilePath' => 'path/to/your/service-account.json'
    ]);
    $translation = $translate->translate($text, [
        'target' => $target,
        'source' => $source,
    ]);
    return $translation['text'];
}


# Example
printf('Translated text: %s' . PHP_EOL,
    translateText('Hello, world!', 'es'));

总结

选择哪种方案取决于项目的具体需求。 如果需要快速实现,且对稳定性要求不高,可以使用 file_get_contents() 函数。 如果需要更高的可靠性和性能,并且愿意配置 Google Cloud Platform,则建议使用 Guzzle HTTP Client 或现有的 PHP 库。 务必评估每个方案的优缺点,并结合实际情况做出选择。 使用 API key 时,一定要采取适当的安全措施,避免密钥泄露。