iOS에서 ML Kit를 사용하여 텍스트 번역
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
ML Kit를 사용하여 언어 간에 텍스트를 번역할 수 있습니다. ML Kit는 현재 59개 언어 간의 번역을 지원합니다.
시작하기 전에
- 앱에 Firebase를 아직 추가하지 않았다면 시작 가이드의 단계에 따라 추가합니다.
- Podfile에 ML Kit 라이브러리를 포함합니다.
pod 'Firebase/MLNLTranslate', '6.25.0'
프로젝트의 포드를 설치하거나 업데이트한 후 .xcworkspace
를 사용하여 Xcode 프로젝트를 열어야 합니다.
- 앱에서 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.
}];
언어 모델은 약 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가 구성된 도착어로 텍스트를 번역하고 완료 핸들러에 번역된 텍스트를 전달합니다.
명시적으로 번역 모델 관리
위에 설명한 대로 번역 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];
}];
달리 명시되지 않는 한 이 페이지의 콘텐츠에는 Creative Commons Attribution 4.0 라이선스에 따라 라이선스가 부여되며, 코드 샘플에는 Apache 2.0 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 Google Developers 사이트 정책을 참조하세요. 자바는 Oracle 및/또는 Oracle 계열사의 등록 상표입니다.
최종 업데이트: 2025-08-12(UTC)
[null,null,["최종 업데이트: 2025-08-12(UTC)"],[],[],null,["You can use ML Kit to translate text between languages. ML Kit\ncurrently supports translation between\n[59 languages](/docs/ml-kit/translation-language-support).\n\n\u003cbr /\u003e\n\nBefore you begin\n\n\u003cbr /\u003e\n\n1. If you have not already added Firebase to your app, do so by following the steps in the [getting started guide](/docs/ios/setup).\n2. Include the ML Kit libraries in your Podfile: \n\n ```\n pod 'Firebase/MLNLTranslate', '6.25.0'\n ```\n After you install or update your project's Pods, be sure to open your Xcode project using its `.xcworkspace`.\n3. In your app, import Firebase: \n\n Swift \n\n ```swift\n import Firebase\n ```\n\n Objective-C \n\n ```objective-c\n @import Firebase;\n ```\n\nTranslate a string of text\n\nTo translate a string between two languages:\n\n1. Create a `Translator` object, configuring it with the source and target\n languages:\n\n Swift \n\n // Create an English-German translator:\n let options = TranslatorOptions(sourceLanguage: .en, targetLanguage: .de)\n let englishGermanTranslator = NaturalLanguage.naturalLanguage().translator(options: options)\n\n Objective-C \n\n // Create an English-German translator:\n FIRTranslatorOptions *options =\n [[FIRTranslatorOptions alloc] initWithSourceLanguage:FIRTranslateLanguageEN\n targetLanguage:FIRTranslateLanguageDE];\n FIRTranslator *englishGermanTranslator =\n [[FIRNaturalLanguage naturalLanguage] translatorWithOptions:options];\n\n If you don't know the language of the input text, you can use the [language\n identification API](/docs/ml-kit/identify-languages) first. (But be sure you\n don't keep too many language models on the device at once.)\n2. Make sure the required translation model has been downloaded to the device.\n Don't call `translate(_:completion:)` until you know the model is available.\n\n Swift \n\n let conditions = ModelDownloadConditions(\n allowsCellularAccess: false,\n allowsBackgroundDownloading: true\n )\n englishGermanTranslator.downloadModelIfNeeded(with: conditions) { error in\n guard error == nil else { return }\n\n // Model downloaded successfully. Okay to start translating.\n }\n\n Objective-C \n\n FIRModelDownloadConditions *conditions =\n [[FIRModelDownloadConditions alloc] initWithAllowsCellularAccess:NO\n allowsBackgroundDownloading:YES];\n [englishGermanTranslator downloadModelIfNeededWithConditions:conditions\n completion:^(NSError *_Nullable error) {\n if (error != nil) {\n return;\n }\n // Model downloaded successfully. Okay to start translating.\n }];\n\n Language models are around 30MB, so don't download them unnecessarily, and\n only download them using WiFi, unless the user has specified otherwise. You\n should also delete unneeded models.\n See [Explicitly manage translation models](#manage_models).\n3. After you confirm the model has been downloaded, pass a string of text in\n the source language to `translate(_:completion:)`:\n\n Swift \n\n englishGermanTranslator.translate(text) { translatedText, error in\n guard error == nil, let translatedText = translatedText else { return }\n\n // Translation succeeded.\n }\n\n Objective-C \n\n [englishGermanTranslator translateText:text\n completion:^(NSString *_Nullable translatedText,\n NSError *_Nullable error) {\n if (error != nil || translatedText == nil) {\n return;\n }\n\n // Translation succeeded.\n }];\n\n ML Kit translates the text to the target language you configured and\n passes the translated text to the completion handler.\n\nExplicitly manage translation models\n\n\nWhen you use the translation API as described above, ML Kit automatically\ndownloads language-specific translation models to the device as required. You\ncan also explicitly manage the translation models you want available on the\ndevice by using ML Kit's translation model management API. This can be\nuseful if you want to download models ahead of time, or delete unneeded models\nfrom the device.\n\n\u003cbr /\u003e\n\nTo get the translation models stored on the device: \n\nSwift \n\n let localModels = ModelManager.modelManager().downloadedTranslateModels\n\nObjective-C \n\n NSSet\u003cFIRTranslateRemoteModel *\u003e *localModels =\n [FIRModelManager modelManager].downloadedTranslateModels;\n\nTo delete a model: \n\nSwift \n\n // Delete the German model if it's on the device.\n let deModel = TranslateRemoteModel.translateRemoteModel(language: .de)\n ModelManager.modelManager().deleteDownloadedModel(deModel) { error in\n guard error == nil else { return }\n // Model deleted.\n }\n\nObjective-C \n\n // Delete the German model if it's on the device.\n FIRTranslateRemoteModel *deModel =\n [FIRTranslateRemoteModel translateRemoteModelWithLanguage:FIRTranslateLanguageDE];\n [[FIRModelManager modelManager] deleteDownloadedModel:deModel\n completion:^(NSError * _Nullable error) {\n if (error != nil) {\n return;\n }\n // Model deleted.\n }];\n\nTo download a model: \n\nSwift \n\n // Download the French model.\n let frModel = TranslateRemoteModel.translateRemoteModel(language: .fr)\n\n // Keep a reference to the download progress so you can check that the model\n // is available before you use it.\n progress = ModelManager.modelManager().download(\n frModel,\n conditions: ModelDownloadConditions(\n allowsCellularAccess: false,\n allowsBackgroundDownloading: true\n )\n )\n\nIf you want to get the download status with `NotificationCenter`, register\nobservers for `firebaseMLModelDownloadDidSucceed` and\n`firebaseMLModelDownloadDidFail`. Be sure to use a weak reference to `self`\nin the observer block, since downloads can take some time, and the originating\nobject can be freed by the time the download finishes. For example: \n\n NotificationCenter.default.addObserver(\n forName: .firebaseMLModelDownloadDidSucceed,\n object: nil,\n queue: nil\n ) { [weak self] notification in\n guard let strongSelf = self,\n let userInfo = notification.userInfo,\n let model = userInfo[ModelDownloadUserInfoKey.remoteModel.rawValue]\n as? TranslateRemoteModel,\n model == frModel\n else { return }\n // The model was downloaded and is available on the device\n }\n\n NotificationCenter.default.addObserver(\n forName: .firebaseMLModelDownloadDidFail,\n object: nil,\n queue: nil\n ) { [weak self] notification in\n guard let strongSelf = self,\n let userInfo = notification.userInfo,\n let model = userInfo[ModelDownloadUserInfoKey.remoteModel.rawValue]\n as? TranslateRemoteModel\n else { return }\n let error = userInfo[ModelDownloadUserInfoKey.error.rawValue]\n // ...\n }\n\nObjective-C \n\n // Download the French model.\n FIRModelDownloadConditions *conditions =\n [[FIRModelDownloadConditions alloc] initWithAllowsCellularAccess:NO\n allowsBackgroundDownloading:YES];\n FIRTranslateRemoteModel *frModel =\n [FIRTranslateRemoteModel translateRemoteModelWithLanguage:FIRTranslateLanguageFR];\n\n // Keep a reference to the download progress so you can check that the model\n // is available before you use it.\n self.downloadProgress = [[FIRModelManager modelManager] downloadModel:frModel\n conditions:conditions];\n\nIf you want to get the download status with `NSNotificationCenter`, register\nobservers for `FIRModelDownloadDidSucceedNotification` and\n`FIRModelDownloadDidFailNotification`. Be sure to use a weak reference to\n`self` in the observer block, since downloads can take some time, and the\noriginating object can be freed by the time the download finishes. \n\n __block MyViewController *weakSelf = self;\n\n [NSNotificationCenter.defaultCenter\n addObserverForName:FIRModelDownloadDidSucceedNotification\n object:nil\n queue:nil\n usingBlock:^(NSNotification * _Nonnull note) {\n if (weakSelf == nil | note.userInfo == nil) {\n return;\n }\n\n FIRTranslateRemoteModel *model = note.userInfo[FIRModelDownloadUserInfoKeyRemoteModel];\n if ([model isKindOfClass:[FIRTranslateRemoteModel class]]\n && model == frModel) {\n // The model was downloaded and is available on the device\n }\n }];\n\n [NSNotificationCenter.defaultCenter\n addObserverForName:FIRModelDownloadDidFailNotification\n object:nil\n queue:nil\n usingBlock:^(NSNotification * _Nonnull note) {\n if (weakSelf == nil | note.userInfo == nil) {\n return;\n }\n\n NSError *error = note.userInfo[FIRModelDownloadUserInfoKeyError];\n }];"]]