SharePoint Alfresco PHP MySQL
О сайте Контакты
четверг, 23 июня 2011 г.

Механизм русификации Project.net

Project.net – современная система управления проектами с открытым исходным кодом. Разрабатывается на Java, в качестве СУБД использует Oracle (причем исключительно Oracle, других вариантов, как MySQL и прочих в принципе нет). Распространяется с базовыми мировыми языками (английский, французский, итальянский и др.), среди которых нет русского.

Официальной русской локализации для PNET не существует, об этом мне сказал Ken Winston, один из разработчиков, в своем письме: Project.net currently does not have a Russian language pack.

О локализации имеется анлгоязычная статья: http://doc.project.net/Administration-Localizing_Pnet

В ней говорится, что PNET для локализации и брендирования может быть конфигурирован. Конфигурации управляются администратором. Их суть - делать PNET различным для различных целей. Например, один и тот же движок PNET может обслуживать несколько доменных имен, и на каждом может быть свой язык, при этом база едина. Конфигурации можно менять между собой, можно редактировать, создавать новые с нуля или методом копирования (в веб-интерфейсе администратора).

Русификация производится путем редактирования токенов (tokens) прямо в веб-интерфейсе PNET. Либо доступен второй способ: выгрузка словаря в CSV, редактирование его вовне и загрузка обратно. Для операций загрузки/выгрузки используется средство Token Extraction/Insertion Tool (http://doc.project.net/Administration-TokenExtract).

Русифицировать в PNET можно:
1) внутренние тексты, например меню
2) внешние тексты, например уведомления email
3) картинки, которые могут быть привязаны к языку

Чтобы узнать, какой токен располагается в каком месте интерфейса, разработчики создали тестовый сервер локализации http://localization.project.net/l18n/ , где в качестве языка можно выбрать напрямую вывод токенов.

Доступен ограниченный список языков. Чтобы нам русифицировать PNET, нужно завести такую сущность, как русский язык. Мы же не будем просто переводить английский в сущности en, нам нужна ru. Как завести такую сущность, я спросил у разработчиков по email, но ответа не дождался. Поэтому ниже приводится мое собственное решение данной проблемы.

PNET хранит языковые ключи в базе данных, поэтому весь процесс перевода можно свести к операциям с базой данных.

Последовательность действий при переводе PNET

1) Зайти в СУБД Oracle через web-интерфейс:

http://127.0.0.1:8080/apex/

2) Представиться пользователем PNET, так как ему принадлежат таблицы Project.net

3) Посмотреть таблицы, которые принадлежат пользователю PNET

SELECT * FROM ALL_ALL_TABLES WHERE OWNER = 'PNET'

4) Посмотреть список допустимых языков PNET

SELECT * FROM PN_LANGUAGE

5) Добавить в список русский язык

INSERT INTO PN_LANGUAGE 
(LANGUAGE_NAME, IS_ACTIVE, CHARACTER_SET, LANGUAGE_CODE)
VALUES
('@prm.resource.language.russian.name', 1, 'ISO8859_1', 'ru')

6) Посмотреть, какие есть свойства, доступные для перевода

SELECT * FROM PN_PROPERTY

7) Слить дамп таблицы PN_PROPERTY в формате XML

заменить в полученном файле строку

<LANGUAGE>en</LANGUAGE>
на
<LANGUAGE>ru</LANGUAGE>

8) Сохранить файл в кодировке UTF-8

9) Перевести содержимое тегов на русский язык. При переводе необходимо соблюдать валидность XML, иначе PNET не примет файл

10) Залить получившийся файл обратно в PNET в таблицу PN_PROPERTY. То содержимое, которое там было ранее, останется. Добавится новое. Поэтому при повторной заливке необходимо подчищать таблицу.

Sergey Lysenko, четверг, 23 июня 2011 г.

Комментарии: