diff --git a/apps/api/src/app/endpoints/sitemap/sitemap.module.ts b/apps/api/src/app/endpoints/sitemap/sitemap.module.ts index abf2e370e..73b5d78b0 100644 --- a/apps/api/src/app/endpoints/sitemap/sitemap.module.ts +++ b/apps/api/src/app/endpoints/sitemap/sitemap.module.ts @@ -1,4 +1,5 @@ import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; +import { I18nModule } from '@ghostfolio/api/services/i18n/i18n.module'; import { Module } from '@nestjs/common'; @@ -7,7 +8,7 @@ import { SitemapService } from './sitemap.service'; @Module({ controllers: [SitemapController], - imports: [ConfigurationModule], + imports: [ConfigurationModule, I18nModule], providers: [SitemapService] }) export class SitemapModule {} diff --git a/apps/api/src/app/endpoints/sitemap/sitemap.service.ts b/apps/api/src/app/endpoints/sitemap/sitemap.service.ts index e56dc57a8..6daeeaa54 100644 --- a/apps/api/src/app/endpoints/sitemap/sitemap.service.ts +++ b/apps/api/src/app/endpoints/sitemap/sitemap.service.ts @@ -1,42 +1,39 @@ +import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service'; +import { SUPPORTED_LANGUAGE_CODES } from '@ghostfolio/common/config'; import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools'; import { Injectable } from '@nestjs/common'; @Injectable() export class SitemapService { + public constructor(private readonly i18nService: I18nService) {} + public getPersonalFinanceTools({ currentDate }: { currentDate: string }) { return personalFinanceTools .map(({ alias, key }) => { - return [ - '', - ` https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-${alias ?? key}`, - ` ${currentDate}T00:00:00+00:00`, - '', - '', - ` https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-${alias ?? key}`, - ` ${currentDate}T00:00:00+00:00`, - '', - '', - ` https://ghostfol.io/es/recursos/personal-finance-tools/alternativa-de-software-libre-a-${alias ?? key}`, - ` ${currentDate}T00:00:00+00:00`, - '', - '', - ` https://ghostfol.io/fr/ressources/personal-finance-tools/alternative-open-source-a-${alias ?? key}`, - ` ${currentDate}T00:00:00+00:00`, - '', - '', - ` https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-${alias ?? key}`, - ` ${currentDate}T00:00:00+00:00`, - '', - '', - ` https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-${alias ?? key}`, - ` ${currentDate}T00:00:00+00:00`, - '', - '', - ` https://ghostfol.io/pt/recursos/personal-finance-tools/alternativa-de-software-livre-ao-${alias ?? key}`, - ` ${currentDate}T00:00:00+00:00`, - '' - ].join('\n'); + return SUPPORTED_LANGUAGE_CODES.map((languageCode) => { + const resourcesPath = this.i18nService.getTranslation({ + languageCode, + id: 'routes.resources' + }); + + const personalFinanceToolsPath = this.i18nService.getTranslation({ + languageCode, + id: 'routes.resources.personalFinanceTools' + }); + + const openSourceAlternativeToPath = this.i18nService.getTranslation({ + languageCode, + id: 'routes.resources.personalFinanceTools.openSourceAlternativeTo' + }); + + return [ + '', + ` https://ghostfol.io/${languageCode}/${resourcesPath}/${personalFinanceToolsPath}/${openSourceAlternativeToPath}-${alias ?? key}`, + ` ${currentDate}T00:00:00+00:00`, + '' + ].join('\n'); + }); }) .join('\n'); } diff --git a/libs/common/src/lib/routes/routes.ts b/libs/common/src/lib/routes/routes.ts index ab3e5afd0..360485619 100644 --- a/libs/common/src/lib/routes/routes.ts +++ b/libs/common/src/lib/routes/routes.ts @@ -261,13 +261,13 @@ export const publicRoutes = { title: $localize`Registration` }, resources: { - path: $localize`:kebab-case:resources`, - routerLink: ['/' + $localize`:kebab-case:resources`], + path: $localize`:kebab-case@@routes.resources:resources`, + routerLink: ['/' + $localize`:kebab-case@@routes.resources:resources`], subRoutes: { glossary: { path: $localize`:kebab-case:glossary`, routerLink: [ - '/' + $localize`:kebab-case:resources`, + '/' + $localize`:kebab-case@@routes.resources:resources`, $localize`:kebab-case:glossary` ], title: $localize`Glossary` @@ -275,7 +275,7 @@ export const publicRoutes = { guides: { path: $localize`:kebab-case:guides`, routerLink: [ - '/' + $localize`:kebab-case:resources`, + '/' + $localize`:kebab-case@@routes.resources:resources`, $localize`:kebab-case:guides` ], title: $localize`Guides` @@ -283,20 +283,20 @@ export const publicRoutes = { markets: { path: $localize`:kebab-case:markets`, routerLink: [ - '/' + $localize`:kebab-case:resources`, + '/' + $localize`:kebab-case@@routes.resources:resources`, $localize`:kebab-case:markets` ], title: $localize`Markets` }, personalFinanceTools: { - path: 'personal-finance-tools', + path: $localize`:kebab-case@@routes.resources.personalFinanceTools:personal-finance-tools`, routerLink: [ - '/' + $localize`:kebab-case:resources`, - 'personal-finance-tools' + '/' + $localize`:kebab-case@@routes.resources:resources`, + $localize`:kebab-case@@routes.resources.personalFinanceTools:personal-finance-tools` ], subRoutes: { product: { - path: $localize`:kebab-case:open-source-alternative-to`, + path: $localize`:kebab-case@@routes.resources.personalFinanceTools.openSourceAlternativeTo:open-source-alternative-to`, title: $localize`Open Source Alternative to` } },