你可以使用 ML Kit 翻譯不同語言的文字。機器學習套件 目前支援 59 種語言。
事前準備
- 如果尚未將 Firebase 加入應用程式,請按照下列步驟操作: 入門指南中的步驟。
- 在 Podfile 中加入 ML Kit 程式庫:
  pod 'Firebase/MLNLTranslate', '6.25.0' .xcworkspace。
- 在應用程式中匯入 Firebase:
  Swiftimport Firebase Objective-C@import Firebase; 
翻譯一段文字
如何在兩種語言之間翻譯字串:
- 建立 - Translator物件,並使用來源和目標設定該物件 語言:- Swift- // Create an English-German translator: let options = TranslatorOptions(sourceLanguage: .en, targetLanguage: .de) let englishGermanTranslator = NaturalLanguage.naturalLanguage().translator(options: options)- Objective-C- // Create an English-German translator: FIRTranslatorOptions *options = [[FIRTranslatorOptions alloc] initWithSourceLanguage:FIRTranslateLanguageEN targetLanguage:FIRTranslateLanguageDE]; FIRTranslator *englishGermanTranslator = [[FIRNaturalLanguage naturalLanguage] translatorWithOptions:options];- 如果您不知道輸入文字的語言,可以使用 識別資訊 API。(但別忘了 而不是同時在裝置上保留太多語言模型)。 
- 確認所需翻譯模型已下載到裝置。 確認模型可用前,請勿呼叫 - translate(_:completion:)。- Swift- let conditions = ModelDownloadConditions( allowsCellularAccess: false, allowsBackgroundDownloading: true ) englishGermanTranslator.downloadModelIfNeeded(with: conditions) { error in guard error == nil else { return } // Model downloaded successfully. Okay to start translating. }- Objective-C- FIRModelDownloadConditions *conditions = [[FIRModelDownloadConditions alloc] initWithAllowsCellularAccess:NO allowsBackgroundDownloading:YES]; [englishGermanTranslator downloadModelIfNeededWithConditions:conditions completion:^(NSError *_Nullable error) { if (error != nil) { return; } // Model downloaded successfully. Okay to start translating. }];- 語言模型大約有 30 MB 的空間,因此不需要下載 除非使用者另有指定,否則只能透過 Wi-Fi 下載下載。個人中心 並刪除不需要的模型 請參閱「明確管理翻譯模型」。 
- 確認下載模型後,請在 將原文語言轉換為 - translate(_:completion:):- Swift- englishGermanTranslator.translate(text) { translatedText, error in guard error == nil, let translatedText = translatedText else { return } // Translation succeeded. }- Objective-C- [englishGermanTranslator translateText:text completion:^(NSString *_Nullable translatedText, NSError *_Nullable error) { if (error != nil || translatedText == nil) { return; } // Translation succeeded. }];- ML Kit 會將文字翻譯成您設定的目標語言 將翻譯的文字傳遞至完成處理常式。 
明確管理翻譯模型
按照上述方式使用翻譯 API 時,ML Kit 會自動使用 視需要下載特定語言專屬的翻譯模型至裝置。個人中心 也可以明確管理 整合了 ML Kit 的翻譯模型管理 API可用的值包括 舉例來說,如果您想事先下載模型,或是刪除不需要的模型 登入裝置。
如要取得儲存在裝置上的翻譯模型:
Swift
let localModels = ModelManager.modelManager().downloadedTranslateModels
Objective-C
NSSet<FIRTranslateRemoteModel *> *localModels =
    [FIRModelManager modelManager].downloadedTranslateModels;
如要刪除模型:
Swift
// Delete the German model if it's on the device.
let deModel = TranslateRemoteModel.translateRemoteModel(language: .de)
ModelManager.modelManager().deleteDownloadedModel(deModel) { error in
    guard error == nil else { return }
    // Model deleted.
}
Objective-C
// Delete the German model if it's on the device.
FIRTranslateRemoteModel *deModel =
    [FIRTranslateRemoteModel translateRemoteModelWithLanguage:FIRTranslateLanguageDE];
[[FIRModelManager modelManager] deleteDownloadedModel:deModel
                                           completion:^(NSError * _Nullable error) {
                                               if (error != nil) {
                                                   return;
                                               }
                                               // Model deleted.
                                           }];
如何下載模型:
Swift
// Download the French model.
let frModel = TranslateRemoteModel.translateRemoteModel(language: .fr)
// Keep a reference to the download progress so you can check that the model
// is available before you use it.
progress = ModelManager.modelManager().download(
    frModel,
    conditions: ModelDownloadConditions(
        allowsCellularAccess: false,
        allowsBackgroundDownloading: true
    )
)
如要向「NotificationCenter」取得下載狀態,請註冊
firebaseMLModelDownloadDidSucceed 和
firebaseMLModelDownloadDidFail。請務必對「self」使用較弱的參照
,因為下載可能需要一些時間,而且
物件即可釋出。例如:
NotificationCenter.default.addObserver(
    forName: .firebaseMLModelDownloadDidSucceed,
    object: nil,
    queue: nil
) { [weak self] notification in
    guard let strongSelf = self,
        let userInfo = notification.userInfo,
        let model = userInfo[ModelDownloadUserInfoKey.remoteModel.rawValue]
            as? TranslateRemoteModel,
        model == frModel
        else { return }
    // The model was downloaded and is available on the device
}
NotificationCenter.default.addObserver(
    forName: .firebaseMLModelDownloadDidFail,
    object: nil,
    queue: nil
) { [weak self] notification in
    guard let strongSelf = self,
        let userInfo = notification.userInfo,
        let model = userInfo[ModelDownloadUserInfoKey.remoteModel.rawValue]
            as? TranslateRemoteModel
        else { return }
    let error = userInfo[ModelDownloadUserInfoKey.error.rawValue]
    // ...
}
Objective-C
// Download the French model.
FIRModelDownloadConditions *conditions =
    [[FIRModelDownloadConditions alloc] initWithAllowsCellularAccess:NO
                                         allowsBackgroundDownloading:YES];
FIRTranslateRemoteModel *frModel =
    [FIRTranslateRemoteModel translateRemoteModelWithLanguage:FIRTranslateLanguageFR];
// Keep a reference to the download progress so you can check that the model
// is available before you use it.
self.downloadProgress = [[FIRModelManager modelManager] downloadModel:frModel
                                                           conditions:conditions];
如要向「NSNotificationCenter」取得下載狀態,請註冊
FIRModelDownloadDidSucceedNotification 和
FIRModelDownloadDidFailNotification。請務必使用弱式參照
觀察器區塊中的 self,因為下載可能需要一些時間,
可在下載完成後釋放。
__block MyViewController *weakSelf = self;
[NSNotificationCenter.defaultCenter
 addObserverForName:FIRModelDownloadDidSucceedNotification
 object:nil
 queue:nil
 usingBlock:^(NSNotification * _Nonnull note) {
     if (weakSelf == nil | note.userInfo == nil) {
         return;
     }
     FIRTranslateRemoteModel *model = note.userInfo[FIRModelDownloadUserInfoKeyRemoteModel];
     if ([model isKindOfClass:[FIRTranslateRemoteModel class]]
         && model == frModel) {
         // The model was downloaded and is available on the device
     }
 }];
[NSNotificationCenter.defaultCenter
 addObserverForName:FIRModelDownloadDidFailNotification
 object:nil
 queue:nil
 usingBlock:^(NSNotification * _Nonnull note) {
     if (weakSelf == nil | note.userInfo == nil) {
         return;
     }
     NSError *error = note.userInfo[FIRModelDownloadUserInfoKeyError];
 }];