简体   繁体   English

使用谷歌翻译 API 翻译 PHP $string

[英]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)谷歌搜索了一段时间,在 PHP 中使用谷歌翻译器进行翻译的最佳方式是什么,发现转换 URL 或使用 Js 的方式非常不同,但我只想使用 php(或使用非常简单的解决方案 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) (lang 的变量有一个额外的“g”......无论如何)

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)这个看起来不错,但它甚至没有给我一个错误,页面不会加载(error_report(1):S)

thanks in advance!提前致谢!

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.编辑:固定,测试和工作。

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我希望对 PHP 很有帮助

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 中使用 Google Translate API,您需要在您的 Composer 文件中插入“google/cloud-translate”和“google/apiclient”,在创建以下类的对象后运行 composer update 并调用 translate 方法:

<?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;
        }
    }
}

To get samples that work, view the README.md files that come with installation (after running composer require google/cloud-translate ).要获得有效的示例,请查看安装附带的 README.md 文件(在运行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.甚至Google 自己的翻译文本(基本)PHP 示例也不适合我。

As of 2020, this returned quick results via web browser query strings .截至 2020 年,这将通过 Web 浏览器查询字符串快速返回结果。 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'];
    <!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 


 ?>

My solution is a newly adaption from "Savetheinternet's" function.我的解决方案是对“Savetheinternet”功能的新改编。 It uses php_decode with flag true (JSON will returning associative arrays)它使用带有标志 true 的 php_decode (JSON 将返回关联数组)

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM