Skip to content
Snippets Groups Projects
french-paginator-intl.ts 1.62 KiB
Newer Older
import { MatPaginatorIntl } from '@angular/material/paginator';


const frenchRangeLabel = (page: number, pageSize: number, length: number) => {
  if (length == 0 || pageSize == 0) { return `0 de ${length}`; }
  
  length = Math.max(length, 0);

  const startIndex = page * pageSize;

  // If the start index exceeds the list length, do not try and fix the end index to the end.
  const endIndex = startIndex < length ?
      Math.min(startIndex + pageSize, length) :
      startIndex + pageSize;

  const nbPage = Math.ceil(length / pageSize);  
      //return `${startIndex + 1} - ${endIndex} / ${length} (${page})`;
      return `Page ${page + 1} / ${nbPage}`;
};

const englishRangeLabel = (page: number, pageSize: number, length: number) => {
  if (length == 0 || pageSize == 0) { return `0 of ${length}`; }

  return frenchRangeLabel(page, pageSize, length);
};


export function getFrenchPaginatorIntl() {
  const paginatorIntl = new MatPaginatorIntl();
  paginatorIntl.nextPageLabel = 'Page suivante';
  paginatorIntl.previousPageLabel = 'Page précédente';
  paginatorIntl.getRangeLabel = frenchRangeLabel;
  paginatorIntl.itemsPerPageLabel = '';


export function getEnglishSeparator() {
  const paginatorIntl = new MatPaginatorIntl();
  paginatorIntl.nextPageLabel = 'Next page';
  paginatorIntl.previousPageLabel = 'Previous page';
  paginatorIntl.getRangeLabel = englishRangeLabel;
  paginatorIntl.itemsPerPageLabel = '';

  return paginatorIntl;
}

export function getTranslatedPaginator(langIso: string) {
  if (langIso === 'fr-FR') {
    return getFrenchPaginatorIntl();
  }

  return getEnglishSeparator();
}