Vous pouvez utiliser ML Kit pour traduire du texte entre différentes langues. ML Kit est actuellement compatible avec la traduction entre 59 langues.
Avant de commencer
- Si ce n'est pas encore fait, ajoutez Firebase à votre projet Android.
- Ajoutez les dépendances des bibliothèques Android ML Kit au fichier Gradle de votre module (au niveau de l'application) (généralement
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' }
Traduire une chaîne de texte
Pour traduire une chaîne entre deux langues:
Créez un objet
FirebaseTranslator
, en le configurant avec les langues source et cible: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
// Create an English-German translator: val options = FirebaseTranslatorOptions.Builder() .setSourceLanguage(FirebaseTranslateLanguage.EN) .setTargetLanguage(FirebaseTranslateLanguage.DE) .build() val englishGermanTranslator = FirebaseNaturalLanguage.getInstance().getTranslator(options)
Si vous ne connaissez pas la langue du texte saisi, vous pouvez d'abord utiliser l'API d'identification de la langue. (mais veillez à ne pas 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 pas
translate()
tant que vous n'êtes pas sûr que le modèle 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
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. // ... }
Les modèles de langage font environ 30 Mo. Ne les téléchargez donc pas inutilement et ne les téléchargez que via le Wi-Fi, sauf si l'utilisateur a spécifié le contraire. Vous devez également supprimer les modèles inutiles. Consultez Gérer explicitement les modèles de traduction.
Une fois que vous avez vérifié que le modèle a été téléchargé, transmettez une chaîne de texte dans la langue source à
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
englishGermanTranslator.translate(text) .addOnSuccessListener { translatedText -> // Translation successful. } .addOnFailureListener { exception -> // Error. // ... }
Le texte traduit, dans la langue cible que vous avez configurée, est transmis à l'écouteur de succès.
Gérer explicitement les modèles de traduction
Lorsque vous utilisez l'API de traduction comme décrit ci-dessus, ML Kit télécharge automatiquement des modèles de traduction spécifiques à la langue sur l'appareil, si nécessaire. Vous pouvez également gérer explicitement les modèles de traduction que vous souhaitez mettre à disposition sur l'appareil à l'aide de l'API de gestion des modèles de traduction de ML Kit. Cela peut être utile si vous souhaitez télécharger des modèles à l'avance ou supprimer des modèles inutiles de l'appareil.
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
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.
}