14

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!

Toni Michel Caubet
  • 19,333
  • 56
  • 202
  • 378
  • json_decode returns an object, not an array. So, you'd have to do `$json->responseData->translatedText` rather than `$json['responseData']['translatedText']`, which I now see that you got below. – Phoenix Jan 09 '11 at 17:24

7 Answers7

12

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.

Savetheinternet
  • 491
  • 4
  • 11
  • thank you very much! updated the question with your code (there was a litter error) and explaining the error :( but it we can make it work it's exactly what i need! and sure is usefull for many others – Toni Michel Caubet Jan 09 '11 at 17:13
  • i get an error. Warning: file_get_contents() [function.file-get-contents]: Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? in D:\translate.php on line 166 Warning: file_get_contents(https://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=Translate&langpair=auto|es) [function.file-get-contents]: failed to open stream: No such file or directory in D:\translate.php on line 166 Notice: Trying to get property of non-object in D:\translate.php on line 167 Notice: Trying to get property of non-object in D:\translate.php on line 167 – Smith Mar 08 '11 at 17:54
  • 6
    Unfortunately this no longer works. Google is blocking all 3rd party requests – AlBeebe May 16 '12 at 01:49
  • 1
    @AlBeebe any reference about that? – Toni Michel Caubet Jun 21 '12 at 18:10
  • http://code.google.com/apis/language/translate/overview.html error please use this when i try this script in php – M Amir Shahzad Oct 16 '19 at 07:08
  • This is answer is no longer valid – Federico Schiocchet May 14 '21 at 12:06
5

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

hadiya vipul
  • 106
  • 1
  • 2
2

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;
        }
    }
}
1
    <!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 


 ?>
Fahad Ali
  • 11
  • 1
0

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'];
hellork
  • 324
  • 2
  • 8
0

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");
0

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=$apiKey&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

Ankit Jindal
  • 3,672
  • 3
  • 25
  • 37