Puoi utilizzare ML Kit per tradurre il testo da una lingua all'altra. Kit ML può tradurre tra più di 50 lingue.
Prova
- Prova l'app di esempio per per vedere un esempio di utilizzo di questa API.
Prima di iniziare
- Nel file
build.gradle
a livello di progetto, assicurati di includere Repository Maven di Google inbuildscript
eallprojects
sezioni. - Aggiungi le dipendenze per le librerie Android ML Kit agli
file gradle a livello di app, che in genere è
app/build.gradle
:dependencies { // ... implementation 'com.google.mlkit:translate:17.0.3' }
Traduci una stringa di testo
Per tradurre una stringa tra due lingue:
Crea un
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 lo strumento Lingua API di identificazione, fornisce un tag lingua. Quindi converti il tag in un
TranslateLanguage
utilizzandoTranslateLanguage.fromLanguageTag()
.Evita di conservare sul dispositivo troppi modelli linguistici contemporaneamente.
Assicurati che il modello di traduzione richiesto sia stato scaricato sul dispositivo. Non chiamare
translate()
finché non hai la certezza 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 hanno una dimensione di circa 30 MB, quindi cerca di non scaricarli inutilmente e scaricarle solo tramite Wi-Fi, a meno che l'utente non abbia specificato diversamente. Tu dovrebbe anche eliminare i modelli non necessari. Consulta Gestire in modo esplicito i modelli di traduzione.
Dopo aver confermato che il modello è stato scaricato, passa una stringa di testo la lingua di origine
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 configurata, viene trasmesso alla ascoltatori di successo.
Assicurati che la proprietà
close()
viene chiamato quandoTranslator
non verrà più usato.Se stai usando un Traduttore in un Fragment o AppCompatActivity, per farlo è chiamare LifecycleOwner.getLifecycle() sul Fragment o AppCompatActivity e quindi chiama 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. Fragment o AppCompatActivity).
Gestisci in modo esplicito i modelli di traduzione
Quando utilizzi l'API di traduzione come descritto in precedenza, ML Kit esegue automaticamente scarica modelli di traduzione specifici della lingua sul dispositivo, se necessario. Tu gestire in modo esplicito i modelli di traduzione che vuoi rendere disponibili tramite l'API di gestione del modello di traduzione di ML Kit. 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>() { @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. } });