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