אתם יכולים להשתמש ב-ML Kit כדי לתרגם טקסט בין שפות. ב-ML Kit אפשר לתרגם בין יותר מ-50 שפות.
רוצה לנסות?
- כדאי לנסות את האפליקציה לדוגמה כדי לראות דוגמה לשימוש ב-API הזה.
לפני שמתחילים
- בקובץ
build.gradle
ברמת הפרויקט, חשוב לכלול את מאגר Maven של Google גם בקטעbuildscript
וגם בקטעallprojects
. - מוסיפים את יחסי התלות של ספריות ML Kit ל-Android לקובץ ה-Gradle ברמת האפליקציה של המודול, שבדרך כלל הוא
app/build.gradle
:dependencies { // ... implementation 'com.google.mlkit:translate:17.0.3' }
תרגום מחרוזת טקסט
כדי לתרגם מחרוזת בין שתי שפות:
יוצרים אובייקט
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. // ... } }); מודלים בסיסיים של שפה הם בגודל של כ-30MB, לכן אין להוריד אותם ללא צורך, ואפשר להוריד אותם רק באמצעות חיבור 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
.אם אתם משתמשים ב-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. } });