Vous pouvez utiliser ML Kit pour traduire du texte d'une langue à une autre. ML Kit peut traduire entre plus de 50 langues.
Essayer
- Testez l'application exemple pour : consultez un exemple d'utilisation de cette API.
Avant de commencer
- Dans le fichier
build.gradle
au niveau du projet, veillez à inclure dépôt Maven de Google dans vos fichiersbuildscript
etallprojects
. - Ajoutez les dépendances des bibliothèques Android ML Kit au fichier
fichier Gradle au niveau de l'application, généralement
app/build.gradle
:dependencies { // ... implementation 'com.google.mlkit:translate:17.0.3' }
Traduire une chaîne de texte
Pour traduire une chaîne dans deux langues:
Créez un
Translator
en le configurant avec les langues source et cible: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 vous ne connaissez pas la langue du texte d'entrée, vous pouvez utiliser la fonction Langue l'API Identification, vous attribue un tag de langue. Convertissez ensuite la balise en
TranslateLanguage
avecTranslateLanguage.fromLanguageTag()
.Évitez de conserver trop de modèles de langage sur l'appareil en même temps.
Assurez-vous que le modèle de traduction requis a été téléchargé sur l'appareil. N'appelez
translate()
que lorsque vous savez que le modèle 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. // ... } }); La taille des modèles de langage est d'environ 30 Mo. Évitez donc de les télécharger inutilement. téléchargez-les uniquement via le Wi-Fi, sauf indication contraire de l'utilisateur. Toi supprimer les modèles inutiles. Consultez Gérer explicitement les modèles de traduction.
Après avoir vérifié que le modèle a été téléchargé, transmettez une chaîne de texte la langue source vers
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. // ... } }); Le texte traduit, dans la langue cible que vous avez configurée, est transmis à la écouteur de réussite.
Assurez-vous que
close()
est appelée lorsque la méthodeTranslator
ne sera plus utilisé.Si vous utilisez un traducteur dans un fragment ou AppCompatActivity, il est facile Pour ce faire, appelez LifecycleOwner.getLifecycle() sur le Fragment ou AppCompatActivity, puis appelez Lifecycle.addObserver. Exemple :
Kotlin
val options = ... val translator = Translation.getClient(options) getLifecycle().addObserver(translator)
Java
TranslatorOptions options = ... Translator translator = Translation.getClient(options); getLifecycle().addObserver(translator); ... use translator ...
Notez que cela suppose que le code se trouve dans une classe qui implémente LifecycleOwner (par exemple, un fragment ou une activité AppCompatActivity)
Gérer explicitement les modèles de traduction
Lorsque vous utilisez l'API Translation comme décrit ci-dessus, ML Kit s'exécute automatiquement télécharge des modèles de traduction spécifiques à la langue sur l'appareil si nécessaire. Toi vous pouvez également gérer explicitement les modèles de traduction que vous souhaitez à l'aide de l'API de gestion des modèles de traduction de ML Kit. Il peut s'agir utile si vous souhaitez télécharger des modèles à l'avance ou supprimer des modèles inutiles de l'appareil.
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. } });