PHP 怎么PHP文档翻译

wen PHP项目 2

本文目录导读:

PHP 怎么PHP文档翻译

  1. 使用第三方翻译 API(推荐)
  2. 使用免费翻译服务
  3. 批量翻译文档文件
  4. 翻译 HTML/PDF 文件
  5. 使用 Composer 包
  6. 代码示例:完整的文档翻译类
  7. 注意事项:

在 PHP 中处理文档翻译,主要有以下几种方式,取决于你的具体需求:

使用第三方翻译 API(推荐)

Google Translate API

<?php
function googleTranslate($text, $targetLang = 'zh-CN') {
    $apiKey = 'YOUR_API_KEY';
    $url = 'https://translation.googleapis.com/language/translate/v2';
    $data = array(
        'q' => $text,
        'target' => $targetLang,
        'key' => $apiKey
    );
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    $response = curl_exec($ch);
    curl_close($ch);
    $result = json_decode($response, true);
    return $result['data']['translations'][0]['translatedText'];
}
// 使用示例
echo googleTranslate('Hello World');

DeepL API

<?php
function deeplTranslate($text, $targetLang = 'ZH') {
    $apiKey = 'YOUR_API_KEY';
    $url = 'https://api-free.deepl.com/v2/translate';
    $data = array(
        'auth_key' => $apiKey,
        'text' => $text,
        'target_lang' => $targetLang
    );
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    $response = curl_exec($ch);
    curl_close($ch);
    $result = json_decode($response, true);
    return $result['translations'][0]['text'];
}

使用免费翻译服务

百度翻译 API

<?php
function baiduTranslate($query, $from = 'auto', $to = 'zh') {
    $appid = 'YOUR_APP_ID';
    $secretKey = 'YOUR_SECRET_KEY';
    $salt = rand(10000, 99999);
    $sign = md5($appid . $query . $salt . $secretKey);
    $url = 'http://api.fanyi.baidu.com/api/trans/vip/translate';
    $data = array(
        'q' => $query,
        'from' => $from,
        'to' => $to,
        'appid' => $appid,
        'salt' => $salt,
        'sign' => $sign
    );
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url . '?' . http_build_query($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close($ch);
    $result = json_decode($response, true);
    return isset($result['trans_result'][0]['dst']) ? $result['trans_result'][0]['dst'] : '';
}

批量翻译文档文件

翻译 DOCX 文件

<?php
require 'vendor/autoload.php';
use PhpOffice\PhpWord\IOFactory;
function translateDocument($inputFile, $outputFile) {
    // 读取文档
    $phpWord = IOFactory::load($inputFile);
    foreach ($phpWord->getSections() as $section) {
        foreach ($section->getElements() as $element) {
            if ($element instanceof \PhpOffice\PhpWord\Element\TextRun) {
                foreach ($element->getElements() as $textElement) {
                    if (method_exists($textElement, 'getText')) {
                        $text = $textElement->getText();
                        $translated = googleTranslate($text, 'zh-CN');
                        $textElement->setText($translated);
                    }
                }
            }
        }
    }
    // 保存翻译后的文档
    $writer = IOFactory::createWriter($phpWord, 'Word2007');
    $writer->save($outputFile);
}
translateDocument('source.docx', 'translated.docx');

翻译 HTML/PDF 文件

翻译 HTML 文件

<?php
function translateHTML($htmlFile, $targetLang = 'zh-CN') {
    $html = file_get_contents($htmlFile);
    // 简单示例:翻译文本节点
    $dom = new DOMDocument();
    libxml_use_internal_errors(true);
    $dom->loadHTML($html);
    libxml_clear_errors();
    $xpath = new DOMXPath($dom);
    $textNodes = $xpath->query('//text()[normalize-space()]');
    foreach ($textNodes as $node) {
        $text = trim($node->nodeValue);
        if (strlen($text) > 0) {
            $translated = googleTranslate($text, $targetLang);
            $node->nodeValue = $translated;
        }
    }
    return $dom->saveHTML();
}

使用 Composer 包

composer require stichoza/google-translate-php
<?php
use Stichoza\GoogleTranslate\GoogleTranslate;
$tr = new GoogleTranslate('zh-CN');
$translated = $tr->translate('Hello World');
echo $translated;

代码示例:完整的文档翻译类

<?php
class DocumentTranslator {
    private $apiKey;
    private $provider;
    public function __construct($apiKey, $provider = 'google') {
        $this->apiKey = $apiKey;
        $this->provider = $provider;
    }
    public function translate($text, $targetLang = 'zh-CN') {
        switch ($this->provider) {
            case 'google':
                return $this->translateWithGoogle($text, $targetLang);
            case 'deepl':
                return $this->translateWithDeepL($text, $targetLang);
            case 'baidu':
                return $this->translateWithBaidu($text, $targetLang);
            default:
                throw new Exception('不支持的翻译服务');
        }
    }
    private function translateWithGoogle($text, $targetLang) {
        // Google API 调用代码
    }
    private function translateWithDeepL($text, $targetLang) {
        // DeepL API 调用代码
    }
    private function translateWithBaidu($text, $targetLang) {
        // 百度 API 调用代码
    }
    public function translateFile($inputPath, $outputPath, $fileType) {
        // 根据文件类型调用不同的翻译方法
    }
}
// 使用示例
$translator = new DocumentTranslator('YOUR_API_KEY');
echo $translator->translate('Hello, how are you?');

注意事项:

  1. API 限制:免费 API 通常有每日请求限制
  2. 文本长度:部分 API 有单次翻译字符限制
  3. 网络请求:确保安装了 cURL 扩展
  4. 错误处理:添加适当的错误处理机制
  5. 编码问题:确保正确处理 UTF-8 编码

选择哪种方法取决于你的具体需求:翻译单个文本、批量翻译文档、还是翻译网页内容。

抱歉,评论功能暂时关闭!