Traducir textos usando DeepL en Laravel

La API de DeepL es bastante sencilla y tiene un tier gratuito de 500.000 caracteres al mes que podemos usar para introducir cierta inteligencia en nuestras aplicaciones Laravel.

Traducir textos usando DeepL en Laravel
Photo by Towfiqu barbhuiya / Unsplash

No soy muy amigo de Google Translate. ¡Siempre me ha gustado mucho más DeepL! Ya van varias veces que he tenido que integrar algún tipo de traducción en PHP usando la API de DeepL, bien sea para detectar el idioma en el que algo está escrito como para traducir el contenido a un mismo idioma.

Por suerte, la API de DeepL es bastante sencilla y tiene un tier gratuito de 500.000 caracteres al mes. Para implementarlo con Laravel podemos seguir los siguientes pasos:

Primero, añadimos nuestro token en el fichero .env:

DEEPL_TOKEN="tu token"

Y lo añadimos en nuestro config/services.php:

<?php

return [
	// ...
    'deepl' => [
	    'token' => env('DEEPL_TOKEN'),
    ],
];

Una vez tenemos esto preparado, ya podemos hacer las peticiones a la API para traducir. El código sería algo así:

use Illuminate\Support\Facades\Http;

// ...

public function translate(string $text, string $targetLang = 'EN'): string
{
    $query = [
	    'text' => $text,
    	'target_lang' => $targetLang,
    ];
    
    $response = Http::withToken(config('services.deepl.token'), 'DeepL-Auth-Key')
    	->asForm()
        ->post('https://api.deepl.com/v2/translate?' . http_build_query($query), $query)
        ->throw();
        
    return $response['translations'][0]['text'];
}