Bạn có thể sử dụng ML Kit để dịch văn bản giữa các ngôn ngữ. ML Kit hiện hỗ trợ dịch giữa 59 ngôn ngữ .
Trước khi bắt đầu
- Nếu bạn chưa thêm Firebase vào ứng dụng của mình, hãy làm như vậy bằng cách làm theo các bước trong hướng dẫn bắt đầu .
- Bao gồm các thư viện ML Kit trong Podfile của bạn:
pod 'Firebase/MLNLTranslate', '6.25.0'
Sau khi bạn cài đặt hoặc cập nhật Pod của dự án, hãy nhớ mở dự án Xcode của bạn bằng cách sử dụng.xcworkspace
. - Trong ứng dụng của bạn, hãy nhập Firebase:
Nhanh
import Firebase
Mục tiêu-C
@import Firebase;
Dịch một chuỗi văn bản
Để dịch một chuỗi giữa hai ngôn ngữ:
Tạo một đối tượng
Translator
, định cấu hình nó bằng ngôn ngữ nguồn và ngôn ngữ đích:Nhanh
// Create an English-German translator: let options = TranslatorOptions(sourceLanguage: .en, targetLanguage: .de) let englishGermanTranslator = NaturalLanguage.naturalLanguage().translator(options: options)
Mục tiêu-C
// Create an English-German translator: FIRTranslatorOptions *options = [[FIRTranslatorOptions alloc] initWithSourceLanguage:FIRTranslateLanguageEN targetLanguage:FIRTranslateLanguageDE]; FIRTranslator *englishGermanTranslator = [[FIRNaturalLanguage naturalLanguage] translatorWithOptions:options];
Nếu bạn không biết ngôn ngữ của văn bản đầu vào, trước tiên bạn có thể sử dụng API nhận dạng ngôn ngữ . (Nhưng hãy đảm bảo bạn không lưu giữ quá nhiều mẫu ngôn ngữ trên thiết bị cùng một lúc.)
Đảm bảo mô hình dịch cần thiết đã được tải xuống thiết bị. Đừng gọi
translate(_:completion:)
cho đến khi bạn biết mô hình có sẵn.Nhanh
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. }
Mục tiêu-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. }];
Các mô hình ngôn ngữ có dung lượng khoảng 30MB, vì vậy đừng tải xuống khi không cần thiết và chỉ tải xuống bằng WiFi, trừ khi người dùng có chỉ định khác. Bạn cũng nên xóa những model không cần thiết. Xem Quản lý rõ ràng các mô hình dịch thuật .
Sau khi bạn xác nhận mô hình đã được tải xuống, hãy chuyển một chuỗi văn bản bằng ngôn ngữ nguồn tới
translate(_:completion:)
:Nhanh
englishGermanTranslator.translate(text) { translatedText, error in guard error == nil, let translatedText = translatedText else { return } // Translation succeeded. }
Mục tiêu-C
[englishGermanTranslator translateText:text completion:^(NSString *_Nullable translatedText, NSError *_Nullable error) { if (error != nil || translatedText == nil) { return; } // Translation succeeded. }];
Bộ công cụ ML dịch văn bản sang ngôn ngữ đích mà bạn đã định cấu hình và chuyển văn bản đã dịch sang trình xử lý hoàn thành.
Quản lý rõ ràng các mô hình dịch thuật
Khi bạn sử dụng API dịch như mô tả ở trên, ML Kit sẽ tự động tải các mô hình dịch theo ngôn ngữ cụ thể xuống thiết bị theo yêu cầu. Bạn cũng có thể quản lý rõ ràng các mô hình dịch mà bạn muốn có trên thiết bị bằng cách sử dụng API quản lý mô hình dịch của ML Kit. Điều này có thể hữu ích nếu bạn muốn tải xuống trước các mô hình hoặc xóa các mô hình không cần thiết khỏi thiết bị.
Để lấy các mô hình dịch được lưu trữ trên thiết bị:
Nhanh
let localModels = ModelManager.modelManager().downloadedTranslateModels
Mục tiêu-C
NSSet<FIRTranslateRemoteModel *> *localModels =
[FIRModelManager modelManager].downloadedTranslateModels;
Để xóa một mô hình:
Nhanh
// 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.
}
Mục tiêu-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.
}];
Để tải xuống một mô hình:
Nhanh
// 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
)
)
Nếu bạn muốn nhận trạng thái tải xuống bằng NotificationCenter
, hãy đăng ký người quan sát firebaseMLModelDownloadDidSucceed
và firebaseMLModelDownloadDidFail
. Hãy đảm bảo sử dụng tham chiếu yếu tới self
trong khối quan sát, vì quá trình tải xuống có thể mất chút thời gian và đối tượng ban đầu có thể được giải phóng khi quá trình tải xuống kết thúc. Ví dụ:
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]
// ...
}
Mục tiêu-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];
Nếu bạn muốn nhận trạng thái tải xuống bằng NSNotificationCenter
, hãy đăng ký người quan sát cho FIRModelDownloadDidSucceedNotification
và FIRModelDownloadDidFailNotification
. Hãy đảm bảo sử dụng tham chiếu yếu tới self
trong khối quan sát, vì quá trình tải xuống có thể mất chút thời gian và đối tượng ban đầu có thể được giải phóng khi quá trình tải xuống kết thúc.
__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];
}];