É possível usar o kit de aprendizado de máquina para traduzir textos entre idiomas. O Kit de ML pode traduzir entre mais de 50 idiomas.
Testar
- Explore o app de amostra para ver um exemplo de uso dessa API.
Antes de começar
- No arquivo
build.gradle
no nível do projeto, inclua o repositório Maven do Google nas seçõesbuildscript
eallprojects
. - Adicione as dependências das bibliotecas Android do kit de ML ao arquivo Gradle do módulo no nível do app, que geralmente é
app/build.gradle
:dependencies { // ... implementation 'com.google.mlkit:translate:17.0.1' }
Traduzir uma string de texto
Para traduzir uma string entre dois idiomas:
Crie um objeto
Translator
, configurando-o com os idiomas de origem e de chegada: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 você não souber o idioma do texto de entrada, use a API de identificação de idioma, que fornece uma tag de idioma. Em seguida, converta a tag em
TranslateLanguage
usandoTranslateLanguage.fromLanguageTag()
.Evite manter muitos modelos de idioma no dispositivo de uma só vez.
Verifique se foi feito o download do modelo de tradução necessário para o dispositivo. Não chame
translate()
até saber que o modelo está disponível.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. // ... } }); Os modelos de idioma têm cerca de 30 MB. Portanto, não faça o download deles desnecessariamente. Faça o download deles somente por Wi-Fi, a menos que o usuário tenha especificado o contrário. Exclua também os modelos desnecessários. Consulte Gerenciar explicitamente modelos de tradução.
Depois de confirmar que o modelo foi salvo, transmita uma string de texto no idioma de origem 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. // ... } }); O texto traduzido, no idioma de destino que você configurou, é transmitido para o listener de êxito.
O método
close()
precisa ser chamado quando o objetoTranslator
não for mais usado.Se você estiver usando um tradutor em um fragmento ou uma AppCompatActivity, uma maneira fácil de fazer isso é chamar LifecycleOwner.getLifecycle() no fragmento ou AppCompatActivity e, em seguida, chamar Lifecycle.addObserver. Por exemplo:
Kotlin
val options = ... val translator = Translation.getClient(options) getLifecycle().addObserver(translator)
Java
TranslatorOptions options = ... Translator translator = Translation.getClient(options); getLifecycle().addObserver(translator); ... use translator ...
Isso pressupõe que o código esteja dentro de uma classe que implemente o LifecycleOwner (por exemplo, um fragmento ou AppCompatActivity).
Gerenciar explicitamente os modelos de tradução
Quando você usa a API Translation, conforme descrito acima, o kit de aprendizado de máquina faz o download automático de 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 quer disponibilizar no dispositivo usando a API de gerenciamento de modelos de tradução do kit de ML. Isso pode ser útil se você quiser fazer o download de modelos antecipadamente ou excluir modelos desnecessários do 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. } });