Puedes usar el Kit de AA para traducir texto entre idiomas. Actualmente, el kit admite la traducción entre 59 idiomas.
Antes de comenzar
- Si aún no lo hiciste, agrega Firebase a tu proyecto de Android.
- Agrega las dependencias para las bibliotecas de Android del ML Kit al archivo Gradle
(generalmente
app/build.gradle
) de tu módulo (nivel de app):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' }
Traduce una string de texto
Sigue estos pasos para traducir una string entre dos idiomas:
Crea un objeto de
FirebaseTranslator
y configúralo con los idiomas de origen y de destino:Java
// Create an English-German translator: FirebaseTranslatorOptions options = new FirebaseTranslatorOptions.Builder() .setSourceLanguage(FirebaseTranslateLanguage.EN) .setTargetLanguage(FirebaseTranslateLanguage.DE) .build(); final FirebaseTranslator englishGermanTranslator = FirebaseNaturalLanguage.getInstance().getTranslator(options);
Kotlin+KTX
// Create an English-German translator: val options = FirebaseTranslatorOptions.Builder() .setSourceLanguage(FirebaseTranslateLanguage.EN) .setTargetLanguage(FirebaseTranslateLanguage.DE) .build() val englishGermanTranslator = FirebaseNaturalLanguage.getInstance().getTranslator(options)
Si no sabes el idioma del texto de entrada, puedes usar la API de identificación de idioma en primer lugar. Confirma que no tienes en el dispositivo demasiados modelos de idioma a la vez.
Asegúrate de que el modelo de traducción requerido se haya descargado en el dispositivo. No llames a
translate()
hasta que sepas que el modelo está disponible.Java
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. // ... } });
Kotlin+KTX
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. // ... }
Los modelos de idioma rondan los 30 MB, así que no los descargues innecesariamente, y solo hazlo usando Wi‑Fi, a menos que el usuario haya especificado lo contrario. También debes borrar los modelos innecesarios. Consulta Administra explícitamente los modelos de traducción.
Después de confirmar que el modelo se descargó, pasa una string de texto en el idioma de origen a
translate()
:Java
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. // ... } });
Kotlin+KTX
englishGermanTranslator.translate(text) .addOnSuccessListener { translatedText -> // Translation successful. } .addOnFailureListener { exception -> // Error. // ... }
El texto traducido, en el idioma de destino que configuraste, se pasa al objeto de escucha que detecta el resultado correcto.
Administra explícitamente los modelos de traducción
Cuando utilizas la API de traducción como se describe anteriormente, el Kit de AA descarga automáticamente los modelos de traducción específicos del idioma al dispositivo, según sea necesario. También puedes administrar de forma explícita los modelos de traducción que deseas que estén disponibles en el dispositivo con la API de administración de modelos de traducción del Kit de AA. Esto puede ser útil si deseas descargar modelos con anticipación o borrar modelos innecesarios del dispositivo.
Java
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.
}
});
Kotlin+KTX
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.
}