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