Avez-vous des idées sur la manière de traduire "Articles par page" dans la balise angulaire mat-paginator
? Le mat-paginator
Est un élément de Material Design.
Vous pouvez utiliser le MatPaginatorIntl
pour cela. Will Showell made un exemple qui ne fonctionne plus, voici donc une version mise à jour (avec le néerlandais) et des instructions pas à pas.
MatPaginatorIntl
de @angular/material
dans votre application.import { getDutchPaginatorIntl } from './app/dutch-paginator-intl';
dans main.ts
fichierprovider
pour le paginateur à l'intérieur du main.ts
fichier, il faut donc les traductions de votre fichier local (au lieu de l'anglais comme langue par défaut): providers: [
{ provide: MatPaginatorIntl, useValue: getDutchPaginatorIntl() }
]
paginatorIntl.itemsPerPageLabel = 'Items per pagina:';
paginatorIntl.firstPageLabel = 'Eerste pagina';
paginatorIntl.previousPageLabel = 'Vorige pagina';
paginatorIntl.nextPageLabel = 'Volgende pagina';
paginatorIntl.lastPageLabel = 'Laatste pagina';
paginatorIntl.getRangeLabel = dutchRangeLabel;
Exemple sur StackBlitz avec le fichier de traduction de pagination comme point de départ.
juin 2018 - Mise à jour pour Angular 6.x
Ceci mis à jour Exemple sur StackBlitz est mis à niveau à Angular 6. x pour prendre en charge la dernière version du framework. Seuls les packages ont été modifiés, rien dans le paginateur n’a changé.
juin 2019 - Mise à jour pour Angular 8.x
Ceci mis à jour Exemple sur StackBlitz est mis à niveau vers Angular 8. x pour prendre en charge la dernière version du framework. Seuls les packages ont été modifiés, rien dans le paginateur n’a changé.
Solution modifiée (avec Angular 6) basé sur une réponse acceptée avec @ ngx-translate :
@NgModule({
imports: [...],
providers: [
{
provide: MatPaginatorIntl, deps: [TranslateService],
useFactory: (translateService: TranslateService) => new PaginatorI18n(translateService).getPaginatorIntl()
}
]
})
export class CoreModule {}
Et le 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 });
}
}
et 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}}"
}
Configurez ngx-translate dans 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 { }
Pour une solution rapide et incorrecte, utilisez la propriété this.paginator._intl.
Dans mon ...component.ts
J'ai:
@ViewChild(MatPaginator) paginator: MatPaginator;
ngOnInit() {
...
this.paginator._intl.itemsPerPageLabel = 'My translation for items per page.';
...
}
PlusMinus a publié une solution dynamique sur la traduction de MatPaginator
avec ngx-translate: comment utiliser MatPaginatorIntl?
this.dataSource.paginator._intl.itemsPerPageLabel = "Your string here";
cela a fonctionné dans le dernier matériau angular8 +;