Локализация таблицы в primefaces

В этой короткой заметке расскажу о том как локализовать компонент dataTable из библиотеки компонентов primefaces. 

Рассмотрим следующий пример:

<p:dataTable var="u" value="#{someBean.universities}">
    <p:column headerText="ИД">
        <h:outputText value="#{u.id}" />
    </p:column>
 
    <p:column headerText="Название">
        <h:outputText value="#{u.fullname}" />
    </p:column>
 
    <p:column headerText="Город">
        <h:outputText value="#{u.city}" />
    </p:column>
 
    <p:column headerText="Кол-во студентов">
        <h:outputText value="#{u.studentsNumber}" />
    </p:column>
</p:dataTable>

Обычно возникает необходимость переопределить стандартное сообщение, которое показывается если список элементов переданный в value - пустой. Для этого у тега dataTable есть атрибут emptyMessage  и многие разработчики об это прекрасно знают. 

Однако, при использовании встроенного в компонент функционала для пагинации существует ещё одно необходимое место для локализации, но то, как его локализовать не настолько привычно, поэтому может вызвать затруднение. Хотя это также решается встроенным атрибутом для таблицы.

Давайте теперь рассмотрим пример с таблицей с пагинацией. 

<p:dataTable var="u" value="#{someBean.universities}"
             paginator="true" rows="20"
             paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
             rowsPerPageTemplate="10,20,30" selectionMode="single">
    <p:column headerText="ИД">
        <h:outputText value="#{u.id}" />
    </p:column>
 
    <p:column headerText="Название">
        <h:outputText value="#{u.fullname}" />
    </p:column>
 
    <p:column headerText="Город">
        <h:outputText value="#{u.city}" />
    </p:column>
 
    <p:column headerText="Кол-во студентов">
        <h:outputText value="#{u.studentsNumber}" />
    </p:column>
</p:dataTable>

 

Как видно из кода, в таблице устанавливается атрибут paginator в значение true, а также задётся кол-во строк на странице по умолчанию, варианты для переключения кол-во строк на одной странице, а также шаблон пагинатора.

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

Например, в showcases Primefaces'а это выглядит так.

 

 

Как видно из картинки выше, самая левая колонка содержит информацию о том, на какой  странице и из скольки мы сейчас находимся. Однако, предлог "of" тоже нужно локализовать на необходимый нам язык. Но как это сделать? Ведь  в шаблоне пагинатора для отображения этого встроенного элемента мы указывали {CurrentPageReport}. 

На самом деле всё решается очень просто. У тега dataTable есть специальный атрибут для описания шаблона отображения текущей страницы. 

Всё что треубется от вас, это воспользоваться атрибутом currentPageReportTemplate. Например можно написать так:

currentPageReportTemplate="{currentPage} ${i18n['datatable.paginator.of']} {totalPages}"

  Как видите проблема решается очень легко и для локализации уже предусмотрено разработчиками компонента простые настройки.

 

На этом, пожалуй, откланяюсь.

Вперед