Основываясь на коде Vinko Vorih, я сделал paginator, работающий с ngx-translate, вот код:
import { Injectable } from '@angular/core';
import { MatPaginatorIntl } from '@angular/material';
import { TranslateService } from "@ngx-translate/core";
export class PaginatorIntlService extends MatPaginatorIntl {
translate: TranslateService;
itemsPerPageLabel = 'Items per page';
nextPageLabel = 'Next page';
previousPageLabel = 'Previous page';
getRangeLabel = function (page, pageSize, length) {
const of = this.translate ? this.translate.instant('paginator.of') : 'of';
if (length === 0 || pageSize === 0) {
return '0 ' + of + ' ' + 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 startIndex + 1 + ' - ' + endIndex + ' ' + of + ' ' + length;
};
injectTranslateService(translate: TranslateService) {
this.translate = translate;
this.translate.onLangChange.subscribe(() => {
this.translateLabels();
});
this.translateLabels();
}
translateLabels() {
this.itemsPerPageLabel = this.translate.instant('paginator.items_per_page');
this.nextPageLabel = this.translate.instant('paginator.next_page');
this.previousPageLabel = this.translate.instant('paginator.previous_page');
}
}
И затем в записи вашего провайдера модулей:
{
provide: MatPaginatorIntl,
useFactory: (translate) => {
const service = new PaginatorIntlService();
service.injectTranslateService(translate);
return service;
},
deps: [TranslateService]
}
Таким образом, вы можете хранить переводы в своем обычном файле i18n, и если ваше веб-приложение сможет динамически изменять язык, paginator будет переведен по запросу.
using(MemoryStream stream = new MemoryStream()) {
stream.Position = 0;
var sr = new StreamReader(stream);
string myStr = sr.ReadToEnd();
}
Вы не можете использовать GetBuffer, если вы используете конструктор MemoryStream (byte []) .
Цитата MSDN:
Этот конструктор не раскрывает базовый поток. GetBuffer выбрасывает UnauthorizedAccessException.
blockquote>Вы должны использовать этот конструктор и установить
publiclyVisible = true
, чтобы использовать GetBuffer
В VB.net я использовал это
Dim TempText = System.Text.Encoding.UTF8.GetString (TempMemoryStream.ToArray ())
blockquote>в C # могут применяться