octfx / deeply
DeepLy 是 DeepL.com 翻译 API v2 的 PHP 客户端
Requires
- php: >=7.2
- ext-json: *
- ext-mbstring: *
- guzzlehttp/guzzle: ^6.3||^7.0
Requires (Dev)
- phpunit/phpunit: 5.7
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