Skip to main content

TSLanguage Module

The TSLanguage module provides device language management capabilities, enabling applications to retrieve supported languages, query the current device language, change the device language, and monitor language change events. This module supports over 70 languages and integrates seamlessly with the TopStepComKit framework.

Prerequisites

  • TopStepComKit SDK version 1.0 or higher
  • Connected device with language management capability
  • Valid device connection through TopStepComKit
  • Proper initialization of the TopStepComKit framework

Data Models

TSLanguageModel

Language information model representing a supported language on the device.

PropertyTypeDescription
typeTSLanguageTypeLanguage type enum value (e.g., TSLanguage_ENGLISH for English, TSLanguage_CHINESESIMPLIFIED for Chinese)
codeNSString *Language code following ISO 639-1 standard (e.g., "en" for English, "zh" for Chinese)
nativeNameNSString *Name of the language in its own language (e.g., "English" for English, "中文" for Chinese)
chineseNameNSString *Name of the language in Chinese (e.g., "英语" for English, "中文" for Chinese)

TSLanguageConfig

Language configuration management class responsible for managing all language configurations.

PropertyTypeDescription
languageConfigMap (class method)NSDictionary *Dictionary containing all language configurations; key is language type, value is configuration dictionary

Enumerations

TSLanguageType

Supported language types in the system, used for language switching and localization.

ValueCodeEnglish NameChinese Name
TSLanguage_UNKNOW0Unknown未设置
TSLanguage_CHINESESIMPLIFIED1Simplified Chinese简体中文
TSLanguage_CHINESETRADITIONAL2Traditional Chinese繁体中文
TSLanguage_ENGLISH3English英语
TSLanguage_GERMAN4German德语
TSLanguage_RUSSIAN5Russian俄语
TSLanguage_SPANISH6Spanish西班牙语
TSLanguage_PORTUGUESE7Portuguese葡萄牙语
TSLanguage_FRENCH8French法语
TSLanguage_JAPANESE9Japanese日语
TSLanguage_ARABIC10Arabic阿拉伯语
TSLanguage_DUTCH11Dutch荷兰语
TSLanguage_ITALIAN12Italian意大利语
TSLanguage_BENGALI13Bengali孟加拉语
TSLanguage_CROATIAN14Croatian克罗地亚语
TSLanguage_CZECH15Czech捷克语
TSLanguage_DANISH16Danish丹麦语
TSLanguage_GREEK17Greek希腊语
TSLanguage_HEBREW18Hebrew希伯来语
TSLanguage_HINDI19Hindi印度语
TSLanguage_HUN20Hungarian匈牙利语
TSLanguage_INDONESIAN21Indonesian印度尼西亚语
TSLanguage_KOREAN22Korean韩语
TSLanguage_MALAY23Malay马来语
TSLanguage_PERSIAN24Persian波斯语
TSLanguage_POLISH25Polish波兰语
TSLanguage_RUMANIAN26Romanian罗马尼亚语
TSLanguage_SERB27Serbian塞尔维亚语
TSLanguage_SWEDISH28Swedish瑞典语
TSLanguage_THAI29Thai泰语
TSLanguage_TURKISH30Turkish土耳其语
TSLanguage_URDU31Urdu乌尔都语
TSLanguage_VIETNAMESE32Vietnamese越南语
TSLanguage_CATALAN33Catalan加泰隆语
TSLanguage_LATVIAN34Latvian拉脱维亚语
TSLanguage_LITHUANIAN35Lithuanian立陶宛语
TSLanguage_NORWEGIAN36Norwegian挪威语
TSLanguage_SLOVAK37Slovak斯洛伐克语
TSLanguage_SLOVENIAN38Slovenian斯洛文尼亚语
TSLanguage_BULGARIAN39Bulgarian保加利亚语
TSLanguage_UKRAINIAN40Ukrainian乌克兰语
TSLanguage_FILIPINO41Filipino菲律宾语
TSLanguage_FINNISH42Finnish芬兰语
TSLanguage_SOUTHAFRICAN43South African南非语
TSLanguage_ROMANSH44Romansh罗曼什语
TSLanguage_BURMESE45Burmese缅甸语
TSLanguage_CAMBODIAN46Cambodian柬埔寨语
TSLanguage_AMHARIC47Amharic阿姆哈拉语
TSLanguage_BELARUSIAN48Belarusian白俄罗斯语
TSLanguage_ESTONIAN49Estonian爱沙尼亚语
TSLanguage_SWAHILI50Swahili斯瓦希里语
TSLanguage_ZULU51Zulu祖鲁语
TSLanguage_AZERBAIJANI52Azerbaijani阿塞拜疆语
TSLanguage_ARMENIAN53Armenian亚美尼亚语
TSLanguage_GEORGIAN54Georgian格鲁吉亚语
TSLanguage_LAO55Lao老挝语
TSLanguage_MONGOLIAN56Mongolian蒙古语
TSLanguage_NEPALI57Nepali尼泊尔语
TSLanguage_KAZAKH58Kazakh哈萨克语
TSLanguage_GALICIAN59Galician加利西亚语
TSLanguage_ICELANDIC60Icelandic冰岛语
TSLanguage_KANNADA61Kannada卡纳达语
TSLanguage_KYRGYZ62Kyrgyz吉尔吉斯语
TSLanguage_MALAYALAM63Malayalam马拉雅拉姆语
TSLanguage_MARATHI64Marathi马拉提语
TSLanguage_TAMIL65Tamil泰米尔语
TSLanguage_MACEDONIAN66Macedonian马其顿语
TSLanguage_TELUGU67Telugu泰卢固语
TSLanguage_UZBEK68Uzbek乌兹别克语
TSLanguage_BASQUE69Basque巴斯克语
TSLanguage_BERBER70Sinhala僧伽罗语
TSLanguage_ALBANIAN71Albanian阿尔巴尼亚语
TSLanguage_HAUSA72Hausa豪萨语

Callback Types

TSLanguageListResultBlock

Callback for retrieving the list of supported languages.

typedef void(^TSLanguageListResultBlock)(NSArray<TSLanguageModel *> * _Nonnull languages, NSError * _Nullable error);
ParameterTypeDescription
languagesNSArray<TSLanguageModel *> *Array of supported language models; empty array if retrieval fails
errorNSError *Error information; nil if successful

TSLanguageResultBlock

Callback for retrieving current language information.

typedef void(^TSLanguageResultBlock)(TSLanguageModel * _Nullable language, NSError * _Nullable error);
ParameterTypeDescription
languageTSLanguageModel *Current language model; nil if retrieval fails
errorNSError *Error information; nil if successful

API Reference

Retrieve supported language list

Fetch all languages supported by the device.

- (void)getSupportedLanguages:(nullable TSLanguageListResultBlock)completion;
ParameterTypeDescription
completionTSLanguageListResultBlockCompletion callback with supported languages array and error information

Code Example:

id<TSLanguageInterface> language = [TopStepComKit sharedInstance].language;

[language getSupportedLanguages:^(NSArray<TSLanguageModel *> * _Nonnull languages, NSError * _Nullable error) {
if (error) {
TSLog(@"Failed to get supported languages: %@", error.localizedDescription);
return;
}

TSLog(@"Supported languages count: %lu", (unsigned long)languages.count);
for (TSLanguageModel *language in languages) {
TSLog(@"Language: %@ (%@) - Code: %@", language.nativeName, language.chineseName, language.code);
}
}];

Get current device language

Query the currently set language on the device.

- (void)getCurrentLanguage:(nullable TSLanguageResultBlock)completion;
ParameterTypeDescription
completionTSLanguageResultBlockCompletion callback with current language model and error information

Code Example:

id<TSLanguageInterface> language = [TopStepComKit sharedInstance].language;

[language getCurrentLanguage:^(TSLanguageModel * _Nullable language, NSError * _Nullable error) {
if (error) {
TSLog(@"Failed to get current language: %@", error.localizedDescription);
return;
}

if (language) {
TSLog(@"Current language: %@ (%@)", language.nativeName, language.chineseName);
TSLog(@"Language code: %@", language.code);
TSLog(@"Language type: %ld", (long)language.type);
}
}];

Set device language

Change the device display language.

- (void)setLanguage:(TSLanguageModel *)language completion:(TSCompletionBlock)completion;
ParameterTypeDescription
languageTSLanguageModel *Language model to set; must be from the list returned by getSupportedLanguages
completionTSCompletionBlockCompletion callback with operation result and error information

Code Example:

id<TSLanguageInterface> language = [TopStepComKit sharedInstance].language;

// First, get the supported languages
[language getSupportedLanguages:^(NSArray<TSLanguageModel *> * _Nonnull languages, NSError * _Nullable error) {
if (error || languages.count == 0) {
TSLog(@"Failed to get supported languages");
return;
}

// Find English language
TSLanguageModel *englishLanguage = nil;
for (TSLanguageModel *lang in languages) {
if ([lang.code isEqualToString:@"en"]) {
englishLanguage = lang;
break;
}
}

if (englishLanguage) {
// Set device language to English
[language setLanguage:englishLanguage completion:^(BOOL success, NSError * _Nullable error) {
if (error) {
TSLog(@"Failed to set language: %@", error.localizedDescription);
return;
}

if (success) {
TSLog(@"Language set successfully to: %@", englishLanguage.nativeName);
} else {
TSLog(@"Failed to set language");
}
}];
}
}];

Register language change notification

Monitor device language changes and receive notifications when the language is modified.

- (void)registerLanguageDidChanged:(nullable TSLanguageResultBlock)completion;
ParameterTypeDescription
completionTSLanguageResultBlockCallback invoked whenever the device language changes

Code Example:

id<TSLanguageInterface> language = [TopStepComKit sharedInstance].language;

// Register for language change notifications
[language registerLanguageDidChanged:^(TSLanguageModel * _Nullable language, NSError * _Nullable error) {
if (error) {
TSLog(@"Language change notification error: %@", error.localizedDescription);
return;
}

if (language) {
TSLog(@"Device language changed to: %@ (%@)", language.nativeName, language.chineseName);
TSLog(@"New language code: %@", language.code);
}
}];

Create language model with language code

Create a TSLanguageModel instance using an ISO 639-1 language code.

+ (nullable instancetype)languageWithCode:(NSString *)code;
ParameterTypeDescription
codeNSString *ISO 639-1 language code (e.g., "en" for English, "zh" for Chinese)

Return: TSLanguageModel * — Language model instance, or nil if the language code is invalid

Code Example:

// Create language model for English
TSLanguageModel *englishLanguage = [TSLanguageModel languageWithCode:@"en"];
if (englishLanguage) {
TSLog(@"English language: %@ - %@", englishLanguage.nativeName, englishLanguage.chineseName);
} else {
TSLog(@"Invalid language code");
}

Create language model with language type

Create a TSLanguageModel instance using a TSLanguageType enum value.

+ (nullable instancetype)languageWithType:(TSLanguageType)type;
ParameterTypeDescription
typeTSLanguageTypeLanguage type enum value (e.g., TSLanguage_ENGLISH, TSLanguage_CHINESESIMPLIFIED)

Return: TSLanguageModel * — Language model instance, or nil if the language type is invalid or not supported

Code Example:

// Create language model for Simplified Chinese
TSLanguageModel *chineseLanguage = [TSLanguageModel languageWithType:TSLanguage_CHINESESIMPLIFIED];
if (chineseLanguage) {
TSLog(@"Chinese language: %@ - %@", chineseLanguage.nativeName, chineseLanguage.chineseName);
} else {
TSLog(@"Language type not supported");
}

Get language configuration dictionary

Retrieve the complete language configuration mapping.

+ (NSDictionary *)languageConfigMap;

Return: NSDictionary * — Dictionary containing all language configurations; key is language type, value is configuration dictionary

Code Example:

NSDictionary *configMap = [TSLanguageConfig languageConfigMap];
TSLog(@"Language configuration count: %lu", (unsigned long)configMap.count);

for (NSNumber *typeKey in configMap) {
NSDictionary *config = configMap[typeKey];
TSLog(@"Type: %@, Config: %@", typeKey, config);
}

Get language type from language code

Convert an ISO 639-1 language code to its corresponding TSLanguageType enum value.

+ (TSLanguageType)languageTypeWithCode:(NSString *)code;
ParameterTypeDescription
codeNSString *ISO 639-1 language code (e.g., "en", "zh")

Return: TSLanguageType — Corresponding language type enum value; TSLanguage_UNKNOW if code is invalid

Code Example:

TSLanguageType languageType = [TSLanguageConfig languageTypeWithCode:@"en"];
if (languageType != TSLanguage_UNKNOW) {
TSLog(@"Language type for 'en': %ld", (long)languageType);
} else {
TSLog(@"Unknown language code");
}

Important Notes

  1. Language Code Format: Language codes follow the ISO 639-1 standard (two-letter codes such as "en", "zh", "fr"). Ensure you use the correct format when setting or querying languages.

  2. Valid Language Requirement: The language model passed to setLanguage:completion: must be one returned by getSupportedLanguages:. Attempting to set an unsupported language will result in a parameter error.

  3. Callback Execution: All completion callbacks are executed asynchronously. Do not assume they execute immediately; use the error parameter to determine operation success.

  4. Nil Handling: When creating language models with factory methods (languageWithCode: or languageWithType:), always check for nil returns, as invalid inputs will return nil instead of raising exceptions.

  5. Language Change Notifications: Register for language change notifications early in your application lifecycle to capture all language changes. The callback will be invoked whenever the device reports a language modification.

  6. Error Information: Check the error parameter in callbacks for detailed failure reasons. Error codes and descriptions follow the TopStepComKit error handling conventions.

  7. Network Requirements: Language operations communicate with the connected device. Ensure the device is connected and responsive before performing language operations.

  8. Language Persistence: Language settings are persisted on the device. After successfully setting a language, it remains active even if the device is disconnected and reconnected.

  9. Model Properties: The TSLanguageModel provides three different representations of language information (type, code, nativeName, chineseName) for flexible usage in different application contexts.

  10. Configuration Map Usage: The languageConfigMap provides low-level access to language configurations and is primarily for advanced use cases; prefer high-level API methods for typical operations.