Выбор языка устройства
Задайте язык интерфейса подключённого устройства. В SDK доступные языки представлены перечислением DeviceLanguage.
Предварительные условия
Перед выбором языка устройства убедитесь, что:
- Устройство подключено и находится в стабильном состоянии.
- Устройство поддерживает протокол
DeviceInfoAPI. - Выбранный язык присутствует в списке
supportedLanguagesустройства.
Справочник API
Фреймворк
AIBuds.xcframework
Импорт
В файлах, где используется SDK, импортируйте основной фреймворк:
- Swift
- Objective-C
import AIBuds#import <AIBuds/AIBuds-Swift.h>
#import <AIBuds/AIBuds.h>Протокол
Метод setDeviceLanguage объявлен в DeviceInfoAPI. Этот протокол наследуется от базового протокола API устройства.
- Swift
- Objective-C
protocol DeviceInfoAPI: DeviceAPI {
/// Current language setting of the device.
var languageSetting: DeviceLanguage { get }
/// List of languages supported by the device, each element is an
/// `NSNumber` wrapping the raw value of `DeviceLanguage`.
var supportedLanguages: [NSNumber] { get }
/// Sets the device language.
/// - Parameters:
/// - language: The target language to set.
/// - completion: A closure that is called when the operation completes.
/// - success: `true` if the operation was successful; otherwise `false`.
/// - error: An `NSError` object that describes the error that occurred, or `nil` if the operation was successful.
func setDeviceLanguage(
_ language: DeviceLanguage,
completion: AIBudsCompletionHandler?
)
}@protocol AIBudsDeviceInfoAPI <AIBudsDeviceAPI>
/// Current language setting of the device.
@property(nonatomic, readonly) enum AIBudsDeviceLanguage languageSetting;
/// List of languages supported by the device, each element is an
/// `NSNumber` wrapping the raw value of `DeviceLanguage`.
@property(nonatomic, readonly, copy) NSArray<NSNumber *> *_Nonnull supportedLanguages;
/// Sets the device language.
/// - Parameters:
/// - language: The target language to set.
/// - completion: A closure that is called when the operation completes.
/// - success: `true` if the operation was successful; otherwise `false`.
/// - error: An `NSError` object that describes the error that occurred, or `nil` if the
/// operation was successful.
- (void)setDeviceLanguage:(enum AIBudsDeviceLanguage)language
completion:(AIBudsCompletionHandler _Nullable)completion;
@endМетод экземпляра
Устанавливает поддерживаемое значение DeviceLanguage в качестве языка устройства.
- Swift
- Objective-C
/// Sets the device language.
/// - Parameters:
/// - language: The target language to set.
/// - completion: A closure that is called when the operation completes.
/// - success: `true` if the operation was successful; otherwise `false`.
/// - error: An `NSError` object that describes the error that occurred, or `nil` if the operation was successful.
func setDeviceLanguage(
_ language: DeviceLanguage,
completion: AIBudsCompletionHandler?
)/// Sets the device language.
/// - Parameters:
/// - language: The target language to set.
/// - completion: A closure that is called when the operation completes.
/// - success: `true` if the operation was successful; otherwise `false`.
/// - error: An `NSError` object that describes the error that occurred, or `nil` if the
/// operation was successful.
- (void)setDeviceLanguage:(enum AIBudsDeviceLanguage)language
completion:(AIBudsCompletionHandler _Nullable)completion;Параметры
| Параметр | Тип | Описание |
|---|---|---|
language | DeviceLanguage / AIBudsDeviceLanguage | Язык, который нужно установить. |
completion | AIBudsCompletionHandler? | Необязательный обработчик, вызываемый после завершения операции. |
Параметры обратного вызова:
| Имя | Тип | Описание |
|---|---|---|
success | Bool / BOOL | true, если операция выполнена успешно; иначе false. |
error | NSError? | Сведения об ошибке при неудачной операции; иначе nil. |
Возвращаемое значение
Метод не возвращает значение напрямую. Результат передаётся обработчику завершения.
Примеры использования
- Swift
- Objective-C
import AIBuds
final class DeviceManager {
weak var device: DeviceConvertible?
func setDeviceLanguage(_ language: DeviceLanguage) {
guard let device = device as? DeviceInfoAPI else {
print("Device does not support language settings")
return
}
let isSupported = device.supportedLanguages.contains {
$0.intValue == language.rawValue
}
guard isSupported else {
print("The selected language is not supported by this device")
return
}
device.setDeviceLanguage(language) { success, error in
if !success {
print("Failed to set language: \(error?.localizedDescription ?? "Unknown error")")
return
}
print("Device language set successfully")
}
}
}#import <AIBuds/AIBuds-Swift.h>
#import <AIBuds/AIBuds.h>
@interface DeviceManager ()
@property(weak, nonatomic) id<AIBudsDeviceConvertible> device;
@end
@implementation DeviceManager
- (void)setDeviceLanguage:(AIBudsDeviceLanguage)language {
id<AIBudsDeviceInfoAPI> device = (id<AIBudsDeviceInfoAPI>)self.device;
if (![device conformsToProtocol:@protocol(AIBudsDeviceInfoAPI)]) {
NSLog(@"Device does not support language settings");
return;
}
if (![device.supportedLanguages containsObject:@(language)]) {
NSLog(@"The selected language is not supported by this device");
return;
}
[device setDeviceLanguage:language
completion:^(BOOL success, NSError *_Nullable error) {
if (!success) {
NSLog(@"Failed to set language: %@",
error.localizedDescription ?: @"Unknown error");
return;
}
NSLog(@"Device language set successfully");
}];
}
@endОбработка ошибок
- Считайте язык изменённым только после проверки
success. - Если операция не выполнена, сведения о причине доступны в
error. - Не отправляйте команду с неподдерживаемым значением.
- Не полагайтесь на конкретный код ошибки, если он не задокументирован для данного устройства.
Рекомендации
- Используйте перечисление SDK: передавайте значение
DeviceLanguage, а не строку с кодом языка ISO. - Проверяйте поддерживаемые языки: перед вызовом метода сопоставьте исходное значение перечисления со списком
supportedLanguages. - Проверяйте соответствие протоколу: убедитесь, что устройство поддерживает
DeviceInfoAPI. - Обновляйте UI в главной очереди: выполняйте вызванные завершением обновления UIKit в главной очереди.
Примечания
supportedLanguagesсодержит значенияNSNumber, оборачивающие исходные значенияDeviceLanguage.languageSettingсодержит текущую языковую настройку устройства.- Набор поддерживаемых языков зависит от модели устройства и версии прошивки.
- В Demo SDK устанавливается
AIBudsDeviceLanguageEnglish; в рабочем приложении выбирайте значение из списка, объявленного устройством.