DSPACE: Переключение языка в JSPUI

Интерфейс JSPUI, имевшийся в DSpace изначально, недавно был переписан на Bootstrap. Теперь, в версиях DSPACE 4.x/5.x он выглядит посвежее, имеет нормальную мобильную версию и фасеты в нём более не кажутся чем-то чуждым, приколоченным сбоку под новостями. Но, надо отдать разработчикам должное, они сохраняют преемственность, что с одной стороны позволяет переносить пользователям некоторые собственные наработки из более ранних версий, а с другой, тянет некоторые «косяки» из версии в версию.

Например, для того чтобы переключить язык интерфейса, в DSpace/JSPUi нужно непременно перейти на главную страницу и нажать на соответствующую ссылку, что не очень удобно. Ниже я опишу один из выходов из данной ситуации. Всё, описанное ниже основывается на том, что у нас уже есть нормально сконфигурированный DSpace, способный штатными средствами переключать языки интерфейса.

И так, сразу хочется сказать, что мопед не мой, а честно угнанный тут. Суть метода в том, что имеется некий яваскрипт, который при вызове с параметром (значением языка) перегружает текущий путь с новым языковым значением.


Модификация для Dspace 1.8.x/3.x:

В файле jspui/home.jsp коментируем данный кусок:

<% if (supportedLocales != null && supportedLocales.length > 1)
{
%>
        <form method="get" name="repost" action="">
          <input type ="hidden" name ="locale"/>
        </form>
<%


for (int i = supportedLocales.length-1; i >= 0; i--)
{
%>

        <a class ="langChangeOn"
                  onclick="javascript:document.repost.locale.value='<%=supportedLocales[i].toString()%>';
                  document.repost.submit();"
>
                 <%= supportedLocales[i].getDisplayLanguage(supportedLocales[i])%>
        </a>&nbsp;

<%
}

}
%>

В файле jspui/layout/header-default.jsp ГДЕ-НИБУДЬ правее LOGO картинки добавляем следующий код:

<nobr><a alt="RU" href="javascript:void(null)" onclick="changeLangTo('ru')">RU</a>&nbsp;<a alt="EN" href="javascript:void(null)" onclick="changeLangTo('en')">EN</a>&nbsp;</nobr>

Говорю где-нибудь, т.к. там таблица и каждый сам решит как там изменить «раскладку» данной таблицы. У меня в ней уже три ячейки и переключатель в самой правой, к тому же безликие RU и EN заменены на картинки. Пример тут.

Так же, сразу под тегом body в том же файле нужно добавить следующий код:

    <!-- Added to reload without loosing the parameters -->
    <script type="text/javascript">
        function changeLangTo(locale) {
            var s = document.location.toString();
            if (s.indexOf("?") == -1) {
                document.location = document.location + '?locale=' + locale;
            } else {
                if (s.indexOf("locale") == -1) {
                    document.location = document.location + '&locale=' + locale;
                } else if (s.indexOf("?locale") == -1) {
                    document.location = s.substring(0, s.indexOf("&locale"))
                            + s.substring(s.indexOf("&locale") + 10)
                            + '&locale=' + locale;
                } else {
                    document.location = s.substring(0, s.indexOf("?"))
                            + '?locale=' + locale
                            + s.substring(s.indexOf("?") + 10);
                }
            }
        }
    </script>
    <!-- End of Script -->

Модификация для Dspace 4.x/5.x:

В файле jspui/home.jsp коментируем данный кусок:

        <a class ="langChangeOn"
                  onclick="javascript:document.repost.locale.value='<%=supportedLocales[i].toString()%>';
                  document.repost.submit();"
>
                 <%= supportedLocales[i].getDisplayLanguage(supportedLocales[i])%>
        </a> &nbsp;

он у меня почему-то меньше чем для 3.х версии, но видимо работало только так.
 
А в файле jspui/layout/navbar-default.jsp делаем следующее — сразу под кодом сичбокса вставляем данную строку:

<a alt="RU" href="javascript:void(null)" onclick="changeLangTo('ru')">RU</a>&nbsp;<a alt="EN" href="javascript:void(null)" onclick="changeLangTo('en')">EN</a>

В самом конце, но ПЕРЕД закрывающим тегом

вставляем код скрипта:

    <!-- Added to reload without loosing the parameters -->
    <script type="text/javascript">
        function changeLangTo(locale) {
            var s = document.location.toString();
            if (s.indexOf("?") == -1) {
                document.location = document.location + '?locale=' + locale;
            } else {
                if (s.indexOf("locale") == -1) {
                    document.location = document.location + '&locale=' + locale;
                } else if (s.indexOf("?locale") == -1) {
                    document.location = s.substring(0, s.indexOf("&locale"))
                            + s.substring(s.indexOf("&locale") + 10)
                            + '&locale=' + locale;
                } else {
                    document.location = s.substring(0, s.indexOf("?"))
                            + '?locale=' + locale
                            + s.substring(s.indexOf("?") + 10);
                }
            }
        }
    </script>
    <!-- End of Script -->

Выглядит это так.Версия обновилась.


P.S.

Я предпочёл простым текстовым меткам RU/EN, более заметные флажки. Код с картинками тривиален, но мало ли:

<nobr><a alt="RU" href="javascript:void(null)" onclick="changeLangTo('ru')"><img src="http://elar.urfu.ru/image/ru.png" alt="en" width="46" height="32" /></a>&nbsp;<a alt="EN" href="javascript:void(null)" onclick="changeLangTo('en')"><img src="http://elar.urfu.ru/image/en.png" alt="en" width="46" height="32" /></a>&nbsp;</nobr>
Запись опубликована в рубрике Библиотека с метками , . Добавьте в закладки постоянную ссылку.

12 комментариев на «DSPACE: Переключение языка в JSPUI»

  1. Александр говорит:

    Здравствуйте. Можно ли как-то получить русский перевод с рекомендациями? На http://irbis.gpntb.ru модератор никак не подтвердит запрос на регистрацию аккаунта…

    • IdeaFix говорит:

      https://ideafix.name/?p=505 тут что-то было но к сожалению я более не обновляю публичный перевод. Этос вязано с тем, что начиная с 4-й версии и выше сильно приросла админка, а её мы не переводили от слова совсем, так же, в связи с локальными кастомизациями, наш перевод стал иметь некоторые несовместимости с «обычным» dspace.

  2. Никита говорит:

    А какая версия Dspace у вас стоит ?

    • IdeaFix говорит:

      У нас это где? Но в основном мы используем 5.10.

      Описывалась же ситуация в JSPUI на Dspace 3.x о чем сказано в тексте —

      Модификация для Dspace 1.8.x/3.x:

  3. Никита говорит:

    вы прикрепили пример того как вы сделали «переключалку» на русский язык
    репозиторий УРФУ, мне надо сделать тоже самое на Dspace 5.10 , но , по вашему мануалу нет такого кода который надо закомментировать, вот и спрашиваю

    • IdeaFix говорит:

      В DSPace 5.10 нет нужды использовать данный код. Он решал проблему смены страницы в 3.х, т.е. раньше, при смене языка, пользователя переводило на главную, а теперь такой проблемы нет.

      Сейчас на elar.urfu.ru используется штатный «переключатель» языков, который конфигурируется через dspace.cfg.

  4. Никита говорит:

    а вы тему какую-то применили чтобы изменить внешний вил ? или в ручную верстали ? если тему ,то подскажите пожалуйста откуда ее скачать

  5. Никита говорит:

    я так понимаю эта оболочка запускается через jspui

  6. Никита говорит:

    и как переключиться с xmlui на jspui ?

    • IdeaFix говорит:

      подменить сервлет в /tomcat/webapps, но… не стоит этого делать без анализа ситуации. XMLUI и JSPUI генерируют чуть разный набор списков и замена одного сервлета на другой может вызвать «непонимание» у google.

      В комментариях не очень удобно такие вещи обсуждать. Напишите мне здесь — https://vk.com/alex_yefimov

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *