Bạn có thể dùng Bộ công cụ học máy để dịch văn bản giữa các ngôn ngữ. Bộ công cụ học máy có thể chuyển đổi giữa nhiều hơn 50 ngôn ngữ.
Dùng thử
- Dùng thử ứng dụng mẫu để xem ví dụ về cách sử dụng API này.
Trước khi bắt đầu
- Trong tệp
build.gradle
cấp dự án, hãy nhớ đưa vào Kho lưu trữ Maven của Google trong cảbuildscript
vàallprojects
mục. - Thêm các phần phụ thuộc cho thư viện Android Bộ công cụ học máy vào mô-đun của bạn
tệp gradle cấp ứng dụng, thường là
app/build.gradle
:dependencies { // ... implementation 'com.google.mlkit:translate:17.0.3' }
Dịch một chuỗi văn bản
Cách dịch chuỗi văn bản giữa hai ngôn ngữ:
Tạo một
Translator
định cấu hình đối tượng bằng ngôn ngữ nguồn và ngôn ngữ đích: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);
Nếu không biết ngôn ngữ của văn bản nhập, bạn có thể sử dụng Ngôn ngữ Nhận dạng API cho bạn một thẻ ngôn ngữ. Sau đó, hãy chuyển đổi thẻ thành
TranslateLanguage
sử dụngTranslateLanguage.fromLanguageTag()
.Tránh lưu giữ quá nhiều mẫu ngôn ngữ trên thiết bị cùng một lúc.
Đảm bảo bạn đã tải mô hình dịch bắt buộc xuống thiết bị. Không gọi
translate()
cho đến khi bạn biết mô hình có sẵn.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. // ... } }); Mô hình ngôn ngữ khoảng 30MB nên đừng tải xuống những mô hình này khi không cần thiết và chỉ tải chúng xuống qua Wi-Fi trừ phi người dùng đã chỉ định khác. Bạn cũng nên xoá các mô hình không cần thiết. Xem bài viết Quản lý rõ ràng các mô hình dịch.
Sau khi bạn xác nhận mô hình đã được tải xuống, hãy truyền một chuỗi văn bản vào ngôn ngữ gốc để
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. // ... } }); Văn bản được dịch (bằng ngôn ngữ đích mà bạn đã định cấu hình) sẽ được chuyển đến trình nghe thành công.
Đảm bảo rằng
close()
được gọi khiTranslator
thì đối tượng sẽ không được sử dụng nữa.Nếu bạn đang sử dụng Trình biên dịch trong một Mảnh hoặc AppCompatActivity, một thao tác đơn giản hãy gọi LifecycleOwner.getLifecycle() trên Fragment hoặc AppCompatActivity, sau đó gọi Lifecycle.addObserver. Ví dụ:
Kotlin
val options = ... val translator = Translation.getClient(options) getLifecycle().addObserver(translator)
Java
TranslatorOptions options = ... Translator translator = Translation.getClient(options); getLifecycle().addObserver(translator); ... use translator ...
Hãy lưu ý rằng phương thức này giả định rằng mã nằm trong một lớp triển khai LifecycleOwner (ví dụ: Fragment hoặc AppCompatActivity).
Quản lý các mô hình dịch một cách rõ ràng
Khi bạn sử dụng API dịch như mô tả ở trên, Bộ công cụ học máy sẽ tự động tải các mô hình dịch theo ngôn ngữ cụ thể xuống thiết bị theo yêu cầu. Bạn cũng có thể quản lý rõ ràng các mô hình dịch bạn muốn có sẵn trên bằng cách sử dụng API quản lý mô hình dịch của Bộ công cụ học máy. Thông tin này có thể là hữu ích nếu bạn muốn tải trước các mô hình hoặc xoá các mô hình không cần thiết khỏi thiết bị.
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. } });