ML Kit를 사용하여 언어 간에 텍스트를 번역할 수 있습니다. ML 키트 여러 단어 간에 번역이 가능합니다 50개 언어
사용해 보기
- 샘플 앱을 사용하여 이 API의 사용 예를 참조하세요.
시작하기 전에
- Podfile에 다음 ML Kit 포드를 포함합니다.
pod 'GoogleMLKit/Translate', '3.2.0'
- 프로젝트의 포드를 설치하거나 업데이트한 후 포드를 사용하여 Xcode 프로젝트를 엽니다.
.xcworkspace
ML Kit는 Xcode 버전 12.4 이상에서 지원됩니다.
텍스트 문자열 번역
문자열을 두 언어 간에 번역하려면 다음 단계를 따르세요.
Translator
객체를 만들어 소스와 대상으로 구성합니다. 언어:Swift
// Create an English-German translator: let options = TranslatorOptions(sourceLanguage: .english, targetLanguage: .german) let englishGermanTranslator = Translator.translator(options: options)
Objective-C
// Create an English-German translator: MLKTranslatorOptions *options = [[MLKTranslatorOptions alloc] initWithSourceLanguage:MLKTranslateLanguageEnglish targetLanguage:MLKTranslateLanguageGerman]; MLKTranslator *englishGermanTranslator = [MLKTranslator translatorwithOptions:options];
입력 텍스트의 언어를 모를 경우 언어 Identification API: 언어 태그가 제공됩니다. 그런 다음 언어 태그를 ML Kit 열거형입니다. 코드는 사용 중인 언어에 따라 다릅니다.
- Swift:
TranslateLanguage.fromLanguageTag()
를 호출하여TranslateLanguage
가져오기 - Objective-C:
MLKTranslateLanguageForLanguageTag()
를 호출하여MLKTranslateLanguage
가져오기
한 번에 너무 많은 언어 모델을 기기에 보관하지 마세요.
- Swift:
필요한 번역 모델이 기기에 다운로드되었는지 확인합니다. 모델이 사용 가능한지 확인되기 전에는
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
MLKModelDownloadConditions *conditions = [[MLKModelDownloadConditions alloc] initWithAllowsCellularAccess:NO allowsBackgroundDownloading:YES]; [englishGermanTranslator downloadModelIfNeededWithConditions:conditions completion:^(NSError *_Nullable error) { if (error != nil) { return; } // Model downloaded successfully. Okay to start translating. }];
언어 모델은 약 30MB이므로 불필요하게 다운로드하지 마세요. 사용자가 달리 지정하지 않는 한 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는 텍스트를 구성된 도착어로 번역하고 는 번역된 텍스트를 완료 핸들러에 전달합니다.
번역사 수명 주기는 ARC (자동 참조 계산)에서 제어하며 이는 iOS 개발에 권장되는 규칙입니다. 개발자는 모든 강력한 참조가 삭제되면 번역사가 할당 해제됩니다.
변환기는 메모리에 로드될 때 30MB~150MB를 차지할 수 있습니다. 개발자는 동시 실행 생성 시 기기/앱의 메모리 예산 고려 기기에 너무 많은 언어 모델을 유지하는 것을 방지할 수 있습니다. 사용할 수 있습니다.
명시적으로 번역 모델 관리
위에 설명된 대로 번역 API를 사용하면 ML Kit가 자동으로 필요에 따라 언어별 번역 모델을 기기에 다운로드 나 원하는 번역 모델을 직접 관리하고 ML Kit의 번역 모델 관리 API를 사용하여 번역 모델을 학습시킬 수 있습니다. 이는 모델을 미리 다운로드하거나 불필요한 모델을 삭제하려는 경우에 유용합니다. 삭제됩니다.
기기에 저장된 번역 모델을 가져오려면 다음 단계를 따르세요.
Swift
let localModels = ModelManager.modelManager().downloadedTranslateModels
Objective-C
NSSet*localModels = [MLKModelManager modelManager].downloadedTranslateModels;
모델을 삭제하려면 다음 단계를 따릅니다.
Swift
// Delete the German model if it's on the device. let germanModel = TranslateRemoteModel.translateRemoteModel(language: .german) ModelManager.modelManager().deleteDownloadedModel(germanModel) { error in guard error == nil else { return } // Model deleted. }
Objective-C
// Delete the German model if it's on the device. MLKTranslateRemoteModel *germanModel = [MLKTranslateRemoteModel translateRemoteModelWithLanguage:MLKTranslateLanguageGerman]; [[MLKModelManager modelManager] deleteDownloadedModel:germanModel completion:^(NSError * _Nullable error) { if (error != nil) { return; } // Model deleted.
모델을 다운로드하려면 다음 안내를 따르세요.
Swift
// Download the French model. let frenchModel = TranslateRemoteModel.translateRemoteModel(language: .french) // Keep a reference to the download progress so you can check that the model // is available before you use it. progress = ModelManager.modelManager().download( frenchModel, conditions: ModelDownloadConditions( allowsCellularAccess: false, allowsBackgroundDownloading: true ) )
NotificationCenter
를 통해 다운로드 상태를 확인하려면
mlkitModelDownloadDidSucceed
및
mlkitModelDownloadDidFail
입니다. self
에는 약한 참조를 사용해야 합니다.
다운로드하는 데 시간이 걸릴 수 있으므로 관찰자 블록에 배치되지 않은
객체가 해제될 수 있습니다. 예를 들면 다음과 같습니다.
NotificationCenter.default.addObserver( forName: .mlkitModelDownloadDidSucceed, 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 == frenchModel else { return } // The model was downloaded and is available on the device } NotificationCenter.default.addObserver( forName: .mlkitModelDownloadDidFail, 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. MLKModelDownloadConditions *conditions = [[MLKModelDownloadConditions alloc] initWithAllowsCellularAccess:NO allowsBackgroundDownloading:YES]; MLKTranslateRemoteModel *frenchModel = [MLKTranslateRemoteModel translateRemoteModelWithLanguage:MLKTranslateLanguageFrench]; // Keep a reference to the download progress so you can check that the model // is available before you use it. self.downloadProgress = [[MLKModelManager modelManager] downloadModel:frenchModel conditions:conditions];
NSNotificationCenter
를 통해 다운로드 상태를 확인하려면
MLKModelDownloadDidSucceedNotification
및
MLKModelDownloadDidFailNotification
입니다. 이때 약한 참조를 사용하여
self
: 다운로드하는 데 시간이 걸릴 수 있으므로 관찰자 블록에 배치하고
원래 객체는 다운로드가 완료되면 해제될 수 있습니다.
__block MyViewController *weakSelf = self; [NSNotificationCenter.defaultCenter addObserverForName:MLKModelDownloadDidSucceedNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) { if (weakSelf == nil | note.userInfo == nil) { return; } MLKTranslateRemoteModel *model = note.userInfo[MLKModelDownloadUserInfoKeyRemoteModel]; if ([model isKindOfClass:[MLKTranslateRemoteModel class]] && model == frenchModel) { // The model was downloaded and is available on the device } }]; [NSNotificationCenter.defaultCenter addObserverForName:MLKModelDownloadDidFailNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) { if (weakSelf == nil | note.userInfo == nil) { return; } NSError *error = note.userInfo[MLKModelDownloadUserInfoKeyError]; }];