คุณใช้ ML Kit เพื่อแปลข้อความระหว่างภาษาได้ ML Kit สามารถแปลได้มากกว่า 50 ภาษา
ลองเลย
- ลองใช้แอปตัวอย่างเพื่อดูตัวอย่างการใช้งาน API นี้
ข้อควรปฏิบัติก่อนที่จะเริ่มต้น
- ในไฟล์
build.gradle
ระดับโปรเจ็กต์ อย่าลืมรวมที่เก็บ Maven ของ Google ทั้งในbuildscript
และส่วนallprojects
- เพิ่มทรัพยากร Dependency สําหรับไลบรารี Android ของ ML Kit ไปยังไฟล์ Gradle ระดับโมดูลของโมดูลดังกล่าว ซึ่งโดยปกติจะเป็น
app/build.gradle
:dependencies { // ... implementation 'com.google.mlkit:translate:17.0.1' }
แปลสตริงข้อความ
หากต้องการแปลสตริงระหว่าง 2 ภาษา ให้ทําดังนี้
สร้างออบเจ็กต์
Translator
โดยกําหนดค่าด้วยภาษาต้นฉบับและภาษาเป้าหมาย ดังนี้Kotlin
// Create an English-German translator: val options = TranslatorOptions.Builder() .setSourceLanguage(TranslateLanguage.ENGLISH) .setTargetLanguage(TranslateLanguage.GERMAN) .build() val englishGermanTranslator = Translation.getClient(options)
Java
// Create an English-German translator: TranslatorOptions options = new TranslatorOptions.Builder() .setSourceLanguage(TranslateLanguage.ENGLISH) .setTargetLanguage(TranslateLanguage.GERMAN) .build(); final Translator englishGermanTranslator = Translation.getClient(options);
หากไม่ทราบภาษาของข้อความอินพุต คุณสามารถใช้ Language Identification API ซึ่งจะให้แท็กภาษาแก่คุณ จากนั้นแปลงแท็กเป็น
TranslateLanguage
โดยใช้TranslateLanguage.fromLanguageTag()
หลีกเลี่ยงการเก็บรูปแบบภาษาในอุปกรณ์ไว้พร้อมกันเป็นจํานวนมากเกินไป
ตรวจสอบว่าได้ดาวน์โหลดโมเดลการแปลที่จําเป็นลงในอุปกรณ์แล้ว โปรดอย่าโทรหา
translate()
จนกว่าจะทราบว่ามีโมเดลที่ใช้ได้Kotlin
var conditions = DownloadConditions.Builder() .requireWifi() .build() englishGermanTranslator.downloadModelIfNeeded(conditions) .addOnSuccessListener { // Model downloaded successfully. Okay to start translating. // (Set a flag, unhide the translation UI, etc.) } .addOnFailureListener { exception -> // Model couldn’t be downloaded or other internal error. // ... }
Java
DownloadConditions conditions = new DownloadConditions.Builder() .requireWifi() .build(); englishGermanTranslator.downloadModelIfNeeded(conditions) .addOnSuccessListener( new OnSuccessListener
() { @Override public void onSuccess(Void v) { // Model downloaded successfully. Okay to start translating. // (Set a flag, unhide the translation UI, etc.) } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Model couldn’t be downloaded or other internal error. // ... } }); โมเดลภาษามีขนาดประมาณ 30 MB ดังนั้นอย่าดาวน์โหลดโมเดลเหล่านี้โดยไม่จําเป็น และจะดาวน์โหลดผ่าน Wi-Fi เท่านั้น เว้นแต่ผู้ใช้ได้ระบุไว้เป็นอย่างอื่น คุณควรลบโมเดลที่ไม่จําเป็นออกด้วย โปรดดูที่หัวข้อจัดการโมเดลการแปลอย่างชัดแจ้ง
หลังจากยืนยันว่าดาวน์โหลดโมเดลแล้ว ให้ส่งสตริงข้อความในภาษาต้นฉบับไปยัง
translate()
ดังนี้Kotlin
englishGermanTranslator.translate(text) .addOnSuccessListener { translatedText -> // Translation successful. } .addOnFailureListener { exception -> // Error. // ... }
Java
englishGermanTranslator.translate(text) .addOnSuccessListener( new OnSuccessListener
() { @Override public void onSuccess(@NonNull String translatedText) { // Translation successful. } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Error. // ... } }); ข้อความที่แปลแล้วในภาษาเป้าหมายที่คุณกําหนดค่าไว้จะส่งไปยังผู้ฟังสําเร็จ
ตรวจสอบว่ามีการเรียกใช้เมธอด
close()
เมื่อไม่มีการใช้ออบเจ็กต์Translator
อีกต่อไปหากคุณใช้เครื่องมือแปลใน Fragment หรือ AppCompatActivity วิธีหนึ่งที่ทําได้ง่ายคือการเรียก LifecycleOwner.getLifecycle() บน Fragment หรือ AppCompatActivity จากนั้นเรียกใช้ Lifecycle.addObserver เช่น
Kotlin
val options = ... val translator = Translation.getClient(options) getLifecycle().addObserver(translator)
Java
TranslatorOptions options = ... Translator translator = Translation.getClient(options); getLifecycle().addObserver(translator); ... use translator ...
โปรดทราบว่าโค้ดนี้ถือว่าโค้ดอยู่ภายในคลาสที่ติดตั้งใช้งาน LifecycleOwner (เช่น Fragment หรือ AppCompatActivity)
จัดการโมเดลการแปลอย่างชัดแจ้ง
เมื่อคุณใช้ API การแปลตามที่อธิบายข้างต้น ML Kit จะดาวน์โหลดโมเดลการแปลเฉพาะภาษาโดยอัตโนมัติไปยังอุปกรณ์ตามที่จําเป็น นอกจากนี้ คุณยังจัดการโมเดลการแปลที่คุณต้องการให้มีในอุปกรณ์อย่างชัดแจ้งได้โดยใช้ API การจัดการโมเดลการแปลของ ML Kit การดําเนินการนี้จะเป็นประโยชน์ในกรณีที่คุณต้องการดาวน์โหลดโมเดลล่วงหน้า หรือลบโมเดลที่ไม่จําเป็นออกจากอุปกรณ์
Kotlin
val modelManager = RemoteModelManager.getInstance() // Get translation models stored on the device. modelManager.getDownloadedModels(TranslateRemoteModel::class.java) .addOnSuccessListener { models -> // ... } .addOnFailureListener { // Error. } // Delete the German model if it's on the device. val germanModel = TranslateRemoteModel.Builder(TranslateLanguage.GERMAN).build() modelManager.deleteDownloadedModel(germanModel) .addOnSuccessListener { // Model deleted. } .addOnFailureListener { // Error. } // Download the French model. val frenchModel = TranslateRemoteModel.Builder(TranslateLanguage.FRENCH).build() val conditions = DownloadConditions.Builder() .requireWifi() .build() modelManager.download(frenchModel, conditions) .addOnSuccessListener { // Model downloaded. } .addOnFailureListener { // Error. }
Java
RemoteModelManager modelManager = RemoteModelManager.getInstance(); // Get translation models stored on the device. modelManager.getDownloadedModels(TranslateRemoteModel.class) .addOnSuccessListener(new OnSuccessListener>() { @Override public void onSuccess(Set models) { // ... } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Error. } }); // Delete the German model if it's on the device. TranslateRemoteModel germanModel = new TranslateRemoteModel.Builder(TranslateLanguage.GERMAN).build(); modelManager.deleteDownloadedModel(germanModel) .addOnSuccessListener(new OnSuccessListener () { @Override public void onSuccess(Void v) { // Model deleted. } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Error. } }); // Download the French model. TranslateRemoteModel frenchModel = new TranslateRemoteModel.Builder(TranslateLanguage.FRENCH).build(); DownloadConditions conditions = new DownloadConditions.Builder() .requireWifi() .build(); modelManager.download(frenchModel, conditions) .addOnSuccessListener(new OnSuccessListener () { @Override public void onSuccess(Void v) { // Model downloaded. } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Error. } });