คุณใช้ 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.2' }
แปลข้อความ
วิธีแปลสตริงระหว่าง 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)
จัดการโมเดลการแปลอย่างชัดแจ้ง
เมื่อคุณใช้ Translation 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. } });