8. Оптимизация исходных файлов

В ряде случаев текстовые фрагменты, подлежащие локализации, в коде расположены с точки зрения локализации не правильно. В разделе примеры, если не указано иное, используются на языке Delphi7/Lazarus.

8.1. Проблемы с исходными текстовыми строками

Например, текстовые фрагменты, присваиваемые переменным/компонентам, могут переноситься на следующую строку, используя символ конкатенации строк.

        s:= 'Длинная строка ' +
        'с переносом.';

В подобных случаях обычно программы локализации предлагают автоматическое сложение строк, после которого код становится следующим:

        s:= 'Длинная строка с переносом.';

Такой же подход использует данная программа локализации, применяя данное правило автоматически (параметр уровня оптимизации = 1).

8.2. Пример автоматической оптимизации кода для решения перечисленных проблем

Ниже представлен фрагмент текста программы с примерами проблем и их решениями:

 //Фрагмент формы для примера оптимизации кода программой локализации
 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мб не превышено, то значит для формата файлов исходного кода применяются простые методы простого поиска регулярными выражениями текстовых фрагментов в коде и оптимизация не применяется.

8.3. Уровни оптимизации исходного кода

Для оптимизации исходного кода применяется ряд алгоритмов, которые можно разделить по степени влияния на исходный код на уровни.

Каждый следующий уровень включает в себя возможности всех предыдущих. Далее рассмотрены уровни по возрастанию возможностей.

Уровень Нет (No)

Оптимизация отключена.

Уровень Простой (Simple)

Производит только сложение текстовых фрагментов записанных через символ сложения.

Пример:

        s:= 'Строка ' + 'из нескольких ' + 'частей.'; //#1
        s:= 'Строка из нескольких частей.'; //#1

        s:= 'Длинная строка ' +
        'с переносом.'; //#2
        s:= 'Длинная строка с переносом.'; //#2

Уровень Базовый (Base)

Базовые возможности оптимизации отсутствуют. (В разработке)

Уровень Расширенный (Extended)

Расширенные возможности оптимизации отсутствуют. (В разработке)

Уровень Максимальный (Maximum)

Максимальные возможности оптимизации отсутствуют. (В разработке)

Уровень Все (All)

Все возможности оптимизации. (В разработке)

Сайт      PDF      Содержание