คุณใช้ ML Kit เพื่อแปลข้อความระหว่างภาษาต่างๆ ได้ ML Kit สามารถแปลภาษาระหว่างภาษาต่างๆ ได้มากกว่า 50 ภาษา
ลองเลย
- ลองใช้แอปตัวอย่างเพื่อดูตัวอย่างการใช้งาน API นี้
ก่อนเริ่มต้น
- ในไฟล์
build.gradleระดับโปรเจ็กต์ ให้ตรวจสอบว่าได้รวมที่เก็บ Maven ของ Google ไว้ในทั้งส่วนbuildscriptและallprojects - เพิ่มทรัพยากร Dependency สำหรับไลบรารี Android ของ ML Kit ลงในไฟล์ Gradle ระดับแอปของโมดูล ซึ่งโดยปกติจะเป็น
app/build.gradledependencies { // ... implementation 'com.google.mlkit:translate:17.0.3' }
แปลสตริงข้อความ
วิธีแปลสตริงระหว่าง 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. // ... } }); ระบบจะส่งข้อความที่แปลแล้วในภาษาเป้าหมายที่คุณกำหนดค่าไว้ไปยัง Listener ที่สำเร็จ
ตรวจสอบว่ามีการเรียกใช้เมธอด
close()เมื่อไม่มีการใช้ออบเจ็กต์Translatorอีกต่อไปหากคุณใช้ 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<Set>() { @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. } });