diff --git a/src/app/pipes/date-format.pipe.ts b/src/app/pipes/date-format.pipe.ts index b985863e2..6a0df6a0d 100644 --- a/src/app/pipes/date-format.pipe.ts +++ b/src/app/pipes/date-format.pipe.ts @@ -1,26 +1,78 @@ -import { Pipe, PipeTransform, inject } from '@angular/core'; +import { Pipe, PipeTransform, inject, OnDestroy } from '@angular/core'; import { SettingsService } from 'app/settings/settings.service'; +import { TranslateService } from '@ngx-translate/core'; +import { Subscription } from 'rxjs'; import moment from 'moment'; -@Pipe({ name: 'dateFormat' }) -export class DateFormatPipe implements PipeTransform { +// Load moment.js locale data for all supported languages +import 'moment/locale/ne'; // Nepali +import 'moment/locale/es'; // Spanish +import 'moment/locale/de'; // German +import 'moment/locale/fr'; // French +import 'moment/locale/it'; // Italian +import 'moment/locale/ko'; // Korean +import 'moment/locale/lt'; // Lithuanian +import 'moment/locale/lv'; // Latvian +import 'moment/locale/pt'; // Portuguese +import 'moment/locale/sw'; // Swahili +import 'moment/locale/cs'; // Czech + +@Pipe({ name: 'dateFormat', pure: false }) +export class DateFormatPipe implements PipeTransform, OnDestroy { private settingsService = inject(SettingsService); + private translateService = inject(TranslateService); + private onLangChange: Subscription; + + constructor() { + // Subscribe to language changes so Angular re-evaluates the pipe when language switches + this.onLangChange = this.translateService.onLangChange.subscribe(() => { + // No body needed; impure pipe will be re-run during change detection + }); + } + + ngOnDestroy(): void { + if (this.onLangChange) { + this.onLangChange.unsubscribe(); + } + } transform(value: any, dateFormat?: string): any { const defaultDateFormat = this.settingsService.dateFormat.replace('dd', 'DD'); - if (typeof value === 'undefined') { + if (typeof value === 'undefined' || value === null) { return ''; } + + // Map SettingsService language code to a moment.js locale identifier + const langCode = this.settingsService.language.code; + let momentLocale: string; + + if (!langCode) { + momentLocale = 'en'; + } else if (langCode.includes('-')) { + // Convert codes like 'ne-NE' or 'es-MX' to base language 'ne', 'es' + momentLocale = langCode.split('-')[0]; + } else { + momentLocale = langCode; + } + + moment.locale(momentLocale); + let dateVal; - moment.locale(this.settingsService.language.code); - if (value instanceof Array) { + if (Array.isArray(value)) { + // Backend sometimes returns [yyyy, MM, dd] dateVal = moment(value.join('-'), 'YYYY-MM-DD'); } else { dateVal = moment(value); } - if (dateFormat == null) { + + if (!dateVal.isValid()) { + return ''; + } + + if (!dateFormat) { return dateVal.format(defaultDateFormat); } + return dateVal.format(dateFormat); } } diff --git a/src/assets/translations/cs-CS.json b/src/assets/translations/cs-CS.json index 16d5cf3ab..6997af827 100644 --- a/src/assets/translations/cs-CS.json +++ b/src/assets/translations/cs-CS.json @@ -704,6 +704,7 @@ "Due penalty, interest, principal, fee, In advance penalty, interest, principal, fee": "Splatná pokuta, úrok, jistina, poplatek, Pokuta předem, úrok, jistina, poplatek", "Principal": "Ředitel školy", "Repayment": "Splácení", + "Repayment (at time of disbursement)": "Splácení (v době výplaty)", "Down payment": "Záloha", "Charge refund": "Vrácení poplatku", "Charge adjustment": "Úprava náboje", diff --git a/src/assets/translations/de-DE.json b/src/assets/translations/de-DE.json index a677ee50d..9f74b504a 100644 --- a/src/assets/translations/de-DE.json +++ b/src/assets/translations/de-DE.json @@ -704,6 +704,7 @@ "Due penalty, interest, principal, fee, In advance penalty, interest, principal, fee": "Fällige Strafe, Zinsen, Kapital, Gebühr, Vorabstrafe, Zinsen, Kapital, Gebühr", "Principal": "Rektor", "Repayment": "Rückzahlung", + "Repayment (at time of disbursement)": "Rückzahlung (zum Zeitpunkt der Auszahlung)", "Down payment": "Anzahlung", "Charge refund": "Rückerstattung der Gebühr", "Charge adjustment": "Gebührenanpassung", diff --git a/src/assets/translations/en-US.json b/src/assets/translations/en-US.json index 49bbc9521..a0766dc33 100644 --- a/src/assets/translations/en-US.json +++ b/src/assets/translations/en-US.json @@ -724,6 +724,7 @@ "Share Building Contribution": "Share Building Contribution", "Principal": "Principal", "Repayment": "Repayment", + "Repayment (at time of disbursement)": "Repayment (at time of disbursement)", "Down payment": "Down payment", "Charge refund": "Charge refund", "Charge adjustment": "Charge adjustment", diff --git a/src/assets/translations/es-CL.json b/src/assets/translations/es-CL.json index 7bd11477d..3fda5e405 100644 --- a/src/assets/translations/es-CL.json +++ b/src/assets/translations/es-CL.json @@ -703,6 +703,7 @@ "Due penalty, interest, principal, fee, In advance penalty, interest, principal, fee": "Penalización vencida, Intereses, Capital, Comisiones, Penalización por adelantado, Intereses, Capital, Comisiones", "Principal": "Capital", "Repayment": "Reembolso", + "Repayment (at time of disbursement)": "Reembolso (al momento del desembolso)", "Down payment": "Auto Pago", "Charge refund": "Reembolso de cargo", "Charge adjustment": "Ajuste de cargo", diff --git a/src/assets/translations/es-MX.json b/src/assets/translations/es-MX.json index b7183abf0..cfc68afae 100644 --- a/src/assets/translations/es-MX.json +++ b/src/assets/translations/es-MX.json @@ -703,6 +703,7 @@ "Due penalty, interest, principal, fee, In advance penalty, interest, principal, fee": "Penalización vencida, Intereses, Capital, Comisiones, Penalización por adelantado, Intereses, Capital, Comisiones", "Principal": "Capital", "Repayment": "Reembolso", + "Repayment (at time of disbursement)": "Reembolso (al momento del desembolso)", "Down payment": "Auto Pago", "Charge refund": "Reembolso de cargo", "Charge adjustment": "Ajuste de cargo", diff --git a/src/assets/translations/fr-FR.json b/src/assets/translations/fr-FR.json index f5f440424..ec43b1b58 100644 --- a/src/assets/translations/fr-FR.json +++ b/src/assets/translations/fr-FR.json @@ -704,6 +704,7 @@ "Due penalty, interest, principal, fee, In advance penalty, interest, principal, fee": "Pénalité due, intérêts, principal, frais, Pénalité d'avance, intérêts, principal, frais", "Principal": "Principal", "Repayment": "Remboursement", + "Repayment (at time of disbursement)": "Remboursement (au moment du décaissement)", "Down payment": "Acompte", "Charge refund": "Remboursement des frais", "Charge adjustment": "Ajustement des frais", diff --git a/src/assets/translations/it-IT.json b/src/assets/translations/it-IT.json index 743989c63..636781f93 100644 --- a/src/assets/translations/it-IT.json +++ b/src/assets/translations/it-IT.json @@ -704,6 +704,7 @@ "Due penalty, interest, principal, fee, In advance penalty, interest, principal, fee": "Penale dovuta, interessi, capitale, commissione, Penale anticipata, interessi, capitale, commissione", "Principal": "Principale", "Repayment": "Rimborso", + "Repayment (at time of disbursement)": "Rimborso (al momento del disborso)", "Down payment": "Acconto", "Charge refund": "Rimborso addebito", "Charge adjustment": "Adeguamento della tariffa", diff --git a/src/assets/translations/ko-KO.json b/src/assets/translations/ko-KO.json index 3e6bcb59c..7c7ccd653 100644 --- a/src/assets/translations/ko-KO.json +++ b/src/assets/translations/ko-KO.json @@ -704,6 +704,7 @@ "Due penalty, interest, principal, fee, In advance penalty, interest, principal, fee": "위약금, 이자, 원금, 수수료, 선납 위약금, 이자, 원금, 수수료", "Principal": "주요한", "Repayment": "반환", + "Repayment (at time of disbursement)": "상환 (지급 시)", "Down payment": "계약금", "Charge refund": "청구금액 환불", "Charge adjustment": "요금 조정", diff --git a/src/assets/translations/lt-LT.json b/src/assets/translations/lt-LT.json index 60e8d4203..37c9fbcc1 100644 --- a/src/assets/translations/lt-LT.json +++ b/src/assets/translations/lt-LT.json @@ -704,6 +704,7 @@ "Due penalty, interest, principal, fee, In advance penalty, interest, principal, fee": "Delspinigiai, delspinigiai, pagrindinė suma, mokestis, Avansinė bauda, ​​palūkanos, pagrindinė suma, mokestis", "Principal": "direktorius", "Repayment": "Grąžinimas", + "Repayment (at time of disbursement)": "Grąžinimas (išmokėjimo metu)", "Down payment": "Pradinis įnašas", "Charge refund": "Mokesčio grąžinimas", "Charge adjustment": "Krovinio reguliavimas", diff --git a/src/assets/translations/lv-LV.json b/src/assets/translations/lv-LV.json index 684280a6c..eaa6bd84b 100644 --- a/src/assets/translations/lv-LV.json +++ b/src/assets/translations/lv-LV.json @@ -704,6 +704,7 @@ "Due penalty, interest, principal, fee, In advance penalty, interest, principal, fee": "Maksājamais līgumsods, procenti, pamatsumma, maksa, avansa līgumsods, procenti, pamatsumma, maksa", "Principal": "Direktors", "Repayment": "Atmaksa", + "Repayment (at time of disbursement)": "Atmaksa (izmaksas laikā)", "Down payment": "Pirmā iemaksa", "Charge refund": "Maksas atmaksa", "Charge adjustment": "Uzlādes regulēšana", diff --git a/src/assets/translations/ne-NE.json b/src/assets/translations/ne-NE.json index e64b6e237..e79b3b94e 100644 --- a/src/assets/translations/ne-NE.json +++ b/src/assets/translations/ne-NE.json @@ -704,6 +704,7 @@ "Due penalty, interest, principal, fee, In advance penalty, interest, principal, fee": "बक्यौता जरिवाना, व्याज, मुद्दल, शुल्क, अग्रिम जरिवाना, व्याज, मूल, शुल्क", "Principal": "प्रिन्सिपल", "Repayment": "भुक्तानी", + "Repayment (at time of disbursement)": "भुक्तानी (वितरणको समयमा)", "Down payment": "डाउन पेमेन्ट", "Charge refund": "शुल्क फिर्ता", "Charge adjustment": "चार्ज समायोजन", diff --git a/src/assets/translations/pt-PT.json b/src/assets/translations/pt-PT.json index 91fcc870e..22f8345c2 100644 --- a/src/assets/translations/pt-PT.json +++ b/src/assets/translations/pt-PT.json @@ -704,6 +704,7 @@ "Due penalty, interest, principal, fee, In advance penalty, interest, principal, fee": "Pena devida, juros, principal, taxa, multa antecipada, juros, principal, taxa", "Principal": "Diretor", "Repayment": "Reembolso", + "Repayment (at time of disbursement)": "Reembolso (no momento do desembolso)", "Down payment": "Pagamento inicial", "Charge refund": "Reembolso de cobrança", "Charge adjustment": "Ajuste de cobrança", diff --git a/src/assets/translations/sw-SW.json b/src/assets/translations/sw-SW.json index 1670eccee..e1266701b 100644 --- a/src/assets/translations/sw-SW.json +++ b/src/assets/translations/sw-SW.json @@ -704,6 +704,7 @@ "Due penalty, interest, principal, fee, In advance penalty, interest, principal, fee": "Adhabu inayostahili, riba, mkuu, ada, Adhabu ya mapema, riba, mkuu, ada", "Principal": "Mkuu wa shule", "Repayment": "Ulipaji", + "Repayment (at time of disbursement)": "Ulipaji (wakati wa malipo)", "Down payment": "Malipo ya chini", "Charge refund": "Maliza marejesho", "Charge adjustment": "Marekebisho ya malipo",