How to translate mat-paginator in Angular 4?

后端 未结 7 2182
无人及你
无人及你 2020-12-02 22:10

Do you have any ideas how can I translate \"Items per page\" in Angular\'s mat-paginator tag? The mat-paginator is an element from Material Design.

相关标签:
7条回答
  • 2020-12-02 22:54

    Modified solution (with Angular 6) based on accepted answer with @ngx-translate:

    @NgModule({
      imports: [...],
      providers: [
        {
          provide: MatPaginatorIntl, deps: [TranslateService],
          useFactory: (translateService: TranslateService) => new PaginatorI18n(translateService).getPaginatorIntl()
        }
      ]
    })
    export class CoreModule {}
    

    And the PaginatorI18n:

    import { MatPaginatorIntl } from '@angular/material';
    import { TranslateService } from '@ngx-translate/core';
    
    export class PaginatorI18n {
    
        constructor(private readonly translate: TranslateService) {}
    
        getPaginatorIntl(): MatPaginatorIntl {
            const paginatorIntl = new MatPaginatorIntl();
            paginatorIntl.itemsPerPageLabel = this.translate.instant('ITEMS_PER_PAGE_LABEL');
            paginatorIntl.nextPageLabel = this.translate.instant('NEXT_PAGE_LABEL');
            paginatorIntl.previousPageLabel = this.translate.instant('PREVIOUS_PAGE_LABEL');
            paginatorIntl.firstPageLabel = this.translate.instant('FIRST_PAGE_LABEL');
            paginatorIntl.lastPageLabel = this.translate.instant('LAST_PAGE_LABEL');
            paginatorIntl.getRangeLabel = this.getRangeLabel.bind(this);
            return paginatorIntl;
        }
    
        private getRangeLabel(page: number, pageSize: number, length: number): string {
            if (length === 0 || pageSize === 0) {
                return this.translate.instant('RANGE_PAGE_LABEL_1', { 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;
            return this.translate.instant('RANGE_PAGE_LABEL_2', { startIndex: startIndex + 1, endIndex, length });
        }
    }
    

    and cz.json

    {
        "ITEMS_PER_PAGE_LABEL": "Počet řádků:",
        "NEXT_PAGE_LABEL": "Další stránka",
        "PREVIOUS_PAGE_LABEL": "Předchozí stránka",
        "FIRST_PAGE_LABEL": "První stránka",
        "LAST_PAGE_LABEL": "Poslední stránka",
        "RANGE_PAGE_LABEL_1": "0 z {{length}}",
        "RANGE_PAGE_LABEL_2": "{{startIndex}} - {{endIndex}} z {{length}}"
    }  
    

    Configure ngx-translate in app.module.ts:

    import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
    const httpLoaderFactory = (http: HttpClient) => new TranslateHttpLoader(http, './assets/i18n/', '.json');
    @NgModule({
      imports: [
        TranslateModule.forRoot({
          loader: { provide: TranslateLoader, useFactory: httpLoaderFactory, deps: [HttpClient] }
        })
      ],
      providers: [{ provide: LOCALE_ID, useValue: 'cs' }],
      bootstrap: [AppComponent]
    })
    export class AppModule { }
    
    0 讨论(0)
提交回复
热议问题