Создание массива с переменными - PullRequest
1 голос
/ 21 сентября 2011

Я относительно новичок в Delphi, поэтому, пожалуйста, потерпите меня.По сути, мне нужно задавать переменные как разные значения в зависимости от того, тестирую я или нет в среде с переводом на английский или французский язык.Все меню в этих сценариях TC доступны по их именам, и на французском они не совпадают.Однако я могу получить к ним доступ по их позиции в меню - например, [4|2].

. У меня есть список констант, и я хотел бы установить массив для установки для MenuItem1 либо File|New, либо [4|2] в зависимости от значения tcDecimalSeparator <> '.' (устанавливается как объявленная константа).

Имеет ли это смысл?Какой самый простой / лучший способ сделать это?

Я знаю, что мог бы все это настроить с помощью тестирования, управляемого данными, но я не хочу переделывать сценарии так много перед выпуском.

1 Ответ

2 голосов
/ 21 сентября 2011

Нет, предложенное вами решение не имеет смысла. Во-первых, переключение на основе текущего десятичного разделителя ненадежно. Во-вторых, если вы уже знаете положения пунктов меню, и они всегда работают, независимо от языка программы, то зачем вообще возиться с надписями на английском языке? Просто используйте позиции меню все время. (Или, если у вас уже есть что-то настроенное для выбора текста меню на основе языка, почему бы не использовать текст меню на французском языке вместо переключения между английскими text и французскими позициями ? )

Чтобы сделать то, что вы предлагаете, вы можете настроить двумерный массив идентификаторов меню:

const
  TLanguage = (lEnglish, lFrench);
  TUIElement = (uiFileNew, uiFileOpen, ...);

  MenuIDs = array[TUIElement] of array[TLanguage] of string = (
    ('File|New', '[4|2]'),
    ('File|Open', '[4|3]')
  );

Затем, когда вы хотите строку, выберите элемент, который соответствует вашему элементу пользовательского интерфейса, а затем выберите строку для текущего языка:

if tcDecimalSeparator = '.' then
  CurrentLang := lEnglish
else
  CurrentLang := lFrench;

UseMenuItem(MenuIDs[uiFileNew, CurrentLang]);
...