Здравствуйте, я пытаюсь использовать этот API двумя разными способами, и я не получаю один и тот же ответ:
С Javascript:
const test = async () => {
const res = await fetch("https://www.libretranslate.com/translate", {
method: "POST",
body: JSON.stringify({
q: ["maison", "chat"],
source: "fr",
target: "es",
format: "text",
api_key: "XXXXXXXXXXX"
}),
headers: { "Content-Type": "application/json" }
});
console.info(await res.json());
}
test();
Результат, который я получаю здесь:
{ translatedText: [ 'casa', 'gato' ] }
Каков ожидаемый результат...
С PHP:
public function actionTest() {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.libretranslate.com/translate");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt(
$ch,
CURLOPT_POSTFIELDS,
http_build_query([
'q' => json_encode(["maison", "chat"]),
'source' => 'fr',
'target' => 'es',
'format' => 'html',
'api_key' => 'XXXXXXXXXXX'
])
);
// curl_setopt($ch, CURLOPT_HTTPHEADER, array(
// 'Content-Type: application/json'
// ));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = json_decode(curl_exec($ch));
print_r($server_output);
curl_close($ch);
}
Результат, который я получаю здесь:
stdClass Object
(
[translatedText] => ["maison", "chat"]
)
Что не ожидаемо..
Эта проблема возникает в PHP, когда я пытаюсь перевести несколько слов, если я перевожу только одно слово (например, «чат»), вот что я получаю:
stdClass Object
(
[translatedText] => gato
)
Кроме того, как вы можете видеть в функции PHP, код, в котором я пытаюсь установить заголовки, закомментирован, потому что, когда я раскомментирую его, я получаю следующее:
stdClass Object
(
[error] => The browser (or proxy) sent a request that this server could not understand.
)
Спасибо !
Я исправил это, используя json_encode для всех данных вместо http_build_query, я также раскомментировал настройки заголовка, вот мой рабочий код:
public function actionTest() {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.libretranslate.com/translate");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt(
$ch,
CURLOPT_POSTFIELDS,
json_encode([
'q' => ['maison', 'chat'],
'source' => 'fr',
'target' => 'es',
'format' => 'html',
'api_key' => 'XXXXXXXXXXX'
])
);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json'
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = json_decode(curl_exec($ch));
print_r($server_output);
curl_close($ch);
}
и ответ:
(
[translatedText] => Array
(
[0] => casa
[1] => gato
)
)