Site icon AppTractor

Проверка доступности языка для перевода в фреймворке 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.

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 на панели навигации.

После загрузки языка он будет доступен во всей системе.

Источник

Exit mobile version