Русификация баз данных OpenEdge
Для примера будет использована база данных $DLC/empty4
Вариант №1. Конвертация из кодировки iso8859-1 в ibm866
1. Создайте пустой каталог:
$mkdir test
2. Перейдите в каталог test:
$cd test
3. По умолчанию, empty базы данных в каталоге DLC имеют кодировку iso8859-1 (если при установке Progress не было выбрано иное). Поэтому, если в вашем стандартном файле параметров $DLC/startup.pf используется другая кодировка, например, ibm866, то создайте в каталоге test новый файл параметров. Назовем его mypf.pf. Его содержимое должно быть следующее:
-lng "English" -cpcase Basic -cpcoll Basic -cpinternal iso8859-1 -cpstream iso8859-1
4. Сделайте копию базы данных $DLC/empty4 в каталог test, как показано в следующей команде:
$ procopy $DLC/empty4 ./empty4 -pf ./mypf.pf
5. Выполните конвертацию базы данных empty4 в кодировку UNDEFINED:
$ proutil empty4 -C convchar convert UNDEFINED
OpenEdge Release 10.2A01 as of Fri Mar 6 21:03:26 EST 2009 The BI file is being automatically truncated. (1526) Database is encoded using iso8859-1 for character data types. (3939) You must have your database backed up before running convchar. (3940) Have you done this (y/n) ? y Conversion beginning, please await success confirmation... (1100) Database not scanned; no fields selected. (3946) Results of scan to convert database. (3944) Old Encoding: iso8859-1 New Encoding: UNDEFINED Scan Mode: CONVERT/ANALYSE Scan Complete: YES Scan Coverage: NONE Database State: CONVERTED The following fields contain data requiring translation: (3963) Total of 0 fields. Database is encoded using UNDEFINED for character data types. (3939) Conversion complete, character encoding conversion successful.(3945)
6. Скопируйте из каталога $DLC/prolang/rus файл rus866.df в каталог test. Если каталога rus у вас нет, то необходимо установить пакет 102a_suppromsgs_linux.tar.Z, который доступен на www.progress.com/esd.
7. Выполните конвертацию базы empty4 командой CONVCHAR CONVERT:
$ proutil empty4 -C convchar convert IBM866
OpenEdge Release 10.2A01 as of Fri Mar 6 21:03:26 EST 2009 The BI file is being automatically truncated. (1526) Database is encoded using UNDEFINED for character data types. (3939) You must have your database backed up before running convchar. (3940) Have you done this (y/n) ? y Conversion beginning, please await success confirmation... (1100) The database code page is "undefined". (1170) Modifying the database code page name only. (1171) No data conversion will take place. (1196) The current collation table is not compatible with the database code page. (2899) Results of scan to convert database. (3944) Old Encoding: UNDEFINED New Encoding: IBM866 Scan Mode: CONVERT/ANALYSE Scan Complete: YES Scan Coverage: NONE Database State: CONVERTED The following fields contain data requiring translation: (3963) Total of 0 fields. Database is encoded using IBM866 for character data types.(3939) Conversion complete, character encoding conversion successful.(3945)
8. Войдите в базу данных empty4 в однопользовательском режиме, и загрузите файл ibm866.df через Data Dictionary в следующем меню Admin –> Load Data and Definitions -> Data Definitions (.df file). По завершению вам будет выдано предупреждение о необходимости переиндексации базы данных. Выйдите из базы.
9. Выполните переиндексацию базы данных empty4:
$ proutil empty4 -C idxbuild all
10. Для корректной работы с русскими символами необходимо активировать word-indexes. Для этого следует перенести в каталог, в котором установлен Progress (DLC), файл 1251-rus.wbt.
11. Перейдите в каталог $DLC и откомпилируйте его следующей командой:
$ proutil -C wbreak-compiler 1251-rus.wbt 1
Результатом будет файл $DLC/proword.1
12. В каталоге, в котором находится база, определите для базы empty4 использование word-index по правилу #1, используя команду:
$ proutil empty4 -C word-rules 1
OpenEdge Release 10.2A01 as of Fri Mar 6 21:03:26 EST 2009 OK, the database word break file no. was changed to 1
13. Выполните полную переиндексацию только word-индексов:
Нужно заранее подготовить файл с описанием word-индексов для утилиты PROUTIL IDXBUILD. Это можно сделать выполнив следующий ABL-код:
output to "word.idx". put unformatted "some" skip. for each _index where _Wordidx <> ? no-lock, first _file of _index no-lock. put unformatted _file._file-name skip _index._index-name skip. end. put unformatted "!" skip. put unformatted "Y" skip. put unformatted "Y". output close.
Программа создаст файл word.idx в рабочем каталоге текущей сессии, подключенной к базе. Используйте его для переиндексации word-индексов:
$ proutil empty4 -C idxbuild -TB 31 -TM 32 -B 512 > word.idx
Теперь у нас есть русифицированная база данных empty4. И в дальнейшем для создания новых баз данных используйте именно ее вместо $DLC/empty4
Вариант №2. Конвертация из кодировки 1251 в ibm866
1. Скачайте пакет 102a_suppromsgs_linux.tar.Z, который доступен на www.progress.com/esd. И разверните его в каталог $DLC/prolang.
2. В каталоге $DLC/prolang появится каталог rus, который содержит все необходимые уже русифицированные базы данных. Но их стандартная кодировка 1251.
3. Скопируйте все empty- базы данных из каталога $DLC/prolang/rus в каталог $DLC, перезаписав существующие. Поскольку в каталоге $DLC запрещено выполнять какие-либо операции с базами данных средствами OpenEdge то вместо команды PROCOPY для копирования используйте команду операционной системы cp.
4. После этого создайте новый каталог (не в $DLC !) и с помощью PROCOPY скопируйте базу $DLC/empty4 в него.
5. Выполните пункты с 6-го по 13-ый из Варианта №1.
Примечание! Вместо итогового имени базы данных empty4 можно использовать любое необходимое вам имя, соответствующее правилам формирования имен баз данных в OpenEdge, например, x-files 😉