В ряде случаев текстовые фрагменты, подлежащие локализации, в коде расположены с точки зрения локализации не правильно. В разделе примеры, если не указано иное, используются на языке Delphi7/Lazarus.
Например, текстовые фрагменты, присваиваемые переменным/компонентам, могут переноситься на следующую строку, используя символ конкатенации строк.
s:= 'Длинная строка ' + 'с переносом.';
В подобных случаях обычно программы локализации предлагают автоматическое сложение строк, после которого код становится следующим:
s:= 'Длинная строка с переносом.';
Такой же подход использует данная программа локализации, применяя данное правило автоматически (параметр уровня оптимизации = 1).
Ниже представлен фрагмент текста программы с примерами проблем и их решениями:
//Фрагмент формы для примера оптимизации кода программой локализации procedure TForm1.Button1Click(Sender: TObject); var z :integer; s:string; count,countdir,countfile:integer; begin s:= 'Строка ' + 'из нескольких ' + 'частей.'; //#1 s:= 'Длинная строка ' + 'с переносом.'; //#2 end;
В конце строк кода указаны ремарки с номерами, на которые далее будут ссылки.
Простые проблемы, решаемые простой конкатенацией строк, указаны в строках с номерами 1, 2.
Результаты оптимизации в виде обычного текста:
//Фрагмент формы для примера оптимизации кода программой локализации procedure TForm1.Button1Click(Sender: TObject); var z :integer; s:string; count,countdir,countfile:integer; begin s:= 'Строка из нескольких частей.'; //#1 s:= 'Длинная строка с переносом.'; //#2 end;
По строковое сравнение «до» и «после» оптимизации:
s:= 'Строка ' + 'из нескольких ' + 'частей.'; //#1 s:= 'Строка из нескольких частей.'; //#1
s:= 'Длинная строка ' + 'с переносом.'; //#2 s:= 'Длинная строка с переносом.'; //#2
Примеры с подсветкой элементов можно посмотреть в отчете debug.textelements.html (только в html-отчетах). Отчет предназначен для тестирования и его нет среди основных отчетов. Кроме того, он ограничен размером 1мб, так как при большом объеме исходных файлов он может занимать сотни мегабайт, что могло бы привести к ошибкам выделения для программы памяти. Не используйте его в работе, а только для ознакомления, при необходимости выявления особенностей оптимизации, для бета-тестеров.
Если исходный код не отражен в логе, и ограничение в 1мб не превышено, то значит для формата файлов исходного кода применяются простые методы простого поиска регулярными выражениями текстовых фрагментов в коде и оптимизация не применяется.
Для оптимизации исходного кода применяется ряд алгоритмов, которые можно разделить по степени влияния на исходный код на уровни.
Каждый следующий уровень включает в себя возможности всех предыдущих. Далее рассмотрены уровни по возрастанию возможностей.
Производит только сложение текстовых фрагментов записанных через символ сложения.
Пример:
s:= 'Строка ' + 'из нескольких ' + 'частей.'; //#1 s:= 'Строка из нескольких частей.'; //#1 s:= 'Длинная строка ' + 'с переносом.'; //#2 s:= 'Длинная строка с переносом.'; //#2