แพ็คเกจ PHP API ของ Google Translate ฟรี แปลฟรีทั้งหมด
ติดตั้งแพ็คเกจนี้ผ่าน Composer
composer require stichoza/google-translate-php
หมายเหตุ ต้องใช้ PHP 8.0 หรือใหม่กว่า ใช้แพ็คเกจเวอร์ชันต่อไปนี้สำหรับ 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()
ช่วยให้คุณสามารถรักษาพารามิเตอร์บางอย่างในสตริงขณะดำเนินการแปลได้ สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อต้องจัดการกับไฟล์การแปลเป็นภาษาท้องถิ่นหรือเอ็นจิ้นการสร้างเทมเพลตที่ตัวยึดตำแหน่งเฉพาะจำเป็นต้องแยกออกจากการแปล
regex เริ่มต้นคือ /:(w+)/
ซึ่งครอบคลุมพารามิเตอร์ที่ขึ้นต้นด้วย :
มีประโยชน์สำหรับการแปลไฟล์ภาษาของ Laravel และเฟรมเวิร์กอื่นๆ คุณยังส่ง regex ที่กำหนดเองเพื่อแก้ไขไวยากรณ์ของพารามิเตอร์ได้ด้วย
$ 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
หรือใช้ regex ที่กำหนดเอง:
$ text = $ tr -> preserveParameters ( ' /{{([^}]+)}}/ ' )
-> translate ( ' Page {{current}} of {{total}} ' ); // Seite { { current } } von { { total } }
คุณสามารถใช้คุณสมบัติเดียวกันกับวิธี static 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! ' );
คุณสามารถแทนที่ URL เริ่มต้นของ Google แปลภาษาได้ด้วยวิธี setUrl
มีประโยชน์สำหรับบางประเทศ
$ 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 );
Google Translate มีพารามิเตอร์ชื่อ client
ซึ่งกำหนดคุณภาพการแปล ก่อนอื่นมันถูกตั้งค่าเป็น webapp
แต่ต่อมา Google ได้เพิ่มค่า gtx
ซึ่งส่งผลให้คุณภาพการแปลดีขึ้นในแง่ของไวยากรณ์และความหมายโดยรวมของประโยค
คุณสามารถใช้ ->setClient()
วิธีการสลับระหว่างไคลเอนต์ ตัวอย่างเช่น หากคุณต้องการใช้อัลกอริทึมการแปลเวอร์ชันเก่า ให้พิมพ์ $tr->setClient('webapp')->translate('lorem ipsum...')
ค่าเริ่มต้นคือ gtx
วิธีการแบบคงที่ trans()
และวิธี translate()
และ getResponse()
จะส่งข้อยกเว้นต่อไปนี้:
ErrorException
หากคำขอ HTTP ล้มเหลวด้วยเหตุผลบางประการUnexpectedValueException
หากข้อมูลที่ได้รับจาก Google ไม่สามารถถอดรหัสได้ ตั้งแต่ เวอร์ชัน 5.1.0 มีข้อยกเว้นที่เป็นรูปธรรมอยู่ในเนมสเปซ StichozaGoogleTranslateExceptions
:
LargeTextException
หากข้อความที่ร้องขอมีขนาดใหญ่เกินกว่าจะแปลได้RateLimitException
หาก Google บล็อกคุณเนื่องจากคำขอมีจำนวนมากเกินไปTranslationRequestException
หากมีข้อผิดพลาดอื่น ๆ ที่เกี่ยวข้องกับ HTTP เกิดขึ้นระหว่างการแปลTranslationDecodingException
หากการตอบสนอง JSON ไม่สามารถถอดรหัสได้ข้อยกเว้นที่เป็นรูปธรรมทั้งหมดสามารถใช้งานร่วมกันได้แบบย้อนหลัง ดังนั้นหากคุณใช้เวอร์ชันเก่า คุณจะไม่ต้องอัปเดตโค้ดของคุณ
TranslationDecodingException
ขยาย UnexpectedValueException
ในขณะที่ LargeTextException
, RateLimitException
และ TranslationRequestException
ขยาย ErrorException
ที่ใช้ในเวอร์ชันเก่า ( <5.1.0
) ของแพ็คเกจนี้
นอกจากนี้ เมธอด translate()
และ trans()
จะส่งคืน null
หากไม่มีการแปล
503 Service Unavailable
: หากคุณได้รับข้อผิดพลาดนี้ เป็นไปได้มากว่า Google ได้แบนที่อยู่ IP ภายนอกของคุณ และ/หรือกำหนดให้คุณต้องแก้ไข CAPTCHA นี่ไม่ใช่จุดบกพร่องในแพ็คเกจนี้ Google มีความเข้มงวดมากขึ้น และดูเหมือนว่าพวกเขาจะลดจำนวนคำขอที่อนุญาตต่อ IP ต่อระยะเวลาหนึ่งลงเรื่อยๆ ลองส่งคำขอน้อยลงเพื่อให้ถูกตรวจจับ หรือเปลี่ยน IP ของคุณบ่อยๆ (เช่น การใช้พรอกซี) โปรดทราบว่าเมื่อมีการแบน IP แม้ว่าจะเป็นเพียงชั่วคราวก็ตาม การแบนอาจกินเวลาตั้งแต่ไม่กี่นาทีไปจนถึงมากกว่า 12-24 ชั่วโมง เนื่องจากแต่ละกรณีจะแตกต่างกัน429 Too Many Requests
: โดยพื้นฐานแล้วข้อผิดพลาดนี้เหมือนกับที่อธิบายไว้ข้างต้น413 Request Entity Too Large
การตอบสนอง: ข้อผิดพลาดนี้หมายความว่าสตริงอินพุตของคุณยาวเกินไป Google อนุญาตให้แปลได้สูงสุด 5,000 อักขระในครั้งเดียว หากคุณต้องการแปลข้อความที่ยาวขึ้น คุณสามารถแบ่งออกเป็นส่วนที่สั้นลง และแปลทีละส่วนได้403 Forbidden
: นี่ไม่ใช่ปัญหากับแพ็คเกจนี้ Google Translate เองมีปัญหาในการแปลอักขระบางตัวและเอนทิตี HTML ดู #119 (ความคิดเห็น) แพ็คเกจนี้พัฒนาขึ้นเพื่อการศึกษาเท่านั้น อย่าพึ่งพาแพ็คเกจนี้เนื่องจากอาจเสียหายได้ตลอดเวลาเนื่องจากขึ้นอยู่กับการรวบรวมข้อมูลเว็บไซต์ Google Translate พิจารณาซื้อ Google Translate API อย่างเป็นทางการสำหรับการใช้งานประเภทอื่นๆ
หากแพ็คเกจนี้ช่วยให้คุณลดเวลาในการพัฒนาบางสิ่งบางอย่างหรือแก้ไขปัญหาสำคัญ ๆ ที่คุณมี โปรดให้ฉันดื่มกาแฟสักแก้ว :)