【问题标题】:Google Translate API outputs HTML entitiesGoogle Translate API 输出 HTML 实体
【发布时间】:2015-01-07 04:57:25
【问题描述】:

英语: Sale ID prefix is a required field

法语: Vente préfixe d'ID est un champ obligatoire

有没有办法让谷歌翻译不输出html实体,而是输出实际字符(')

代码:(见translateTo

#!/usr/bin/php
<?php
$languages = array('english' => 'en', 'spanish' => 'es', 'indonesia' => 'id', 'french' => 'fr', 'italian' => 'it', 'dutch' => 'nl', 'portugues' => 'pt', 'arabic' => 'ar');

fwrite(STDOUT, "Please enter file: ");
$file = trim(fgets(STDIN));

//Run until user kills it
while(true)
{
    fwrite(STDOUT, "Please enter key: ");
    $key = trim(fgets(STDIN));

    fwrite(STDOUT, "Please enter english value: ");
    $value = trim(fgets(STDIN));

    foreach($languages as $folder=>$code)
    {
        $path = dirname(__FILE__).'/../../application/language/'.$folder.'/'.$file;
        $transaltedValue = translateTo($value, $code);

        $current_file_contents = file_get_contents($path); 

        //If we have already translated, update it
        if (preg_match("/['\"]{1}${key}['\"]{1}/",$current_file_contents))
        {
            $find_existing_translation = "/(\[['\"]{1})(${key}['\"]{1}[^=]+=[ ]*['\"]{1})([^'\"]+)(['\"]{1};)/";
            $new_file_contents = preg_replace($find_existing_translation, '${1}${2}'.$transaltedValue.'${4}', $current_file_contents);
            file_put_contents($path, $new_file_contents);
        }
        else //We haven't translated: Add
        {
            $pair = "\$lang['$key'] = '$transaltedValue';";
            file_put_contents($path, str_replace('?>', "$pair\n?>", $current_file_contents));
        }
    }


    fwrite(STDOUT, "Quit? (y/n): ");
    $quit = strtolower(trim(fgets(STDIN)));

    if ($quit == 'y' || $quit == 'yes')
    {
        exit(0);
    }
}

function translateTo($value, $language_key)
{
    if ($language_key == 'en')
    {
        return $value;
    }

    $api_key = 'MY_API_KEY';
    $value = urlencode($value);

    $url ="https://www.googleapis.com/language/translate/v2?key=$api_key&q=$value&source=en&target=$language_key";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $body = curl_exec($ch);
    curl_close($ch);

    $json = json_decode($body);

    return $json->data->translations[0]->translatedText;
}
?>

【问题讨论】:

  • 您是否尝试过将格式指定为文本?根据API document,这默认为 HTML。我知道这用于指定要翻译的文本的格式 - 但值得考虑的是响应将采用与请求相同的格式
  • 做到了!请回答一下,我可以给你加分!

标签: google-translate


【解决方案1】:

对于任何在 java 中工作的人,Translate.TranslateOption 中有一个格式方法

所以现在你可能有类似这样的翻译调用:

YourTranslateObject.translate(yourTextToBeTranslated,Translate.TranslateOption.targetLanguage(yourTargetLanguageCode))

您需要做的就是添加第三个参数:

YourTranslateObject.translate(yourTextToBeTranslated,Translate.TranslateOption.targetLanguage(yourTargetLanguageCode), Translate.TranslateOption.format("text"))

由于 HTML 是默认的,这会将其切换为文本。

【讨论】:

    【解决方案2】:

    根据 Google 翻译文档,您可以选择要提供要翻译的文本的格式(请参阅query parameters 中的format)。如果未指定,格式默认为HTML

    您应该将此查询参数设置为text,以表明您发送的是纯文本,因为 Google 可能会以与接收到的格式相同的格式返回翻译后的文本。

    所以你的 PHP 代码可以变成:

    $baseUrl = "https://www.googleapis.com/language/translate/v2";
    $params ="?key=$api_key&q=$value&source=en&target=$language_key&format=text";
    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_URL, $baseUrl + $params );
    

    【讨论】:

    【解决方案3】:

    如果您指定格式Text,HTML 标记内的内容也会被翻译。假设您的输入是:

    This is a &lt;a href="https://example.com/path"&gt;link&lt;/a&gt;

    然后examplepath 也将被翻译,从而断开链接。

    为避免这种情况并解决您的问题,请坚持使用HTML 格式并取消转义您从谷歌翻译收到的文本。在 php 中你可以使用html_entity_decode

    【讨论】:

      【解决方案4】:

      如果您使用谷歌翻译客户端库, 你应该在 translate 方法中传递 format_,而不是 format,它是 format_ 以下是谷歌翻译python api:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-27
        • 2023-04-02
        • 2018-12-04
        • 2019-07-10
        • 2018-08-11
        • 2019-03-18
        • 1970-01-01
        相关资源
        最近更新 更多