Новый фреймворк Translation использует локальные модели машинного обучения для перевода контента в наших приложениях, но не все языки доступны для перевода. Если пользователь пытается запросить перевод текста с языка, который еще не поддерживается, мы должны правильно с этим справиться.
Как разработчик, вы можете решить эту проблему с помощью класса LanguageAvailability
из фреймворка Translation.
Давайте воспользуемся классом LanguageAvailability
, чтобы проверить, какие языки доступны для перевода на устройстве и поддерживается ли перевод между двумя разными языками.
Создайте новое представление SwiftUI, импортировав фреймворк Translation Framework, и создайте новый экземпляр класса LanguageAvailability()
.
Выведите все языки, поддерживаемые Translation Framework, обратившись к свойству supportedLanguages
.
import SwiftUI import Translation struct ContentView: View { private let languageAvailability = LanguageAvailability() @State private var supportedLanguages: [Locale.Language] = [] private func description(for language: Locale.Language) -> String { // Used to display the language name let englishLocale = Locale(identifier: "en-US") let languageCode = language.languageCode?.identifier ?? "" let localizedDescription = englishLocale .localizedString(forLanguageCode: languageCode) return localizedDescription ?? "No description" } var body: some View { List { Section { ForEach(supportedLanguages, id: \.maximalIdentifier) { language in HStack { Text(description(for: language)) Spacer() Text(language.minimalIdentifier) } } } header: { Text("Supported Languages") } } .task { self.supportedLanguages = await languageAvailability.supportedLanguages } } }
Если мы хотим убедиться, что перевод с одного языка на другой поддерживается, мы можем использовать метод status(from:to:)
. Этот метод вернет значение LanguageAvailability.Status
.
private func isTranslationAvailable( from firstLanguage: Locale.Language, to secondLanguage: Locale.Language ) async -> Bool { let status = await languageAvailability .status(from: firstLanguage, to: secondLanguage) switch status { case .installed: print("Languages installed and translation supported.") return true case .supported: print("Translation supported.") return true case .unsupported: print("Translation unsupported.") return false @unknown default: print("Unknown error.") return false } }
Перевод между двумя языками может быть installed
, supported
или unsupported
.
Пользователь может вручную удалить и загрузить языковые модели с телефона, воспользовавшись приложением Translate и выбрав опцию Download Languages на панели навигации.
После загрузки языка он будет доступен во всей системе.