Puoi utilizzare ML Kit per tradurre il testo tra le lingue. ML Kit può tradurre tra più di 50 lingue.
Prova
- Prova l'app di esempio per vedere un esempio di utilizzo di questa API.
Prima di iniziare
- Nel file build.gradlea livello di progetto, assicurati di includere il repository Maven di Google nelle sezionibuildscripteallprojects.
- Aggiungi le dipendenze per le librerie Android ML Kit al file Gradle a livello di app del modulo, che di solito è app/build.gradle:dependencies { // ... implementation 'com.google.mlkit:translate:17.0.3' } 
Tradurre una stringa di testo
Per tradurre una stringa tra due lingue:
- Crea un oggetto - Translator, configurandolo con le lingue di origine e di destinazione:- 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); - Se non conosci la lingua del testo di input, puoi utilizzare l'API Language Identification, che fornisce un tag di lingua. Poi converti il tag in un - TranslateLanguageutilizzando- TranslateLanguage.fromLanguageTag().- Evita di conservare troppi modelli linguistici sul dispositivo contemporaneamente. 
- Assicurati che il modello di traduzione richiesto sia stato scaricato sul dispositivo. Non chiamare - translate()finché non sai che il modello è disponibile.- 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. // ... } }); - I modelli linguistici occupano circa 30 MB, quindi non scaricarli inutilmente e scaricali solo tramite Wi-Fi, a meno che l'utente non abbia specificato diversamente. Devi anche eliminare i modelli che non ti servono. Consulta Gestire esplicitamente i modelli di traduzione. 
- Dopo aver confermato il download del modello, passa una stringa di testo nella lingua di origine a - 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. // ... } }); - Il testo tradotto, nella lingua di destinazione che hai configurato, viene passato al listener di successo. 
- Assicurati che il metodo - close()venga chiamato quando l'oggetto- Translatornon verrà più utilizzato.- Se utilizzi un traduttore in un frammento o in AppCompatActivity, un modo semplice per farlo è chiamare LifecycleOwner.getLifecycle() nel frammento o in AppCompatActivity, quindi chiamare Lifecycle.addObserver. Ad esempio: - Kotlin- val options = ... val translator = Translation.getClient(options) getLifecycle().addObserver(translator) - Java- TranslatorOptions options = ... Translator translator = Translation.getClient(options); getLifecycle().addObserver(translator); ... use translator ... - Tieni presente che questo presuppone che il codice si trovi all'interno di una classe che implementa LifecycleOwner (ad es. un fragment o AppCompatActivity). 
Gestire esplicitamente i modelli di traduzione
Quando utilizzi l'API Translation come descritto sopra, ML Kit scarica automaticamente i modelli di traduzione specifici della lingua sul dispositivo in base alle necessità. Puoi anche gestire esplicitamente i modelli di traduzione che vuoi siano disponibili sul dispositivo utilizzando l'API di gestione dei modelli di traduzione di ML Kit. Questa opzione può essere utile se vuoi scaricare i modelli in anticipo o eliminare quelli non necessari dal dispositivo.
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. } }); 
