From 1fe74db9c3d5913e40a470f5bb9313c5bc7e9c68 Mon Sep 17 00:00:00 2001 From: kontrollanten <6680299+kontrollanten@users.noreply.github.com> Date: Tue, 26 Jan 2021 18:37:35 +0100 Subject: [PATCH] fix(client): localize decimal separator --- .../angular/number-formatter.pipe.ts | 20 ++++++++++++------- .../video-download.component.ts | 5 +++-- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/client/src/app/shared/shared-main/angular/number-formatter.pipe.ts b/client/src/app/shared/shared-main/angular/number-formatter.pipe.ts index 5e6ccfa16..cbdb0939d 100644 --- a/client/src/app/shared/shared-main/angular/number-formatter.pipe.ts +++ b/client/src/app/shared/shared-main/angular/number-formatter.pipe.ts @@ -1,14 +1,9 @@ -import { Pipe, PipeTransform } from '@angular/core' +import { Inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core' // Thanks: https://github.com/danrevah/ngx-pipes/blob/master/src/ng-pipes/pipes/math/bytes.ts @Pipe({ name: 'myNumberFormatter' }) export class NumberFormatterPipe implements PipeTransform { - private dictionary: Array<{max: number, type: string}> = [ - { max: 1000, type: '' }, - { max: 1000000, type: 'K' }, - { max: 1000000000, type: 'M' } - ] /** * @param x number @@ -21,14 +16,25 @@ export class NumberFormatterPipe implements PipeTransform { return +f } + private dictionary: Array<{max: number, type: string}> = [ + { max: 1000, type: '' }, + { max: 1000000, type: 'K' }, + { max: 1000000000, type: 'M' } + ] + constructor (@Inject(LOCALE_ID) private localeId: string) {} + transform (value: number) { const format = this.dictionary.find(d => value < d.max) || this.dictionary[this.dictionary.length - 1] const calc = value / (format.max / 1000) const integralPart = Math.floor(calc) const decimalPart = NumberFormatterPipe.getDecimalForNumber(calc) + const decimalSeparator = Intl.NumberFormat(this.localeId) + .formatToParts(1.1) + .find(part => part.type === 'decimal') + .value return integralPart < 10 && decimalPart > 0 - ? `${integralPart}.${decimalPart}${format.type}` + ? `${integralPart}${decimalSeparator}${decimalPart}${format.type}` : `${integralPart}${format.type}` } } diff --git a/client/src/app/shared/shared-video-miniature/video-download.component.ts b/client/src/app/shared/shared-video-miniature/video-download.component.ts index 99838f712..70b27b105 100644 --- a/client/src/app/shared/shared-video-miniature/video-download.component.ts +++ b/client/src/app/shared/shared-video-miniature/video-download.component.ts @@ -1,5 +1,5 @@ import { mapValues, pick } from 'lodash-es' -import { Component, ElementRef, ViewChild } from '@angular/core' +import { Component, ElementRef, Inject, LOCALE_ID, ViewChild } from '@angular/core' import { AuthService, Notifier } from '@app/core' import { NgbActiveModal, NgbModal } from '@ng-bootstrap/ng-bootstrap' import { VideoCaption, VideoFile, VideoPrivacy } from '@shared/models' @@ -34,13 +34,14 @@ export class VideoDownloadComponent { private numbersPipe: NumberFormatterPipe constructor ( + @Inject(LOCALE_ID) private localeId: string, private notifier: Notifier, private modalService: NgbModal, private videoService: VideoService, private auth: AuthService ) { this.bytesPipe = new BytesPipe() - this.numbersPipe = new NumberFormatterPipe() + this.numbersPipe = new NumberFormatterPipe(this.localeId) } get typeText () {