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>
Запись опубликована в рубрике Библиотека с метками , . Добавьте в закладки постоянную ссылку.

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

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