Reputation: 20163
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
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
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
Step 4: Click on Cloud Translation API from the displayed list.
Step 5: Enable API
Step 6: Create API Key from APIs & Services
Step 7: Copy the generated 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:
Upvotes: 1
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
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
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
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
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
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