Traduza texto com o ML Kit no Android

Você pode usar o ML Kit para traduzir texto entre idiomas. Atualmente, o ML Kit oferece suporte à tradução entre 59 idiomas .

Antes de você começar

  1. Adicione o Firebase ao seu projeto Android , caso ainda não o tenha feito.
  2. Adicione as dependências das bibliotecas Android do ML Kit ao arquivo Gradle do módulo (nível do aplicativo) (geralmente app/build.gradle ):
    apply plugin: 'com.android.application'
    apply plugin
    : 'com.google.gms.google-services'

    dependencies
    {
     
    // ...

      implementation
    'com.google.firebase:firebase-ml-natural-language:22.0.0'
      implementation
    'com.google.firebase:firebase-ml-natural-language-translate-model:20.0.8'

    }

Traduzir uma sequência de texto

Para traduzir uma string entre dois idiomas:

  1. Crie um objeto FirebaseTranslator , configurando-o com os idiomas de origem e de destino:

    // Create an English-German translator:
    FirebaseTranslatorOptions options =
           
    new FirebaseTranslatorOptions.Builder()
                   
    .setSourceLanguage(FirebaseTranslateLanguage.EN)
                   
    .setTargetLanguage(FirebaseTranslateLanguage.DE)
                   
    .build();
    final FirebaseTranslator englishGermanTranslator =
           
    FirebaseNaturalLanguage.getInstance().getTranslator(options);
    // Create an English-German translator:
    val options = FirebaseTranslatorOptions.Builder()
           
    .setSourceLanguage(FirebaseTranslateLanguage.EN)
           
    .setTargetLanguage(FirebaseTranslateLanguage.DE)
           
    .build()
    val englishGermanTranslator = FirebaseNaturalLanguage.getInstance().getTranslator(options)

    Se você não souber o idioma do texto de entrada, poderá usar primeiro a API de identificação de idioma . (Mas certifique-se de não manter muitos modelos de idiomas no dispositivo ao mesmo tempo.)

  2. Certifique-se de que o modelo de tradução necessário foi baixado para o dispositivo. Não chame translate() até saber que o modelo está disponível.

    FirebaseModelDownloadConditions conditions = new FirebaseModelDownloadConditions.Builder()
       
    .requireWifi()
       
    .build();
    englishGermanTranslator
    .downloadModelIfNeeded(conditions)
         
    .addOnSuccessListener(
             
    new OnSuccessListener<Void>() {
               
    @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.
                 
    // ...
               
    }
             
    });
    englishGermanTranslator.downloadModelIfNeeded()
           
    .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.
               
    // ...
           
    }

    Os modelos de idioma têm cerca de 30 MB, portanto, não os baixe desnecessariamente e faça o download apenas usando WiFi, a menos que o usuário especifique o contrário. Você também deve excluir modelos desnecessários. Consulte Gerenciar explicitamente modelos de tradução .

  3. Depois de confirmar que o modelo foi baixado, passe uma string de texto no idioma de origem para translate() :

    englishGermanTranslator.translate(text)
         
    .addOnSuccessListener(
             
    new OnSuccessListener<String>() {
               
    @Override
               
    public void onSuccess(@NonNull String translatedText) {
                 
    // Translation successful.
               
    }
             
    })
         
    .addOnFailureListener(
             
    new OnFailureListener() {
               
    @Override
               
    public void onFailure(@NonNull Exception e) {
                 
    // Error.
                 
    // ...
               
    }
             
    });
    englishGermanTranslator.translate(text)
           
    .addOnSuccessListener { translatedText ->
               
    // Translation successful.
           
    }
           
    .addOnFailureListener { exception ->
                 
    // Error.
                 
    // ...
           
    }

    O texto traduzido, no idioma de destino configurado, é passado para o ouvinte de sucesso.

Gerencie explicitamente modelos de tradução

Quando você usa a API de tradução conforme descrito acima, o Kit de ML baixa automaticamente modelos de tradução específicos do idioma para o dispositivo, conforme necessário. Você também pode gerenciar explicitamente os modelos de tradução que deseja disponibilizar no dispositivo usando a API de gerenciamento de modelos de tradução do Kit de ML. Isso pode ser útil se você quiser baixar modelos antecipadamente ou excluir modelos desnecessários do dispositivo.

FirebaseModelManager modelManager = FirebaseModelManager.getInstance();

// Get translation models stored on the device.
modelManager
.getDownloadedModels(FirebaseTranslateRemoteModel.class)
       
.addOnSuccessListener(new OnSuccessListener<Set<FirebaseTranslateRemoteModel>>() {
           
@Override
           
public void onSuccess(Set<FirebaseTranslateRemoteModel> models) {
               
// ...
           
}
       
})
       
.addOnFailureListener(new OnFailureListener() {
           
@Override
           
public void onFailure(@NonNull Exception e) {
               
// Error.
           
}
       
});

// Delete the German model if it's on the device.
FirebaseTranslateRemoteModel deModel =
       
new FirebaseTranslateRemoteModel.Builder(FirebaseTranslateLanguage.DE).build();
modelManager
.deleteDownloadedModel(deModel)
       
.addOnSuccessListener(new OnSuccessListener<Void>() {
           
@Override
           
public void onSuccess(Void v) {
               
// Model deleted.
           
}
       
})
       
.addOnFailureListener(new OnFailureListener() {
           
@Override
           
public void onFailure(@NonNull Exception e) {
               
// Error.
           
}
       
});

// Download the French model.
FirebaseTranslateRemoteModel frModel =
       
new FirebaseTranslateRemoteModel.Builder(FirebaseTranslateLanguage.FR).build();
FirebaseModelDownloadConditions conditions = new FirebaseModelDownloadConditions.Builder()
       
.requireWifi()
       
.build();
modelManager
.download(frModel, conditions)
       
.addOnSuccessListener(new OnSuccessListener<Void>() {
           
@Override
           
public void onSuccess(Void v) {
               
// Model downloaded.
           
}
       
})
       
.addOnFailureListener(new OnFailureListener() {
           
@Override
           
public void onFailure(@NonNull Exception e) {
               
// Error.
           
}
       
});
val modelManager = FirebaseModelManager.getInstance()

// Get translation models stored on the device.
modelManager
.getDownloadedModels(FirebaseTranslateRemoteModel::class.java)
   
.addOnSuccessListener { models ->
       
// ...
   
}
   
.addOnFailureListener {
       
// Error.
   
}

// Delete the German model if it's on the device.
val deModel = FirebaseTranslateRemoteModel.Builder(FirebaseTranslateLanguage.DE).build()
modelManager
.deleteDownloadedModel(deModel)
   
.addOnSuccessListener {
       
// Model deleted.
   
}
   
.addOnFailureListener {
       
// Error.
   
}

// Download the French model.
val frModel = FirebaseTranslateRemoteModel.Builder(FirebaseTranslateLanguage.FR).build()
val conditions = FirebaseModelDownloadConditions.Builder()
   
.requireWifi()
   
.build()
modelManager
.download(frModel, conditions)
   
.addOnSuccessListener {
       
// Model downloaded.
   
}
   
.addOnFailureListener {
       
// Error.
   
}