Для обеспечения поддержки нескольких языков в языке программирования Control используются следующие типы данных:
- langString
- dyn_langString
- dyn_dyn_langString
Эти типы данных поддерживают следующие операторы:
= == != []
Оператор индекса «[ ]» (начинается с 1) может использоваться исключительно для доступа к чтению, т.е. изменять «langstrings» невозможно. Результатом такого действия является тип string для «langstring». Для изменения отдельных записей в «langString» необходимо использовать функцию «setLangString()». Если переменная «langString» назначена для переменной «string», то запись в текущем языке используется из «langString».
ПРИМЕЧАНИЕ
Необходимо отметить, что абсолютный индекс языков в «КАСКАД Цифра» (см. файл <путь_КАСКАД>\nls\lang.nt file или функцию getGlobalLangId()) не то же самое, что относительный индекс языков проекта (см. файл конфигурации проекта или функцию getLangIdx()).
ПРИМЕЧАНИЕ
Независимо от типов кодирования, сравнения символьных строк (например >, <) всегда осуществляются побайтно. По этой причине можно получить не соответствующие ожиданиям результаты, например, при сравнении двух строк, когда в одной используется стандарт оформления кода ISO и в другой используется кодирование UTF-8.
ПРИМЕР
Предположим, поддерживаются три языка: s[1]…s[3]. Активным языком в данном примере является язык с индексом 1. Результат первой команды отладки — DebugN(-а,-b), таким образом, в примере получаем [«German», «Hungarian», «English»] [«» «» «»].
Присвоение значения переменной a[1] невозможно, поскольку оператор присвоения поддерживает только операции чтения.
main()
{
langString a, b;
dyn_string s;
string text;
s[1] = «немецкий»;
s[2] = «венгерский»;
s[3] = «английский»;
a = s;
DebugN(a, b );
text = a[2];
DebugN(text); // [«английский»]
a[1] = «anything»; // Ошибка, но в средстве просмотра журналов сообщения отсутствуют
text = «Активный язык: » + a;
DebugN(text); // -> [«Активный язык: венгерский»]
a = b;
if ( a == b ) …
if ( a != b ) …
}