octfx/deeply

DeepLy 是 DeepL.com 翻译 API v2 的 PHP 客户端

3.1.4 2021-11-17 13:39 UTC

README

DeepL.com 是一个出色的、全新的翻译服务。与其他流行的翻译引擎相比,它提供了更好的翻译。DeepLy 是一个 PHP 包,它通过他们的 API 实现了一个与 DeepL 交互的客户端,可选的 Laravel 集成。

安装

通过 Composer

composer require octfx/deeply

从那时起,您可以运行 composer update 来获取此库的最新版本。

在不使用 Composer 的情况下也可以使用此库,但此时需要注册一个 自动加载函数

此库需要 PHP 7.2 或更高版本,mbstring 和 json 扩展。

DeepL 提供了一个免费的 API 密钥,每月字符翻译限制为 500k。访问 DeepL-com 请求 API 密钥。

使用示例

$deepLy = new Octfx\DeepLy\DeepLy('Your-API-Key');

$translatedText = $deepLy->translate('Hello world!', 'DE', 'EN');
    
echo $translatedText; // Prints "Hallo Welt!"

复杂示例

use Octfx\DeepLy\DeepLy;

$apiKey = 'Your-API-Key';
$deepLy = new DeepLy($apiKey);

try {
    $translatedText = $deepLy->translate('Hello world!', DeepLy::LANG_EN, DeepLy::LANG_AUTO);
    
    echo $translatedText; // Prints "Hallo Welt!"
} catch (AuthenticationException $e) {
    // API Key invalid
    // Code 403
} catch (QuotaException $e) {
    // Quota exceeded
    // Code 456
} catch (RateLimitedException $e) {
    // Ratelimited
    // Code 429
} catch (TextLengthException $e) {
     // Textlength > 30000 chars
} catch (CallException $e) {
    // Other errors
    // See: https://www.deepl.com/docs-api.html?part=accessing
}

始终在 translate 方法的调用周围包装 try-catch 块,因为如果参数无效或 API 调用失败,它们可能会抛出异常。最好使用 DeepLy 类的语言代码常量而不是硬编码的字符串作为语言参数。该类还提供了一些方法,例如 supportsSourceLangCode($langCode)supportsTargetLangCode($langCode)

翻译正式程度

DeepL API 允许指定翻译文本的正式程度。
此功能目前适用于除 "ES"(西班牙语)、"JA"(日语)和 "ZH"(中文)以外的所有目标语言。
可能选项包括

  • "default"(默认)
  • "more" - 用于更正式的语言
  • "less" - 用于更非正式的语言
$deepLy->formality('less');

// or
$translatedText = $deepLy->translate('Hello world!', DeepLy::LANG_EN, DeepLy::LANG_AUTO, 'more');

自动检测语言

DeepLy 有一个方法,它使用 DeepL API 来检测文本的语言

$languageCode = $deepLy->detectLanguage('Hello world!');

这将返回 'EN'。文本的语言必须是受支持的语言之一,否则结果将不正确。如果您不需要语言代码而是其名称,可以调用 $deepLy->getLangName($langCode) 方法。

通常情况下,API 可以处理和完全翻译包含不同语言部分的文本,如果语言切换不在句子内部。但是,detectLanguage() 方法将仅返回 一种 语言的代码。如果它无法自动检测语言,则将抛出异常。这种情况很少发生,更有可能的是 API 将返回一个 "false positive":它更可能检测到错误的语言而不是没有语言。

支持的语言

可以通过调用获取 DeepL 支持的所有语言

$deepLy->getSupportedLanguages('source'); // all supported source languages
$deepLy->getSupportedLanguages('target'); // all supported target languages

DeepL(y) 支持以下源语言

DeepL(y) 支持以下目标语言

请注意,仅对源语言启用自动检测。

文本长度限制

根据 DeepL.com 网站的信息,要翻译的文本长度限制为 30,000 个字符。默认情况下,如果超出长度限制,DeepLy 将抛出异常。您可以通过调用 $deepLy->setValidateTextLength(false) 来禁用此验证。

HTTP 客户端

默认情况下,DeepLy使用基于Guzzle的HTTP客户端。如果您想使用不同的HTTP客户端,请创建一个实现了HttpClient\HttpClientInterface接口的类,并使用替代HTTP客户端的方法。然后使用$deepLy->setHttpClient($yourHttpClient)注入它。

框架集成

DeepLy支持Laravel 5.x - 7.x,并且由于它还支持包自动发现,因此它将在Laravel 5.5 - 7.x中自动检测。

在Laravel 5.0-5.4中,您需要手动在config/app.php配置文件中的"providers"数组中注册服务提供者Octfx\DeepLy\Integrations\Laravel\DeepLyServiceProvider,并在"aliases"数组中将外观Octfx\DeepLy\Integrations\Laravel\DeepLyFacade作为别名。

DeepLy使用config('services.deepl.auth_key')来检索API密钥,因此您需要在services.php设置中设置它。

return [
    'deepl' => [
        'auth_key' => env('DEEPL_AUTH_KEY'),
    ],
];

请求限制

存在请求限制。此限制的阈值在DeepL提供的配额文档中指定。

内部结构

此库的"核心"由以下类组成

  • DeepLy - 主类
  • HttpClient\GuzzleHttpClient - HTTP客户端类
  • Protocol\JsonProtocol - JSON是DeepL API使用的协议
  • ResponseBag\AbstractBag - DeepL API响应的基本包装类
  • ResponseBag\UsageBag - 用于请求使用统计信息的API响应的具体类
  • ResponseBag\TranslationBag - 用于"translate"请求的API响应的具体类

还有一些异常类、接口、使用Guzzle的替代HTTP客户端实现以及用于Laravel集成的类。

免责声明

这不是一个官方包。它是100%开源和非商业的。

DeepL是DeepL GmbH的产品。更多信息:deepl.com/publisher.html