|
|
|
@ -12,13 +12,12 @@ import { DATE_FORMAT, interpolate } from '@ghostfolio/common/helper';
|
|
|
|
|
import { format } from 'date-fns';
|
|
|
|
|
import { NextFunction, Request, Response } from 'express';
|
|
|
|
|
|
|
|
|
|
const title = 'Ghostfolio – Open Source Wealth Management Software';
|
|
|
|
|
const titleShort = 'Ghostfolio';
|
|
|
|
|
|
|
|
|
|
const i18nService = new I18nService();
|
|
|
|
|
|
|
|
|
|
let indexHtmlMap: { [languageCode: string]: string } = {};
|
|
|
|
|
|
|
|
|
|
const title = 'Ghostfolio';
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
indexHtmlMap = SUPPORTED_LANGUAGE_CODES.reduce(
|
|
|
|
|
(map, languageCode) => ({
|
|
|
|
@ -35,47 +34,47 @@ try {
|
|
|
|
|
const locales = {
|
|
|
|
|
'/de/blog/2023/01/ghostfolio-auf-sackgeld-vorgestellt': {
|
|
|
|
|
featureGraphicPath: 'assets/images/blog/ghostfolio-x-sackgeld.png',
|
|
|
|
|
title: `Ghostfolio auf Sackgeld.com vorgestellt - ${titleShort}`
|
|
|
|
|
title: `Ghostfolio auf Sackgeld.com vorgestellt - ${title}`
|
|
|
|
|
},
|
|
|
|
|
'/en/blog/2022/08/500-stars-on-github': {
|
|
|
|
|
featureGraphicPath: 'assets/images/blog/500-stars-on-github.jpg',
|
|
|
|
|
title: `500 Stars - ${titleShort}`
|
|
|
|
|
title: `500 Stars - ${title}`
|
|
|
|
|
},
|
|
|
|
|
'/en/blog/2022/10/hacktoberfest-2022': {
|
|
|
|
|
featureGraphicPath: 'assets/images/blog/hacktoberfest-2022.png',
|
|
|
|
|
title: `Hacktoberfest 2022 - ${titleShort}`
|
|
|
|
|
title: `Hacktoberfest 2022 - ${title}`
|
|
|
|
|
},
|
|
|
|
|
'/en/blog/2022/12/the-importance-of-tracking-your-personal-finances': {
|
|
|
|
|
featureGraphicPath: 'assets/images/blog/20221226.jpg',
|
|
|
|
|
title: `The importance of tracking your personal finances - ${titleShort}`
|
|
|
|
|
title: `The importance of tracking your personal finances - ${title}`
|
|
|
|
|
},
|
|
|
|
|
'/en/blog/2023/02/ghostfolio-meets-umbrel': {
|
|
|
|
|
featureGraphicPath: 'assets/images/blog/ghostfolio-x-umbrel.png',
|
|
|
|
|
title: `Ghostfolio meets Umbrel - ${titleShort}`
|
|
|
|
|
title: `Ghostfolio meets Umbrel - ${title}`
|
|
|
|
|
},
|
|
|
|
|
'/en/blog/2023/03/ghostfolio-reaches-1000-stars-on-github': {
|
|
|
|
|
featureGraphicPath: 'assets/images/blog/1000-stars-on-github.jpg',
|
|
|
|
|
title: `Ghostfolio reaches 1’000 Stars on GitHub - ${titleShort}`
|
|
|
|
|
title: `Ghostfolio reaches 1’000 Stars on GitHub - ${title}`
|
|
|
|
|
},
|
|
|
|
|
'/en/blog/2023/05/unlock-your-financial-potential-with-ghostfolio': {
|
|
|
|
|
featureGraphicPath: 'assets/images/blog/20230520.jpg',
|
|
|
|
|
title: `Unlock your Financial Potential with Ghostfolio - ${titleShort}`
|
|
|
|
|
title: `Unlock your Financial Potential with Ghostfolio - ${title}`
|
|
|
|
|
},
|
|
|
|
|
'/en/blog/2023/07/exploring-the-path-to-fire': {
|
|
|
|
|
featureGraphicPath: 'assets/images/blog/20230701.jpg',
|
|
|
|
|
title: `Exploring the Path to FIRE - ${titleShort}`
|
|
|
|
|
title: `Exploring the Path to FIRE - ${title}`
|
|
|
|
|
},
|
|
|
|
|
'/en/blog/2023/08/ghostfolio-joins-oss-friends': {
|
|
|
|
|
featureGraphicPath: 'assets/images/blog/ghostfolio-joins-oss-friends.png',
|
|
|
|
|
title: `Ghostfolio joins OSS Friends - ${titleShort}`
|
|
|
|
|
title: `Ghostfolio joins OSS Friends - ${title}`
|
|
|
|
|
},
|
|
|
|
|
'/en/blog/2023/09/ghostfolio-2': {
|
|
|
|
|
featureGraphicPath: 'assets/images/blog/ghostfolio-2.jpg',
|
|
|
|
|
title: `Announcing Ghostfolio 2.0 - ${titleShort}`
|
|
|
|
|
title: `Announcing Ghostfolio 2.0 - ${title}`
|
|
|
|
|
},
|
|
|
|
|
'/en/blog/2023/09/hacktoberfest-2023': {
|
|
|
|
|
featureGraphicPath: 'assets/images/blog/hacktoberfest-2023.png',
|
|
|
|
|
title: `Hacktoberfest 2023 - ${titleShort}`
|
|
|
|
|
title: `Hacktoberfest 2023 - ${title}`
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
@ -128,7 +127,12 @@ export const HtmlTemplateMiddleware = async (
|
|
|
|
|
}),
|
|
|
|
|
featureGraphicPath:
|
|
|
|
|
locales[path]?.featureGraphicPath ?? 'assets/cover.png',
|
|
|
|
|
title: locales[path]?.title ?? title
|
|
|
|
|
title:
|
|
|
|
|
locales[path]?.title ??
|
|
|
|
|
`${title} – ${i18nService.getTranslation({
|
|
|
|
|
languageCode,
|
|
|
|
|
id: 'slogan'
|
|
|
|
|
})}`
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return response.send(indexHtml);
|
|
|
|
|