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
- Adicione o Firebase ao seu projeto Android , caso ainda não o tenha feito.
- 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:
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.)
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 .
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.
}