Локализация в общем
И так, для того. чтобы быстро и без затей перевести интерфейс xmlui и jspui на русский язык, надо сделать совсем не много. Первым делом нужно открыть файл C:\DSpace\config\dspace.cfg, установиь значение параметра «xmlui.supported.locales» и «webui.supported.locales» равным «ru, en», а параметра «default.language» равным «ru». Так же нужно установить значение параметра «default.locale» равным «ru».
Вот, собственно и всё казалось бы, но JSPUI после перезапуска службы TOMCAT будет радовать вкраплениями украинского языка, а XMLUI вовсе не переведётся.
Для того, чтобы исправить эту несправедливость, необходимо создать файлы по адресу:
C:\RUNTIME\TOMCAT\webapps\xmlui\i18n\messages_ru.xml
Содержимое файлов доступно по этой ссылке (ZIP, 65KB).
После подмены файлов и перезапуска службы TOMCAT, интерфейсы переведутся чуть более качественно. Редактировать переводы можно самостоятельно. Пример файла сообщений для JSPUI доступен тут, а перевод для XMLUI более человекочитаем и исправлять огрехи в нём можно и без шаблонов.
При желании, DSpace, собираемый из исходников, можно локализовать на этапе сборки, подменив соответствующие файлы.
Для исправления ошибок с поиском на русском, необходимо модифицировать файл C:\RUNTIME\TOMCAT\conf\server.xml.
В поле настройки доступа по HTTP необходимо добавить строку URIEncoding="UTF-8".
Особенности JSPUI
После локализации интерфейса JSPUI, от него отпадает справка. Ссылки в соответствии с новой локалью генерируются на несуществующие файлы вида
Решение у данной проблемы простое — в директории C:\RUNTIME\TOMCAT\webapps\jspui\help создать копии файлов collection-admin.html, index.html и site-admin.html с именами collection-admin_ru.html, index_ru.html и site-admin_ru.html. Сами справки конечно не переведутся, но по ссылкам в интерфейсе хотя бы что-то будет открываться.
Для добавления русского алфавита в интерфейсе JSPUI в поле быстроо перехода необходимо модифицировать файлы C:\RUNTIME\TOMCAT\webapps\jspui\browse\full.jsp и C:\RUNTIME\TOMCAT\webapps\jspui\browse\single.jsp
В обоих файлах вслед за кодом:
for (char c = 'A'; c <= 'Z'; c++)
{
%>
<a href="<%= sharedLink %>&starts_with=<%= c %>"><%= c %></a>
<%
}
%>
Вставить код:
<%
for (char c = '\u0410'; c <= '\u042F'; c++)
{
%>
<a href="<%= sharedLink %>&starts_with=<%= c %>"><%= c %></a>
<%
}
%>
После перезапуска службы TOMCAT, под английским алфавитом добавится русский.
Для украинского алфавита я предлагаю такой код:
<%
for (char c = '\u0410'; c <= '\u0413'; c++)
{
%>
<a href="<%= sharedLink %>&starts_with=<%= c %>"><%= c %></a>
<%
}
%>
<a href="<%= sharedLink %>&starts_with=Ґ">Ґ</a>
<%
for (char c = '\u0414'; c <= '\u0415'; c++)
{
%>
<a href="<%= sharedLink %>&starts_with=<%= c %>"><%= c %></a>
<%
}
%>
<a href="<%= sharedLink %>&starts_with=Є">Є</a>
<a href="<%= sharedLink %>&starts_with=Ё">Ё</a>
<%
for (char c = '\u0416'; c <= '\u0418'; c++)
{
%>
<a href="<%= sharedLink %>&starts_with=<%= c %>"><%= c %></a>
<%
}
%>
<a href="<%= sharedLink %>&starts_with=І">І</a>
<a href="<%= sharedLink %>&starts_with=Ї">Ї</a>
<%
for (char c = '\u0419'; c <= '\u042F'; c++)
{
%>
<a href="<%= sharedLink %>&starts_with=<%= c %>"><%= c %></a>
<%
}
%>
Коллеги с форума предлагали использовать непосредственно буквы/символы в коде, у меня вышло лишь с dec unicode кодами.
Особенности XMLUI
Процедура модификации XMLUI для получения русского алфавита в поле быстрого перехода чуть сложнее. Для реализации этой задачи потребуется модификация исходного кода сервлета и его повторная сборка. Поэтому, лучше сделать все модификации заранее.
Необходимо найти директорию [dspace-src]\dspace-xmlui\src\main\java\org\dspace\app\xmlui\aspect\ и изменить файл ConfigurableBrowse.java в директории artifactbrowser, файл SearchFacetFilter.java в директории discovery, файлы PrivateItems.java и WithdrawnItems.java в директории administrative
Правки необходимо сделать следующие:
1. ConfigurableBrowse.javaОтвечает за отображение алфавита в «Просмотр по автору», «Просмотр по теме».
Находим:
List jumpList = jump.addList("jump-list", List.TYPE_SIMPLE, "alphabet");
// browse params for each letter are all the query params
// WITHOUT the second-stage browse value, and add STARTS_WITH.
Map<String, String> letterQuery = new HashMap<String, String>(queryParamsGET);
for (String valueKey : BrowseParams.FILTER_VALUE)
{
letterQuery.remove(valueKey);
}
letterQuery.put(BrowseParams.STARTS_WITH, "0");
jumpList.addItemXref(super.generateURL(BROWSE_URL_BASE, letterQuery), "0-9");
for (char c = 'A'; c <= 'Z'; c++)
{
letterQuery.put(BrowseParams.STARTS_WITH, Character.toString(c));
jumpList.addItemXref(super.generateURL(BROWSE_URL_BASE, letterQuery), Character
.toString(c));
}
[cc]
И ниже добавляем
[cc lang="java"]
List jumpList2 = jump.addList("jump-list2", List.TYPE_SIMPLE, "alphabet");
jumpList2.addItemXref(super.generateURL(BROWSE_URL_BASE, letterQuery), "0-9");
for (char vv = 'А'; vv <= 'Я'; vv++)
{
letterQuery.put(BrowseParams.STARTS_WITH, Character.toString(vv));
jumpList2.addItemXref(super.generateURL(BROWSE_URL_BASE, letterQuery), Character
.toString(vv));
}
2. Файл SearchFacetFilter.java
Отвечает за отображение алфавита в поиске.
Находим:
И ниже добавляем:
В этом же файле находим:
Ниже добавляем:
3. Файл PrivateItems.java
Отвечает за отображение алфавита в «Просмотр по названию» в личных записях.
Находим:
List jumpList = jump.addList("jump-list", List.TYPE_SIMPLE, "alphabet");
for (char c = 'A'; c <= 'Z'; c++)
{
Map<String, String> cQuery = new HashMap<String, String>(queryParams);
cQuery.put(BrowseParams.STARTS_WITH, Character.toString(c));
jumpList.addItemXref(super.generateURL(PRIVATE_URL_BASE, cQuery), Character
.toString(c));
}
Ниже добавляем:
for (char vv = 'А'; vv <= 'Я'; vv++)
{
Map<String, String> cQuery = new HashMap<String, String>(queryParams);
cQuery.put(BrowseParams.STARTS_WITH, Character.toString(vv));
jumpList2.addItemXref(super.generateURL(PRIVATE_URL_BASE, cQuery), Character
.toString(vv));
}
4. Файл WithdrawnItems.java
Отвечает за отображение алфавита в «Просмотр по названию» в Отозванных записях/
Находим:
List jumpList = jump.addList("jump-list", List.TYPE_SIMPLE, "alphabet");
for (char c = 'A'; c <= 'Z'; c++)
{
Map<String, String> cQuery = new HashMap<String, String>(queryParams);
cQuery.put(BrowseParams.STARTS_WITH, Character.toString(c));
jumpList.addItemXref(super.generateURL(WITHDRAWN_URL_BASE, cQuery), Character
.toString(c));
}
Ниже добавляем:
for (char vv = 'А'; vv <= 'Я'; vv++)
{
Map<String, String> cQuery = new HashMap<String, String>(queryParams);
cQuery.put(BrowseParams.STARTS_WITH, Character.toString(vv));
jumpList2.addItemXref(super.generateURL(WITHDRAWN_URL_BASE, cQuery), Character
.toString(vv));
}
Если модификации подверглись исходные коды DSpace перед первой установкой, процесс установки не изменится. Сборку сервлета из исходных кодов можно продолжать как обычно. Если исходные коды модифицировались для обновления уже установленного сервлета, необходимо предпринять следующие действия для успешного обновления:
- остановить Apache Tomcat (или иной, используемый контейнер сервлетов) соответствующей командой, например, service tomcat6 stop или service tomcat7 stop для шестой и седьмой версии Tomcat соответственно.
- перейти в директорию с исходными кодами DSpace: сd [dspace-src-release]
- дать команду mvn -U clean package
- перейти в директорию [dspace-src-release]/dspace/target/dspace-[version]-build
- дать команду ant update
- обновить сервлет XMLUI в директории webapps контейнера сервлетов.
- запустить Apache Tomcat (или иной, используемый контейнер сервлетов) соответствующей командой, например, service tomcat6 start или service tomcat7 start для шестой и седьмой версии Tomcat соответственно.
Для всех действий желательно наличие прав суперпользователя/администратора независимо от ОС.
В 1.8.2 локализация заработала только после изменения default.locale на ru в файле конфигурации dspace.
10x
Могу дать ман как сделать русик на xmlui (сделан по хауту dspace) если IdeaFix разместит у себя, а то я что-то ничего такого толкового не нашел в пабликах
А чего там давать то? 🙂 Бери файл messages_ru.xml, да переводи. К тому же, есть и более или менее сносный официальный перевод и дюжина альтернативных.
Я не правильно выразился, мало сплю последнее время. Речь о том,что в xmlui одного перевода мало, нужна сортировка, т.е. алфавит
На ирбисовском гпнтбшном форуме был вроде кусок кода, но если у Вас под руками — давайте, опубликую. Мы в подшефных архивах не спешим переходить на 3 версию и на xmlui, поэтому он у меня освещен минимально.
Предлагаю обсудить (да и окончательный вариант оформить) http://irbis.gpntb.ru/read.php?53,59259,page=10 тут, а я уже потом у себя на сайте копию сделаю. Проходимость у гпнтб-шного форума куда больше, а учитывая узость круга потенциальных читателей, это важно.
Спб. за приглашение. Я это все это видел, читал, но не регистрировался, а на тебя вышел видимо с оверов :).
Перекинул туда инфу http://irbis.gpntb.ru/read.php?53,59259,page=10
Доброго времени суток. Столкнулся с небольшой проблемой. Локализация работает частично, то есть все работает на всех нужных языках, кроме общей статистики ,только английский язык отображается. Проводились различные манипуляции: от копирования файлов пропертис в различные точки до замены английского текста в дстат.мап на русский — результат один, все работает на всех языках, кроме общей статистики. Это как то лечится? Версия диспейса 1.7 насколько я понял, с уверенностью сказать не могу, ибо недавно занял должность администратора и разбирался уже с готовым, установленным всем обеспечением.
Заранее благодарю за ответ.
JSPUI или XMLUI? Для JSPUI у меня есть перевод статистики, но что Вы понимаете под общей? Это http://elar.rsvpu.ru/handle/123456789/2/statistics или репорты в админке? Посмледние не переводил. ибо мы их юзерам не отдаём. Больно уж они для юзеров не прозрачны.
Видимо, имелось в виду это http://dspace.nlu.edu.ua/statistics
Его можно перевести, но мы не переводили, в виду, как я уже говорил, не прозрачности.
Интерфейс JSPUI, да именно такую статистику и имел ввиду, благодарю. И, пользуясь случаем, хотел бы у вас спросить совета не по теме даного топика, а по теме статистики диспейса, если можно, разумеется, ибо на форум ирбиса не хотят пускать, а ответа не нашел.
Если вам не трудно, отпишитесь, пожалуйста, на мой имейл v0van@i.ua.
Благодарю за ответ насчет локализации и заранее благодарю за совет по статистике, если дадите.
Добрый день, вот здесь у вас http://dspace.nlu.edu.ua/statistics например первая таблица переведена на русский, как это можно сделать? Если просто перевести содержимое файла dstat.map на русский, то получается абракадабра. Как вы это сделали?
Это делается на уровне messages_ru.properties кажется. Русский или украинский туда вставлять бесполезно, там только jsp escape codes. Для конвертации я использую этот инструмент — http://r12a.github.io/apps/conversion/
jsp.collection-home.display-statistics = \u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0430
jsp.community-home.display-statistics = \u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0430
jsp.statistics.title = \u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0430
jsp.statistics.heading.visits = \u041F\u043E\u0441\u0435\u0449\u0435\u043D\u0438\u0439 \u0432\u0441\u0435\u0433\u043E
jsp.statistics.heading.views = \u041F\u043E\u0441\u0435\u0449\u0435\u043D\u0438\u044F
jsp.statistics.heading.filedownloads = \u0417\u0430\u0433\u0440\u0443\u0437\u043E\u043A
jsp.statistics.heading.monthlyvisits = \u041F\u043E\u0441\u0435\u0449\u0435\u043D\u0438\u0439 \u043F\u043E \u043C\u0435\u0441\u044F\u0446\u0430\u043C
jsp.statistics.heading.countryvisits = \u041F\u043E\u0441\u0435\u0449\u0435\u043D\u0438\u0439 \u043F\u043E \u0441\u0442\u0440\u0430\u043D\u0430\u043C
jsp.statistics.heading.cityvisits = \u041F\u043E\u0441\u0435\u0449\u0435\u043D\u0438\u0439 \u043F\u043E \u0433\u043E\u0440\u043E\u0434\u0430\u043C
Как-то так. Это в messages_ru.properties у меня лежит, добавлял сам.
Вы не обратили внимание на ссылку возможно, вы описали как перевести эту статистику http://elar.rsvpu.ru/handle/123456789/2/statistics , а мне была интересна эта http://dspace.nlu.edu.ua/statistics. Тут одна таблица только переведена и мне было интересно как.
Как кодировать строки в принципе ясно, далее можно изменять dstat.map, только вот он в любом случае останется «одноязыким».
Дорогой IdeaFix локализация прошла частями:
1. по отображению алфавита на русском не где непоявилось.
2. Я при локализации не нашел Файл PrivateItems.java в версии 1.8.2
может я что то не правильно делал в этих пунктах:
перейти в директорию с исходными кодами DSpace: сd [dspace-src-release]
дать команду mvn -U clean package
перейти в директорию [dspace-src-release]/dspace/target/dspace-[version]-build
дать команду ant update
обновить сервлет XMLUI в директории webapps контейнера сервлетов.
Я не совсем понимаю как перейти в директорию DSpace: сd [dspace-src-release] командная строка выкидывает сообщение об ошибке, я переходил просто в директорию по этому пути и давал команду. алфавит так и не появился.
и разъясните пункт — обновить сервлет XMLUI в директории webapps контейнера сервлетов.
и еще вопрос надо ли подключение к интернет при обновлении сервлетов.
Заранее благодарю)))
1. В JSPUI код точно работает, в XMLUI мопед не мой, и ссылку на автора я кажется давал. Сами XMLUI не используем, поэтому что-то добавить мне трудно.
2. В начале Вы описываете процедуру DSpace целиком, это правильно, но после ant update необходимо скопировать папочки из /dspace/webapps в /tomcat/webapps.
И это, 1.8.2 старый и дырявый… бросайте Вы его…. текущий релиз — 5.4. И действительно, давайте продолжим тут http://irbis.gpntb.ru/read.php?53,59259,page=32 тут удобнее.
Уведомление: Реализация активного резолвера для некоторых полей метаданных в DSpace JSPUI | ideafix.name