2.3 Строковые ресурсы

Вверх  Предыдущий  Следующий

Resourcestring (строковой ресурс) - это специальный вид блока объявления строковых констант. Объявление строкового ресурса очень похоже на объявление строковых констант: строка ресурсов выступает в качестве строки константы, но она может быть локализована посредством ряда специальных подпрограмм из модуля objpas. Блок объявления строкового ресурса разрешен только в режимах Delphi или Objfpc.

Далее идет пример определения строкового ресурса:

Resourcestring

  FileMenu = '&File...';

  EditMenu = '&Edit...';

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

Семантически, строки действуют как обычные константы; но присваивать им значения запрещено (кроме как через специальные подпрограмм из модуля objpas ). Однако, они могут использоваться в присвоениях или выражениях как обычные строковые константы. Основное использование блока строковых ресурсов должно обеспечить легкое средство интернационализации.

Больше информации про строковые ресурсы вы можете получить в Справочник программиста Free Pascal и в описании модуля objpas.

Замечание:

Отметьте, что строка ресурса, которая объявлена как выражение, не будет изменяться, если части выражения будут изменены:

resourcestring

  Part1 = 'First  part  of  a  long  string.';

  Part2 = 'Second  part  of  a  long  string.';

  Sentence = Part1+'  '+Part2;

Если подпрограмма локализации преобразует Part1 и Part2, то константа Sentence не будет переведена автоматически: она имеет отдельную запись в таблицах строк ресурса, и должна для этого быть преобразована отдельно. Вышеупомянутая конструкция просто говорит, что начальное значение Sentence равняется Part1 +' '+Part2.

Замечание:

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

resourcestring

  Yes = 'Yes.';

  No = 'No.';

 

Var

  YesNo : Array[Boolean] of string = (No,Yes);

  B : Boolean;

 

begin

  Writeln(YesNo[B]);

end.

Это напечатает 'Yes.' или 'No.' в зависимости от значения B, даже если константы Yes и No были локализованы некоторым механизмом локализации.