9.3. Обновление таблиц строк |
Вверх Предыдущий Следующий |
Для интернационализации вашей программы недостаточно выполнить её компиляцию с разделом resourcestrings. Во время выполнения программа должна инициализировать таблицы строк с правильными значениями для языка, который выберет пользователь. По умолчанию такая инициализация не выполняется. Все строки инициализируются с их объявленными значениями. Модуль objpas предоставляет механизм для правильной инициализации строковых таблиц. Нет необходимости включать этот модуль в раздел uses, так как он загружается автоматически, если программа или модуль компилируются в режиме Delphi или objfpc. Так как для использования строковых ресурсов требуется один из этих режимов, то модуль в любом случае будет загружаться автоматически. Строка ресурса сохраняется в таблицах, одна на модуль и одна на программу, если она также содержит раздел resourcestring. Каждый раздел resourcestring сохраняется со своим именем, хэш-значением, значением по умолчанию и текущим значением, всё как в AnsiStrings.Модуль objpas предоставляет методы для извлечения количества таблиц строковых ресурсов, количества строк в таблице и приведённой выше информации для каждой строки. Он также предоставляет метод для установки текущего значения строки. Ниже приводятся объявления всех функций: Function ResourceStringTableCount : Longint; Следующие две функции существуют только для удобства: Function Hash(S: AnsiString): longint; Далее приводятся краткие описания назначения функций. Подробно они описаны в файле Справочное руководство Free Pascal. ResourceStringTableCount возвращает количество таблиц строковых ресурсов в программе. ResourceStringCount возвращает количество вхождений строковых ресурсов в данную таблицу (таблицы обозначаются индексами с основанием 0). GetResourceStringName возвращает имя строкового ресурса в таблице ресурсов. Это имя модуля, точка (.) и имя строковой константы, всё в нижнем регистре. Строки обозначаются индексом с нулевым основанием. GetResourceStringHash возвращает значение хэша строкового ресурса как вычисленное компилятором с помощью функции Hash. GetResourceStringDefaultValue возвращает значение по умолчанию для строкового ресурса, то есть значение, которое появляется в объявлении строкового ресурса и которое сохранено в бинарном файле. GetResourceStringCurrentValue возвращает текущее значение строкового ресурса, то есть значение, установленное при инициализации (значение по умолчанию), или значение, установленное какой-либо процедурой инициализации. SetResourceStringValue устанавливает текущее значение строкового ресурса. Эта функция должна быть вызвана для инициализации всех строк. SetResourceStrings передача этой функции обратного вызова приведёт к тому, что обратный вызов будет вызывать строки одну за одной, устанавливая значение строки для возврата значения обратного вызова. Две другие функции существуют только для удобства: Hash может использоваться для вычисления хэш-значения строки. Значение хэша записывается в таблицы в результате выполнения этой функции и принимается как значение по умолчанию. Это значение вычисляется компилятором во время компиляции: это может ускорить трансляцию операций. ResetResourceTables сбрасывает все строковые ресурсы в их значения по умолчанию. Она вызывается в коде инициализации модуля objpas. Ниже приведён пример функции Translate, которая будет инициализировать все строковые ресурсы: Var I,J : Longint; Конечно, возможны другие способы, а функция Translate может быть реализована различными путями. |