Puedes usar ML Kit para traducir texto entre idiomas. Kit de AA puede traducir entre más de 50 idiomas.
Probar
- Prueba la app de ejemplo para ver un ejemplo de uso de esta API.
Antes de comenzar
- En tu archivo
build.gradle
de nivel de proyecto, asegúrate de incluir lo siguiente: Puedes acceder al repositorio Maven de Google en tubuildscript
yallprojects
. - Agrega las dependencias para las bibliotecas de Android del ML Kit al archivo
archivo de Gradle a nivel de la app, que suele ser
app/build.gradle
:dependencies { // ... implementation 'com.google.mlkit:translate:17.0.3' }
Traduce una cadena de texto
Para traducir una cadena entre dos idiomas:
Crea un
Translator
y configúralo con los idiomas fuente y objetivo: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);
Si no sabes el idioma del texto de entrada, puedes usar la opción Idioma Identification API, que te da una etiqueta de idioma. Luego, convierte la etiqueta en
TranslateLanguage
. conTranslateLanguage.fromLanguageTag()
.Evita tener demasiados modelos de idioma en el dispositivo 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.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. // ... } }); Los modelos de lenguaje pesan alrededor de 30 MB, así que no los descargues innecesariamente. Solo puedes descargarlos mediante Wi-Fi, a menos que el usuario haya especificado lo contrario. Tú también debería borrar los modelos innecesarios. Consulta Administra explícitamente los modelos de traducción.
Después de confirmar que el modelo se descargó, pasa una cadena de texto en el idioma de origen para
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. // ... } }); El texto traducido, en el idioma de destino que configuraste, se pasa al receptor de éxito.
Asegúrate de que el elemento
close()
se llama a este método cuandoTranslator
ya no se usará ese objeto.Si usas un traductor en un fragmento o AppCompatActivity, es muy fácil es llamar a LifecycleOwner.getLifecycle(). en Fragment o AppCompatActivity y, luego, llama a Lifecycle.addObserver. Por ejemplo:
Kotlin
val options = ... val translator = Translation.getClient(options) getLifecycle().addObserver(translator)
Java
TranslatorOptions options = ... Translator translator = Translation.getClient(options); getLifecycle().addObserver(translator); ... use translator ...
Ten en cuenta que esto supone que el código está dentro de una clase que implementa LifecycleOwner (p.ej., un Fragment o AppCompatActivity).
Administra explícitamente los modelos de traducción
Cuando usas la API de Translation como se describió anteriormente, el Kit de AA descarga modelos de traducción específicos de cada idioma al dispositivo según sea necesario. Tú puede administrar de forma explícita los modelos de traducción que quieres que estén disponibles en la con la API de administración de modelos de traducción del ML Kit. Puede ser útil si deseas descargar modelos con anticipación o borrar modelos innecesarios del 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. } });