0

我想翻译所有文本,除了包含在特定元素内的文本,例如:

Please open the page <x>Settings</x> to configure your system.

DeepL 应该翻译除<x>元素内的项目之外的所有内容。我在这里阅读了文档,https ://www.deepl.com/docs-api/handling-xml/ignored-tags/ 并尝试查找,但似乎找不到合适的钩子来添加该 ignore_tags 参数。

我玩过$this->request['ignore_tags'], forDeepLApiTranslate但我不想直接编辑插件。

我应该如何处理这个/我应该使用的任何钩子?

4

1 回答 1

2

WordPress DeepL 插件利用wp_remote_*函数向其 API 发送请求,因此您可以连接到http_request_args过滤器以添加额外的参数。

这是一个例子:

add_filter(
        'http_request_args',
        static function ( array $parse_args, string $url ): array {

            $method = $parse_args['method'] ?? '';

            if ( $method === 'POST' && str_starts_with( $url, 'https://api.deepl.com/v2/translate' ) ) {

                $body = (string) ( $parse_args['body'] ?? '' );
                parse_str( $body, $results );

                $results['ignore_tags'] = 'x';
                $parse_args['body'] = http_build_query( $results );
            }

            return $parse_args;
        },
        10,
        2
    );

请注意,代码假定您的站点在 PHP8 上运行,因为它使用str_starts_with确保仅在向 DeepL API 端点发送请求时过滤请求参数。

于 2021-10-25T21:20:28.207 回答