4

私はGoogle翻訳APIを介してテキストを翻訳することに取り組んでいます。データベースから取得した英語データを日本語などの他の言語に翻訳し、異なる言語出力をデータベースに保存する必要があります。現在、すべての文字列をGoogle翻訳APIに送信して、他の言語で出力を取得しています。しかし、非常に時間がかかり、複数のリクエストの制限により、データ全体を変換できません。

私の質問は、Google トランスレータ API を使用して、配列全体を 1 回のリクエストで翻訳できるかということです。

現在、私は以下のコードを使用しています:

for($mn=0;$mn<count($languageFieldData);$mn++)
{
    $field = $languageFieldData[$mn]['field'];

    $newVal = $leadQuery[0][$field];
    if(!empty($newVal))
    {
        //$leadQuery['ko'][0][$field]   = Translate($newVal,'ko');
        $leadQuery['ja'][0][$field] = Translate($newVal,'ja');
        //$leadQuery['zh-CN'][0][$field]    = Translate($newVal,'zh-CN');
    }
    $newVal = "";
}

function curl($url,$params = array(),$is_coockie_set = false)
{
    if(!$is_coockie_set)
    {
        $ckfile = tempnam ("/tmp", "CURLCOOKIE");
        $ch = curl_init ($url);
        curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
        $output = curl_exec ($ch);
    }
    $str = '';
    $str_arr= array();
foreach($params as $key => $value)
{
    $str_arr[] = urlencode($key)."=".urlencode($value);
}
if(!empty($str_arr))
    $str = '?'.implode('&',$str_arr);
    $Url = $url.$str; 
    $ch = curl_init ($Url);
    curl_setopt ($ch, CURLOPT_COOKIEFILE, $ckfile);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
    $output = curl_exec ($ch);
    return $output;
}
function Translate($word,$conversion)
{
    $word = urlencode($word);
    $url = 'http://translate.google.com/translate_a/t?client=t&text='.$word.'&hl=en&sl=en&tl='.$conversion.'&ie=UTF-8&oe=UTF-8&multires=1&otf=1&ssel=3&tsel=3&sc=1';
    $name_en = curl($url); 
    $name_en = explode('"',$name_en);
    return  $name_en[1];
}
4

3 に答える 3

0

解決しました。Div とその一意の id を使用して配列を html に変換しました。Google トランスレータは html のタブと属性を変換しません。DIV 内のコンテンツのみを翻訳します。

于 2015-05-29T14:41:47.473 に答える
0

簡単に言えば、いいえ、1 回のリクエストで取得することはできません。RESTful API [1] は、文字列を受け取るメソッドのみを定義します。

しかし、文字列の配列を変換する「大変な作業」をカプセル化する独自のメソッドを定義できるため、そのような機能が必要な点はわかりません。

100 リクエスト/秒/ユーザーというデフォルトのクォータ制限に対処したい場合は、いつでも制限を上げるか、スクリプトにロジックを追加して、1 秒あたり X リクエストを超えて起動しないようにすることができます。

[1] https://cloud.google.com/translate/v2/using_rest

于 2015-04-10T14:14:32.890 に答える