免費的 Google 翻譯 API PHP 套件。完全免費翻譯。
透過 Composer 安裝此軟體包。
composer require stichoza/google-translate-php
注意需要PHP 8.0 或更高版本。對於較舊的 PHP 版本,請使用此軟體包的以下版本:
套餐版本 | PHP版本 | 文件 |
---|---|---|
^5.1 | PHP >= 8.0 | v5 文檔 |
^4.1 | PHP >= 7.1 | v4 文件 |
^3.2 | PHP < 7.1 | v3 文檔 |
建立 GoogleTranslate 對象
use Stichoza GoogleTranslate GoogleTranslate ;
$ tr = new GoogleTranslate ( ' en ' ); // Translates into English
或者您可以稍後更改語言
$ tr = new GoogleTranslate (); // Translates to ' en ' from auto - detected language by default
$ tr -> setSource ( ' en ' ); // Translate from English
$ tr -> setSource (); // Detect language automatically
$ tr -> setTarget ( ' ka ' ); // Translate to Georgian
翻譯句子
echo $ tr -> translate ( ' Hello World! ' );
此外,您也可以使用方法鏈
echo $ tr -> setSource ( ' en ' )-> setTarget ( ' ka ' )-> translate ( ' Goodbye ' );
或是呼叫一個速記靜態方法trans
echo GoogleTranslate:: trans ( ' Hello again ' , ' ka ' , ' en ' );
要自動偵測語言,只需將來源語言設定為null
:
$ tr = new GoogleTranslate ( ' es ' , null ); // Or simply do not pass the second parameter
$ tr -> setSource (); // Another way
使用getLastDetectedSource()
取得偵測到的語言:
$ tr = new GoogleTranslate ( ' fr ' );
$ text = $ tr -> translate ( ' Hello World! ' );
echo $ tr -> getLastDetectedSource (); // Output : en
如果無法偵測到語言,則傳回值為null
。
您可以使用languages
方法取得所有支援的語言的清單。
$ tr = new GoogleTranslate ();
$ languages = $ tr -> languages (); // Get supported languages in iso - 639 format
// Output : [ 'ab' , 'ace' , 'ach' , 'aa' , 'af' , 'sq' , 'alz' , ... ]
(可選)傳遞目標語言代碼以檢索支援的語言以及以該語言顯示的名稱。
$ tr = new GoogleTranslate ();
$ languages = $ tr -> languages ( ' en ' ); // Get supported languages , display name in english
// Output : [ 'en' => English' , ' es ' => ' Spanish ' , ' it' => 'Italian' , ... ]
echo $ languages [ ' en ' ]; // Output : ' English '
echo $ languages [ ' ka ' ]; // Output : ' Georgian '
與translate
/ trans
方法相同,您也可以使用靜態langs
方法:
GoogleTranslate:: langs ();
// Output : [ 'ab' , 'ace' , 'ach' , 'aa' , 'af' , 'sq' , 'alz' , ... ]
GoogleTranslate:: langs ( ' en ' );
// Output : [ 'en' => English' , ' es ' => ' Spanish ' , ' it' => 'Italian' , ... ]
Google API 文件中也列出了支援的語言。
preserveParameters()
方法可讓您在執行翻譯時保留字串中的某些參數。這在處理需要從翻譯中排除特定佔位符的在地化檔案或範本引擎時特別有用。
預設正規表示式是/:(w+)/
它涵蓋以:
開頭的參數。對於翻譯 Laravel 和其他框架的語言檔案很有用。您也可以傳遞自訂正規表示式來修改參數語法。
$ tr = new GoogleTranslate ( ' de ' );
$ text = $ tr -> translate ( ' Page :current of :total ' ); // Seite : aktuell von : gesamt
$ text = $ tr -> preserveParameters ()
-> translate ( ' Page :current of :total ' ); // Seite : current von : total
或使用自訂正規表示式:
$ text = $ tr -> preserveParameters ( ' /{{([^}]+)}}/ ' )
-> translate ( ' Page {{current}} of {{total}} ' ); // Seite { { current } } von { { total } }
您也可以將相同的功能與靜態trans()
方法一起使用。
GoogleTranslate:: trans ( ' Welcome :name ' , ' fr ' , preserveParameters: true ); // Default regex
GoogleTranslate:: trans ( ' Welcome {{name}} ' , ' fr ' , preserveParameters: ' /{{([^}]+)}}/ ' ); // Custom regex
對於進階用法,您可能需要 Google 翻譯提供的原始結果。您可以使用getResponse
方法。
$ responseArray = $ tr -> getResponse ( ' Hello world! ' );
您可以透過setUrl
方法覆寫預設的 Google Translate url。對某些國家有用
$ tr -> setUrl ( ' http://translate.google.cn/translate_a/single ' );
該套件使用 Guzzle 進行 HTTP 請求。您可以將 guzzle 用戶端配置選項陣列作為第三個參數傳遞給GoogleTranslate
建構函數,或僅使用setOptions
方法。
您可以使用此選項配置代理、使用者代理、預設標頭、連線逾時等。
$ tr = new GoogleTranslate ( ' en ' , ' ka ' , [
' timeout ' => 10 ,
' proxy ' => [
' http ' => ' tcp://localhost:8125 ' ,
' https ' => ' tcp://localhost:9124 '
],
' headers ' => [
' User-Agent ' => ' Foo/5.0 Lorem Ipsum Browser '
]
]);
// Set proxy to tcp : // localhost : 8090
$ tr -> setOptions ([ ' proxy ' => ' tcp://localhost:8090 ' ])-> translate ( ' Hello ' );
// Set proxy to socks5 : // localhost : 1080
$ tr -> setOptions ([ ' proxy ' => ' socks5://localhost:1080 ' ])-> translate ( ' World ' );
有關更多信息,請參閱 Guzzle 文件中的創建客戶端部分。
您可以透過將生成器物件作為建構函式的第四個參數傳遞或僅使用setTokenProvider
方法來重寫令牌生成器類別。
生成器必須實作StichozaGoogleTranslateTokensTokenProviderInterface
。
use Stichoza GoogleTranslate Tokens TokenProviderInterface ;
class MyTokenGenerator implements TokenProviderInterface
{
public function generateToken ( string $ source , string $ target , string $ text ): string
{
// Your code here
}
}
並使用:
$ tr -> setTokenProvider ( new MyTokenGenerator );
谷歌翻譯有一個名為client
參數,它定義翻譯品質。首先它被設定為webapp
但後來谷歌添加了gtx
值,這導致在語法和句子的整體含義方面有更好的翻譯品質。
您可以使用->setClient()
方法在客戶端之間切換。例如,如果您想要使用舊版的翻譯演算法,請輸入$tr->setClient('webapp')->translate('lorem ipsum...')
。預設值為gtx
。
靜態方法trans()
和非靜態translate()
和getResponse()
方法將拋出以下例外:
ErrorException
如果 HTTP 請求因某種原因失敗。UnexpectedValueException
如果從 Google 收到的資料無法解碼。從v5.1.0開始, StichozaGoogleTranslateExceptions
命名空間中提供了具體的異常:
LargeTextException
如果請求的文字太大而無法翻譯。RateLimitException
如果 Google 因過多的請求而封鎖您。TranslationRequestException
如果在翻譯過程中發生任何其他 HTTP 相關錯誤。TranslationDecodingException
如果無法解碼回應 JSON。所有特定異常都是向後相容的,因此如果您使用舊版本,則無需更新程式碼。
TranslationDecodingException
擴展了UnexpectedValueException
,而LargeTextException
、 RateLimitException
和TranslationRequestException
擴展了此套件的舊版本 ( <5.1.0
) 中使用的ErrorException
。
此外,如果沒有可用的翻譯, translate()
和trans()
方法將傳回null
。
503 Service Unavailable
回應:如果您收到此錯誤,則很可能 Google 已禁止您的外部 IP 位址和/或要求您解決驗證碼。這不是這個包中的錯誤。谷歌變得更加嚴格,他們似乎不斷降低每個IP在一定時間內允許的請求數量。嘗試發送較少的請求以保持低調,或經常更改您的 IP(例如使用代理)。請注意,一旦 IP 被封鎖,即使只是暫時的,封鎖時間也可能會持續幾分鐘到 12-24 小時以上,具體情況各有不同。429 Too Many Requests
回應:這個錯誤與上面解釋的基本相同。413 Request Entity Too Large
回應:此錯誤表示您的輸入字串太長。 Google 只允許一次翻譯最多 5000 個字元。如果您想翻譯較長的文本,可以將其拆分為較短的部分,然後逐一翻譯。403 Forbidden
回應:這不是此軟體包的問題。 Google Translate 本身在翻譯某些字元和 HTML 實體時存在一些問題。參見#119(評論) 該軟體包僅出於教育目的而開發。不要依賴這個包,因為它是基於抓取 Google 翻譯網站,因此可能隨時損壞。考慮購買官方 Google Translate API 用於其他類型的使用。
如果這個包幫助您減少了開發某些東西的時間,或者解決了您遇到的任何主要問題,請隨時給我一杯咖啡:)