Поддержка многоязычности

Для обеспечения поддержки нескольких языков в языке программирования 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 ) …
}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *