diff --git a/src/app/calendar-nav/calendar-nav.component.html b/src/app/calendar-nav/calendar-nav.component.html
index bbb9d5e..b7580e4 100644
--- a/src/app/calendar-nav/calendar-nav.component.html
+++ b/src/app/calendar-nav/calendar-nav.component.html
@@ -9,7 +9,7 @@
[hidden]="!isLabelClickable"
[attr.data-hidden]="!isLabelClickable"
(click)="labelClicked()"
- [innerText]="label">
+ [innerText]="label | pNumber">
diff --git a/src/app/date-picker.module.ts b/src/app/date-picker.module.ts
index 89f209c..d4abfeb 100644
--- a/src/app/date-picker.module.ts
+++ b/src/app/date-picker.module.ts
@@ -17,6 +17,9 @@ export {DayTimeCalendarComponent} from './day-time-calendar/day-time-calendar.co
export {TimeSelectComponent} from './time-select/time-select.component';
export {MonthCalendarComponent} from './month-calendar/month-calendar.component';
+import { ENumberPipe } from './e-number.pipe';
+import { PNumberPipe } from './p-number.pipe';
+
@NgModule({
providers: [
DomHelper,
@@ -29,7 +32,9 @@ export {MonthCalendarComponent} from './month-calendar/month-calendar.component'
MonthCalendarComponent,
CalendarNavComponent,
TimeSelectComponent,
- DayTimeCalendarComponent
+ DayTimeCalendarComponent,
+ PNumberPipe,
+ ENumberPipe
],
entryComponents: [
DatePickerComponent
diff --git a/src/app/date-picker/date-picker.component.html b/src/app/date-picker/date-picker.component.html
index 6e5bda2..544232b 100644
--- a/src/app/date-picker/date-picker.component.html
+++ b/src/app/date-picker/date-picker.component.html
@@ -5,7 +5,7 @@
+ [innerText]="getDayBtnText(day) | pNumber">
diff --git a/src/app/e-number.pipe.ts b/src/app/e-number.pipe.ts
new file mode 100644
index 0000000..33ef893
--- /dev/null
+++ b/src/app/e-number.pipe.ts
@@ -0,0 +1,17 @@
+import { Pipe, PipeTransform } from '@angular/core';
+import { Persian } from './persian';
+
+@Pipe({
+ name: 'eNumber'
+})
+export class ENumberPipe implements PipeTransform {
+
+ transform(str: any, args?: any): any {
+ if ((str != null) && str.toString().trim() !== '') {
+ return Persian.persianToEnglishNumber(str.toString()).toString();
+ } else {
+ return '';
+ }
+ }
+
+}
diff --git a/src/app/p-number.pipe.ts b/src/app/p-number.pipe.ts
new file mode 100644
index 0000000..26404ee
--- /dev/null
+++ b/src/app/p-number.pipe.ts
@@ -0,0 +1,17 @@
+import { Pipe, PipeTransform } from '@angular/core';
+import { Persian } from './persian';
+
+@Pipe({
+ name: 'pNumber'
+})
+export class PNumberPipe implements PipeTransform {
+
+ transform(str: any, args?: any): any {
+ if ((str != null) && str.toString().trim() !== '') {
+ return Persian.englishToPersianNumber(str.toString()).toString();
+ } else {
+ return '';
+ }
+ }
+
+}
diff --git a/src/app/persian.ts b/src/app/persian.ts
new file mode 100644
index 0000000..95b9a0d
--- /dev/null
+++ b/src/app/persian.ts
@@ -0,0 +1,88 @@
+export class Persian {
+ static englishToPersianNumber(number) {
+ if (!number) {
+ return;
+ }
+ const englishNumbers = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'],
+ persianNumbers = ['۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹', '۰'];
+
+ for (let i = 0, numbersLen = englishNumbers.length; i < numbersLen; i++) {
+ number = number.replace(new RegExp(englishNumbers[i], 'g'), persianNumbers[i]);
+ }
+ return number;
+ }
+
+ static persianToEnglishNumber(number) {
+ if (!number) {
+ return;
+ }
+ const englishNumbers = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'],
+ persianNumbers = ['۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹', '۰'];
+
+ for (let i = 0, numbersLen = persianNumbers.length; i < numbersLen; i++) {
+ number = number.replace(new RegExp(persianNumbers[i], 'g'), englishNumbers[i]);
+ }
+ return number;
+ }
+
+ // TODO:: performance issue
+ static numberToPersianDigitWords(number: string | number) {
+ if (typeof number !== 'string') {
+ number = number.toString();
+ }
+ if (!isFinite(Number(number))) {
+ return '';
+ }
+ const parts = ['', 'هزار', 'میلیون', 'میلیارد', 'تریلیون', 'کوادریلیون', 'کویینتیلیون', 'سکستیلیون'];
+ const numbers = {
+ hundreds: ['', 'صد', 'دویست', 'سیصد', 'چهارصد', 'پانصد', 'ششصد', 'هفتصد', 'هشتصد', 'نهصد'],
+ tens: ['', 'ده', 'بیست', 'سی', 'چهل', 'پنجاه', 'شصت', 'هفتاد', 'هشتاد', 'نود'],
+ units: ['', 'یک', 'دو', 'سه', 'چهار', 'پنج', 'شش', 'هفت', 'هشت', 'نه'],
+ tenToNineteen: ['ده', 'یازده', 'دوازده', 'سیزده', 'چهارده', 'پانزده', 'شانزده', 'هفده', 'هجده', 'نوزده'],
+ zero: 'صفر'
+ };
+ const delimiter = ' و ';
+ // split number 3-3
+ const numberList = number
+ .split('').reverse().join('').replace(/\d{3}(?=\d)/g, '$&,')
+ .split('').reverse().join('').split(',')
+ .map((x) => {
+ return Array(4 - x.length).join('0') + x;
+ }).reverse();
+ let results;
+ results = []
+ for (let index = 0; index < numberList.length; index++) {
+ const hundredsDigit = numberList[index][0];
+ const tensDigit = numberList[index][1];
+ const unitsDigit = numberList[index][2];
+ const part = parts[index];
+ let threeDigitResult;
+ threeDigitResult = [];
+ if (hundredsDigit !== '0') {
+ threeDigitResult.push(numbers.hundreds[hundredsDigit]);
+ }
+ if (tensDigit === '1') {
+ threeDigitResult.push(numbers.tenToNineteen[unitsDigit]);
+ } else {
+ if (tensDigit !== '0') {
+ threeDigitResult.push(numbers.tens[tensDigit]);
+ if (unitsDigit !== '0') {
+ threeDigitResult.push(numbers.units[unitsDigit]);
+ }
+ } else if (unitsDigit !== '0' && unitsDigit !== '1') {
+ threeDigitResult.push(numbers.units[unitsDigit]);
+ }
+ }
+ threeDigitResult = threeDigitResult.join(delimiter);
+ results.push(threeDigitResult + ' ' + part)
+ }
+ let result = results.filter((x) => {
+ return x.trim() !== '';
+ });
+ result = result.reverse().join(delimiter).trim();
+ if (result !== '') {
+ return result;
+ }
+ return numbers.zero;
+ }
+}
diff --git a/src/app/time-select/time-select.component.html b/src/app/time-select/time-select.component.html
index 0a9e606..213979f 100644
--- a/src/app/time-select/time-select.component.html
+++ b/src/app/time-select/time-select.component.html
@@ -6,7 +6,7 @@
(click)="increase('hour')">
+ [innerText]="hours | pNumber">
+ [innerText]="minutes | pNumber">
+ [innerText]="seconds | pNumber">