Toni Michel Caubet
Toni Michel Caubet

Reputation: 20163

translate a PHP $string using google translator API

been google'ing for a while how is the best way to translate with google translator in PHP, found very different ways converting URLS, or using Js but i want to do it only with php (or with a very simple solution JS/JQUery)

example:

//hopefully with $from_lan and $to_lan being like 'en','de', .. or similar
function translate($from_lan, $to_lan, $text){

// do

return $translated_text;

}

can you give me a clue? or maybe you already have this function..

my intention it's to use it only for the languages i have not already defined (or keys i haven't defined), that's why i wan it so simple, will be only temporal..

EDIT

thanks for your replies we are now trying this soulutions:

function auto_translate($from_lan, $to_lan, $text){
// do


$json = json_decode(file_get_contents('https://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=' . urlencode($text) . '&langpair=' . $from_lan . '|' . $to_lan));
$translated_text = $json->responseData->translatedText;


return $translated_text;

}

(there was a extra 'g' on variables for lang... anyway)

it returns: works now :)

i don't really understand much the function, so any idea why is not acepting the object? (now i do)

OR:

    function auto_translate($from_lan, $to_lan, $text){
    // do

//    $json = json_decode(file_get_contents('https://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=' . urlencode($text) . '&langpair=' . $from_lan . '|' . $to_lan));
//    $translated_text = $json['responseData']['translatedText'];
    error_reporting(1);
    require_once('GTranslate.php');
    try{
       $gt = new Gtranslate();
       $translated_text = $gt->english_to_german($text);

     } catch (GTranslateException $ge)
     {
           $translated_text= $ge->getMessage();
     }


    return $translated_text;
}

And this one looks great but it doesn't even gives me an error, the page won't load (error_report(1) :S)

thanks in advance!

Upvotes: 15

Views: 72227

Answers (8)

Michel
Michel

Reputation: 97

To translate a string you can use a function:

function translate(string $text, string $from = 'en', string $to = 'fr'):string {
    $data = "https://translate.googleapis.com/translate_a/single?client=gtx&sl=$from&tl=$to&dt=t&dt=bd&dj=1&q=" ;
    $data .= rawurlencode($text) ;
    $data = file_get_contents($data) ;
    $data = json_decode($data, true) ;
    $data = array_column($data['sentences'], 'trans') ;
    $data = implode('', $data) ;
    // $data = html_entity_decode($data, ENT_QUOTES|ENT_SUBSTITUTE|ENT_HTML401, 'UTF-8') ;
    return $data ;
}

Upvotes: 0

Ankit Jindal
Ankit Jindal

Reputation: 4030

Translate any string using Google translator API

Step 1: Go to console

Step 2: Create a project and open it

Step 3: Search cloud translation in API library

Search translation api

Step 4: Click on Cloud Translation API from the displayed list.

choose api

Step 5: Enable API

enable api

Step 6: Create API Key from APIs & Services

Create-credentials

Step 7: Copy the generated API key:

api-key


Now, lets move to the PHP script for using Google Translate API

We are using Translate-v2 API, which accepts following primary parameters:

  • q: the input text

  • source: the source language

  • target: the target language


$inputText = 'Test input message';
$source = 'en'; //English
$target = 'es'; // Spanish
$encodedInputText = rawurlencode($inputText);
$googleApiKey = '<paste the google api key here>';

$url = "https://www.googleapis.com/language/translate/v2?key=$googleApiKey&q=$encodedInputText&source=$source&target=$target";

$handle = curl_init($url);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($handle);
$responseDecoded = json_decode($response, true);

curl_close($handle);

print_r($responseDecoded['data']['translations'][0]['translatedText']);

Alternatively, you can also do this using Postman and generate curl code:

generate-curl-code-postman

Upvotes: 1

user11913484
user11913484

Reputation:

My solution is a newly adaption from "Savetheinternet's" function. It uses php_decode with flag true (JSON will returning associative arrays)

 <?php

    function translate($SourceLan, $TargetLan, $text)
    {
        $obj = json_decode(file_get_contents('https://translation.googleapis.com/language/translate/v2?q=' . urlencode($text) . '&source=' . $SourceLan . '&target=' . $TargetLan . '&format=text&key=YOUR_OWN_GOOGLE_API_KEY'), true);

        $TranslatedText = $obj['data']['translations']['0']['translatedText'];

        return $TranslatedText;
    }


    echo translate("de", "en", "Hallo Welt");

Upvotes: 0

Fahad Ali
Fahad Ali

Reputation: 11

    <!DOCTYPE html>
<html lang="en-US">
<body>

<h1>My Web Page</h1>

<p>Hello everybody!</p>

<p>Translate this page:</p>


<div id="google_translate_element"></div>

<script type="text/javascript">
function googleTranslateElementInit() {
  new google.translate.TranslateElement({pageLanguage: 'en', layout: google.translate.TranslateElement.InlineLayout.SIMPLE}, 'google_translate_element');
}
</script>

<script type="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>

<p>You can translate the content of this page by selecting a language in the select box.</p>

</body>
</html>


<?php 


 ?>

Upvotes: 1

hellork
hellork

Reputation: 354

To get samples that work, view the README.md files that come with installation (after running composer require google/cloud-translate).

This page comes up number one in search, so it was necessary to provide an update. Even Google's own translating text (basic) PHP examples didn't work for me.

As of 2020, this returned quick results via web browser query strings. Consider the sanitizing user input if this is to be deployed as part of some front-facing application or website.

<?php
require 'vendor/autoload.php';
use Google\Cloud\Translate\V2\TranslateClient;

$txt  = $_GET["q"];
$src  = $_GET["s"];
$targ = $_GET["t"];

$translate = new TranslateClient([
    'key' => 'Your API Key Here'
]);

// Translate text from english to french.
$result = $translate->translate($txt, [
    'source' => $src,
    'target' => $targ,
]);

echo $result['text'];

Upvotes: 0

codealchemist
codealchemist

Reputation: 41

Want to use Google Translate API in PHP, you would need to insert "google/cloud-translate" and "google/apiclient" in your composer file, run composer update and call translate method after creating an object of the following class:

<?php

require_once APP_ROOT . '/library/google-api-php-client/src/Google_Client.php';
require_once APP_ROOT . '/library/google-api-php-client/src/contrib/Google_TranslateService.php';

class GoogleTranslator
{
    private $developer_key;

    const PROVIDER = "google";
    const SUCCESS = "success";
    const FAILURE = "failure";
    const TRANSLATE_SUCCESS_MESSAGE = 'text translation successful';

    public function __construct()
    {
        $this->developer_key = '<DEVELOPER KEY HERE>';
    }

    public function translate($text, $source_language, $target_language)
    {
        try {
            $client = new \Google_Client();
            $client->setApplicationName('Google Translate PHP Starter Application');

            $client->setDeveloperKey($this->developer_key);
            $service = new \Google_TranslateService($client);

            $optional_parameters = array('source' => $source_language);

            $translated_text = $service->translations->listTranslations($text, $target_language, $optional_parameters);
            return array('translation' => $translated_text['translations'][0]['translatedText'],
                'provider' => self::PROVIDER,
                'status' => self::SUCCESS,
                'message' => self::TRANSLATE_SUCCESS_MESSAGE);
        } catch (\Exception $e) {
            error_log($e->getMessage() . " FOR GET TRANSLATION CALL", "GOOGLE TRANSLATE API");
            $res = array('translation' => '',
                'provider' => self::PROVIDER,
                'status' => self::FAILURE,
                'message' => $e->getMessage());
            return $res;
        }
    }
}

Upvotes: 4

hadiya vipul
hadiya vipul

Reputation: 116

I have new solution for this.. Because last solution need new version and some fetched other issue.


    $text = 'Test new message only.';
    $apiKey = '<past your google api key here>';
    $url = 'https://www.googleapis.com/language/translate/v2?key=' . $apiKey . '&q=' . rawurlencode($text) . '&source=en&target=fr';
    $handle = curl_init($url);
    curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($handle);
    $responseDecoded = json_decode($response, true);

    curl_close($handle);

    print_r($responseDecoded['data']['translations'][0]['translatedText']);
    die;

    //expected output
     Testez le nouveau message uniquement.

I hope is very helpful in PHP

Upvotes: 6

Savetheinternet
Savetheinternet

Reputation: 491

I haven't tested this yet, but try:

function translate($from_lan, $to_lan, $text){
    $json = json_decode(file_get_contents('https://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=' . urlencode($text) . '&langpair=' . $from_lan . '|' . $to_lan));
    $translated_text = $json->responseData->translatedText;

    return $translated_text;
}

EDIT: Fixed, tested and works.

Upvotes: 12

Related Questions