+
{{ 'login.continueWithGoogle' | translate }}
diff --git a/src/app/features/auth/login/ui/passkey-button/passkey-button.ts b/src/app/features/auth/login/ui/passkey-button/passkey-button.ts
index a3e8444..309a2e8 100644
--- a/src/app/features/auth/login/ui/passkey-button/passkey-button.ts
+++ b/src/app/features/auth/login/ui/passkey-button/passkey-button.ts
@@ -25,7 +25,7 @@ import { TranslatePipe } from '@shared/pipes/translate.pipe';
-
+
{{ 'login.signInWithPasskey' | translate }}
diff --git a/src/app/features/budget/layout/budget-layout.ts b/src/app/features/budget/layout/budget-layout.ts
index 16aa724..41f4fbc 100644
--- a/src/app/features/budget/layout/budget-layout.ts
+++ b/src/app/features/budget/layout/budget-layout.ts
@@ -8,6 +8,7 @@ import {
import { toSignal } from '@angular/core/rxjs-interop';
import { NavigationEnd, Router, RouterOutlet } from '@angular/router';
import { AccountsStore } from '@core/store/accounts-store';
+import { LocalizationService } from '@core/services/localization.service';
import { BreadcrumbModule } from 'primeng/breadcrumb';
import { filter, map, startWith } from 'rxjs';
import { BudgetStore } from '../stores';
@@ -36,6 +37,8 @@ export class BudgetLayout {
private readonly accountsStore = inject(AccountsStore);
private readonly datePipe = inject(DatePipe);
private readonly router = inject(Router);
+ private readonly localizationService = inject(LocalizationService);
+ private readonly t = (key: string) => this.localizationService.translate(key);
private readonly currentUrl = toSignal(
this.router.events.pipe(
filter((e) => e instanceof NavigationEnd),
@@ -45,7 +48,7 @@ export class BudgetLayout {
);
protected readonly breadcrumbItems = computed(() => {
- const home = ['Budget'];
+ const home = [this.t('core.pages.budget.title')];
if (this.budgetStore.month()) {
home.push(
diff --git a/src/app/features/dashboard/dashboard.html b/src/app/features/dashboard/dashboard.html
index 163affb..ad1857a 100644
--- a/src/app/features/dashboard/dashboard.html
+++ b/src/app/features/dashboard/dashboard.html
@@ -10,7 +10,7 @@
@for (widget of store.displayedTotalsSummary(); track widget.title) {
{
expect(cards).toEqual([
{
- title: 'Total balance',
+ title: 'dashboard.summaryWidget.totalBalance',
amount: 10000,
previousAmount: 9000,
growTrendIsGood: true,
},
{
- title: 'Income',
+ title: 'dashboard.summaryWidget.income',
amount: 3000,
previousAmount: 2800,
growTrendIsGood: true,
},
{
- title: 'Expenses',
+ title: 'dashboard.summaryWidget.expenses',
amount: 2000,
previousAmount: 1800,
growTrendIsGood: false,
diff --git a/src/app/features/dashboard/store/dashboard-store.ts b/src/app/features/dashboard/store/dashboard-store.ts
index eaa8f12..9b7070c 100644
--- a/src/app/features/dashboard/store/dashboard-store.ts
+++ b/src/app/features/dashboard/store/dashboard-store.ts
@@ -77,19 +77,19 @@ export const DashboardStore = signalStore(
return [
{
- title: 'Total balance',
+ title: 'dashboard.summaryWidget.totalBalance',
amount: totalBalance,
previousAmount: previousMonthTotalBalance,
growTrendIsGood: true,
},
{
- title: 'Income',
+ title: 'dashboard.summaryWidget.income',
amount: monthlyIncome,
previousAmount: previousMonthlyIncome,
growTrendIsGood: true,
},
{
- title: 'Expenses',
+ title: 'dashboard.summaryWidget.expenses',
amount: monthlyExpense,
previousAmount: previousMonthlyExpense,
growTrendIsGood: false,
diff --git a/src/app/features/landing/landing.html b/src/app/features/landing/landing.html
index 8d7e64a..a8d4ade 100644
--- a/src/app/features/landing/landing.html
+++ b/src/app/features/landing/landing.html
@@ -191,6 +191,11 @@
🇺🇦
+
{{ 'landing.footer.designInspiredBy' | translate }}
TRANSLATIONS[this.lang()].landing.heroBadges);
- protected readonly stats = computed(() => TRANSLATIONS[this.lang()].landing.stats);
- protected readonly sectionsData = computed(() => TRANSLATIONS[this.lang()].landing.sectionsData);
- protected readonly howItWorksSteps = computed(() => TRANSLATIONS[this.lang()].landing.howItWorksSteps);
- protected readonly testimonials = computed(() => TRANSLATIONS[this.lang()].landing.testimonialsList);
+ protected readonly heroBadges = computed(
+ () => TRANSLATIONS[this.lang()].landing.heroBadges,
+ );
+ protected readonly stats = computed(
+ () => TRANSLATIONS[this.lang()].landing.stats,
+ );
+ protected readonly sectionsData = computed(
+ () => TRANSLATIONS[this.lang()].landing.sectionsData,
+ );
+ protected readonly howItWorksSteps = computed(
+ () => TRANSLATIONS[this.lang()].landing.howItWorksSteps,
+ );
+ protected readonly testimonials = computed(
+ () => TRANSLATIONS[this.lang()].landing.testimonialsList,
+ );
protected readonly currentYear = new Date().getFullYear();
diff --git a/src/app/features/landing/ui/instagram-link.ts b/src/app/features/landing/ui/instagram-link.ts
new file mode 100644
index 0000000..49cd6f8
--- /dev/null
+++ b/src/app/features/landing/ui/instagram-link.ts
@@ -0,0 +1,36 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-instagram-link',
+ template: `
+
+
+
+ `,
+ styles: `
+ :host {
+ display: block;
+ height: 16px;
+ width: 16px;
+ }
+ `,
+})
+export class InstagramLink {}
diff --git a/src/app/features/landing/ui/threads-link.ts b/src/app/features/landing/ui/threads-link.ts
new file mode 100644
index 0000000..f575cbd
--- /dev/null
+++ b/src/app/features/landing/ui/threads-link.ts
@@ -0,0 +1,36 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-threads-link',
+ template: `
+
+
+
+ `,
+ styles: `
+ :host {
+ display: block;
+ height: 16px;
+ width: 16px;
+ }
+ `,
+})
+export class ThreadsLink {}
diff --git a/src/app/features/landing/ui/x-link.ts b/src/app/features/landing/ui/x-link.ts
new file mode 100644
index 0000000..e86dac4
--- /dev/null
+++ b/src/app/features/landing/ui/x-link.ts
@@ -0,0 +1,36 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-x-link',
+ template: `
+
+
+
+ `,
+ styles: `
+ :host {
+ display: block;
+ height: 16px;
+ width: 16px;
+ }
+ `,
+})
+export class XLink {}
diff --git a/src/app/shared/ui/account-select/account-select.html b/src/app/shared/ui/account-select/account-select.html
index b1c30b7..ac5200d 100644
--- a/src/app/shared/ui/account-select/account-select.html
+++ b/src/app/shared/ui/account-select/account-select.html
@@ -4,7 +4,7 @@
[options]="accounts()"
inputId="account"
optionValue="id"
- [placeholder]="placeholder()"
+ [placeholder]="placeholder() || ('shared.selectAccount' | translate)"
class="w-full"
emptyMessage="No accounts to select"
appendTo="body"
diff --git a/src/app/shared/ui/account-select/account-select.ts b/src/app/shared/ui/account-select/account-select.ts
index 31f9d67..2a95f86 100644
--- a/src/app/shared/ui/account-select/account-select.ts
+++ b/src/app/shared/ui/account-select/account-select.ts
@@ -12,13 +12,14 @@ import {
NG_VALUE_ACCESSOR,
} from '@angular/forms';
import { Account } from '@core/models/accounts';
+import { TranslatePipe } from '@shared/pipes/translate.pipe';
import { SelectDesignTokens } from '@primeuix/themes/types/select';
import { SelectModule } from 'primeng/select';
import { CurrencyCodeChip } from '../currency-code-chip';
@Component({
selector: 'app-account-select',
- imports: [SelectModule, FormsModule, CurrencyCodeChip],
+ imports: [SelectModule, FormsModule, CurrencyCodeChip, TranslatePipe],
templateUrl: './account-select.html',
host: { class: 'w-full block' },
changeDetection: ChangeDetectionStrategy.OnPush,
@@ -32,7 +33,7 @@ import { CurrencyCodeChip } from '../currency-code-chip';
})
export class AccountSelect implements ControlValueAccessor {
readonly label = input();
- readonly placeholder = input('Select account');
+ readonly placeholder = input();
readonly accounts = input([]);
readonly isInvalid = input(false);
diff --git a/src/app/shared/ui/auth-card/auth-card.ts b/src/app/shared/ui/auth-card/auth-card.ts
index 90f8228..ba0da3a 100644
--- a/src/app/shared/ui/auth-card/auth-card.ts
+++ b/src/app/shared/ui/auth-card/auth-card.ts
@@ -12,7 +12,7 @@ import { ToastModule } from 'primeng/toast';
class="relative min-h-screen flex flex-col items-center justify-center p-6"
>
@if (showLogo()) {
diff --git a/src/app/shared/ui/logo-short/logo-short.ts b/src/app/shared/ui/logo-short/logo-short.ts
index bd77ce4..8feb65b 100644
--- a/src/app/shared/ui/logo-short/logo-short.ts
+++ b/src/app/shared/ui/logo-short/logo-short.ts
@@ -6,7 +6,7 @@ import { Component } from '@angular/core';
styles: `
:host {
display: block;
- height: 60px;
+ height: 52px;
}
`,
})
diff --git a/src/app/shared/ui/new-account-form/new-account-form.html b/src/app/shared/ui/new-account-form/new-account-form.html
index 2298a0c..e5c6463 100644
--- a/src/app/shared/ui/new-account-form/new-account-form.html
+++ b/src/app/shared/ui/new-account-form/new-account-form.html
@@ -1,12 +1,12 @@