Разработка
Проверка доступности языка для перевода в фреймворке Translation
Если пользователь пытается запросить перевод текста с языка, который еще не поддерживается, мы должны правильно с этим справиться.
Новый фреймворк 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
.
xxxxxxxxxx
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 на панели навигации.
После загрузки языка он будет доступен во всей системе.
-
Программирование4 недели назад
Конец программирования в том виде, в котором мы его знаем
-
Видео и подкасты для разработчиков1 неделя назад
Как устроена мобильная архитектура. Интервью с тех. лидером юнита «Mobile Architecture» из AvitoTech
-
Магазины приложений3 недели назад
Магазин игр Aptoide запустился на iOS в Европе
-
Новости3 недели назад
Видео и подкасты о мобильной разработке 2025.8