diff --git a/docs/frontend.md b/docs/frontend.md
index b242a93..fc7470b 100644
--- a/docs/frontend.md
+++ b/docs/frontend.md
@@ -8,7 +8,7 @@
| `/blog` | `/en/blog` | `app/pages/blog/index.vue` + `app/pages/en/blog/index.vue` → `BlogIndexView.vue` | Paginated archive (`PAGE_SIZE = 12`), grid of `ArticleCard`, prev/next via `?page=`. |
| `/blog/[slug]` | `/en/blog/[slug]` | `app/pages/blog/[slug].vue` + `app/pages/en/blog/[slug].vue` → `ArticleView.vue` | Full article: fetches `/content/articles/:slug`, renders the pre-converted `article.html`, SEO meta, canonical URL, Open Graph, JSON-LD `BlogPosting`, breadcrumb to its category. |
| `/category/[slug]` | `/en/category/[slug]` | `app/pages/category/[slug].vue` + `app/pages/en/category/[slug].vue` → `CategoryView.vue` | Fetches the category by slug, then a paginated, category-filtered article list; 404s if the category doesn't exist. |
-| `/come-difendersi-dal-corralito` | *(none)* | `app/pages/come-difendersi-dal-corralito.vue` | Fully static marketing page, no PocketBase data, Italian only — see [English content](#english-content-1). |
+| `/come-difendersi-dal-corralito` | `/en/come-difendersi-dal-corralito` | `app/pages/come-difendersi-dal-corralito.vue` + `app/pages/en/come-difendersi-dal-corralito.vue` → `CorralitoView.vue` | Fully static marketing page, no PocketBase data — copy lives in `STRINGS[locale].corralito` (`shared/utils/i18n.ts`), same pattern as every other view. |
All pages are SSR (`useFetch`/`useSeoMeta`); nothing blog-related is client-only-rendered.
@@ -47,8 +47,9 @@ Nitro locale-awareness, and most of the SEO work are custom code either way).
by the time a page component's own `
+
+
+
+
+ {{ strings.navCorralito }}
+
+
+
+
+
+
{{ strings.corralito.p1 }}
+
{{ strings.corralito.p2 }}
+
{{ strings.corralito.topicsIntro }}
+
+
+
+
{{ strings.corralito.disclaimer }}
+
+
+
+
+
+
+
diff --git a/frontend/app/layouts/default.vue b/frontend/app/layouts/default.vue
index 376d663..e20b000 100644
--- a/frontend/app/layouts/default.vue
+++ b/frontend/app/layouts/default.vue
@@ -27,8 +27,8 @@ const strings = computed(() => STRINGS[locale.value])
- {{ strings.navHome }}
- {{ strings.navBlog }}
- -
- {{ strings.navCorralito }}
+
-
+ {{ strings.navCorralito }}
@@ -55,8 +55,8 @@ const strings = computed(() => STRINGS[locale.value])
- {{ strings.navHome }}
- {{ strings.navBlog }}
- -
- {{ strings.navCorralito }}
+
-
+ {{ strings.navCorralito }}
diff --git a/frontend/app/middleware/lang-switch.global.ts b/frontend/app/middleware/lang-switch.global.ts
index 8ee7a27..d62a641 100644
--- a/frontend/app/middleware/lang-switch.global.ts
+++ b/frontend/app/middleware/lang-switch.global.ts
@@ -38,10 +38,5 @@ export default defineNuxtRouteMiddleware(async (to) => {
return
}
- if (bare === '/come-difendersi-dal-corralito') {
- langSwitch.value = { available: false, fallback: '/en' }
- return
- }
-
langSwitch.value = { available: true, fallback: '/en' }
})
diff --git a/frontend/app/pages/come-difendersi-dal-corralito.vue b/frontend/app/pages/come-difendersi-dal-corralito.vue
index fe2b09c..87bd9f0 100644
--- a/frontend/app/pages/come-difendersi-dal-corralito.vue
+++ b/frontend/app/pages/come-difendersi-dal-corralito.vue
@@ -1,132 +1,3 @@
-
-
-
-
- Come difendersi dal corralito
-
-
-
-
-
-
- Stai pensando di avvicinarti al mondo delle criptovalute (un mercato parallelo al
- mercato tradizionale finanziario), ma non sai da dove cominciare?
-
-
-
- È possibile organizzare corsi individuali o di gruppo dedicati alla conoscenza e al
- funzionamento delle criptovalute, con un approccio prevalentemente pratico e senza
- fornire consigli o raccomandazioni finanziarie.
-
-
-
Durante il corso possiamo affrontare, tra gli altri, questi argomenti:
-
-
- - quali sono i principali tipi di criptovalute e quali differenze esistono tra loro;
- - come funziona una blockchain e cosa significa realmente effettuare una transazione;
- - dove e come vengono conservate le criptovalute: wallet, exchange e sistemi di custodia;
- - come acquistare e vendere criptovalute e quali sono le principali modalità disponibili;
- - come utilizzare un wallet e gestire correttamente le proprie chiavi;
- - quali sono i principali rischi legati alla sicurezza e alla custodia;
- - come orientarsi nel vastissimo universo delle criptovalute e dei token.
-
-
-
- Non si tratta di consulenza finanziaria e non verranno fornite indicazioni su quali
- criptovalute acquistare o vendere. L'obiettivo è fornire conoscenze e strumenti per
- comprendere questo nuovo mondo e muoversi al suo interno con maggiore consapevolezza.
-
-
-
-
-
+
-
-
diff --git a/frontend/app/pages/en/come-difendersi-dal-corralito.vue b/frontend/app/pages/en/come-difendersi-dal-corralito.vue
new file mode 100644
index 0000000..381894c
--- /dev/null
+++ b/frontend/app/pages/en/come-difendersi-dal-corralito.vue
@@ -0,0 +1,3 @@
+
+
+
diff --git a/frontend/shared/utils/i18n.ts b/frontend/shared/utils/i18n.ts
index 84ac7bc..1e21aaf 100644
--- a/frontend/shared/utils/i18n.ts
+++ b/frontend/shared/utils/i18n.ts
@@ -62,6 +62,27 @@ export const STRINGS = {
byAuthor: 'Di {author}',
backToArticles: 'Torna a tutti gli articoli',
},
+ corralito: {
+ metaTitle: 'Corsi di formazione sulle criptovalute',
+ metaDescription: 'Corsi pratici, individuali o di gruppo, per capire come funzionano le criptovalute e difendersi dal corralito.',
+ coverAlt: 'Manifesti e scritte contro le banche durante una crisi bancaria',
+ p1: 'Stai pensando di avvicinarti al mondo delle criptovalute (un mercato parallelo al mercato tradizionale finanziario), ma non sai da dove cominciare?',
+ p2: "È possibile organizzare corsi individuali o di gruppo dedicati alla conoscenza e al funzionamento delle criptovalute, con un approccio prevalentemente pratico e senza fornire consigli o raccomandazioni finanziarie.",
+ topicsIntro: 'Durante il corso possiamo affrontare, tra gli altri, questi argomenti:',
+ topics: [
+ 'quali sono i principali tipi di criptovalute e quali differenze esistono tra loro;',
+ 'come funziona una blockchain e cosa significa realmente effettuare una transazione;',
+ 'dove e come vengono conservate le criptovalute: wallet, exchange e sistemi di custodia;',
+ 'come acquistare e vendere criptovalute e quali sono le principali modalità disponibili;',
+ 'come utilizzare un wallet e gestire correttamente le proprie chiavi;',
+ 'quali sono i principali rischi legati alla sicurezza e alla custodia;',
+ 'come orientarsi nel vastissimo universo delle criptovalute e dei token.',
+ ],
+ disclaimer: "Non si tratta di consulenza finanziaria e non verranno fornite indicazioni su quali criptovalute acquistare o vendere. L'obiettivo è fornire conoscenze e strumenti per comprendere questo nuovo mondo e muoversi al suo interno con maggiore consapevolezza.",
+ contactKicker: 'Per informazioni sui corsi, modalità e disponibilità',
+ emailLink: 'Scrivimi via email',
+ telegramLink: 'Scrivimi su Telegram',
+ },
},
en: {
skipLink: 'Skip to content',
@@ -69,7 +90,7 @@ export const STRINGS = {
navAriaLabel: 'Main navigation',
navHome: 'Home',
navBlog: 'All articles',
- navCorralito: '',
+ navCorralito: 'How to protect yourself from the corralito',
footerNavAriaLabel: 'Navigate',
footerNavigaKicker: 'Navigate',
footerSeguiciKicker: 'Follow us',
@@ -118,6 +139,27 @@ export const STRINGS = {
byAuthor: 'By {author}',
backToArticles: 'Back to all articles',
},
+ corralito: {
+ metaTitle: 'Cryptocurrency training courses',
+ metaDescription: 'Practical, individual or group courses to understand how cryptocurrencies work and protect yourself from the corralito.',
+ coverAlt: 'Banners and graffiti against banks during a banking crisis',
+ p1: "Are you thinking about getting into the world of cryptocurrencies (a market parallel to the traditional financial market), but don't know where to start?",
+ p2: 'I can organize individual or group courses dedicated to understanding how cryptocurrencies work, with a mostly hands-on approach and without giving financial advice or recommendations.',
+ topicsIntro: 'During the course we can cover, among others, these topics:',
+ topics: [
+ 'the main types of cryptocurrencies and the differences between them;',
+ 'how a blockchain works and what actually happens when you make a transaction;',
+ 'where and how cryptocurrencies are stored: wallets, exchanges and custody systems;',
+ 'how to buy and sell cryptocurrencies and the main methods available;',
+ 'how to use a wallet and correctly manage your own keys;',
+ 'the main risks related to security and custody;',
+ 'how to find your way around the vast universe of cryptocurrencies and tokens.',
+ ],
+ disclaimer: 'This is not financial advice, and no indications will be given on which cryptocurrencies to buy or sell. The goal is to provide knowledge and tools to understand this new world and navigate it with greater awareness.',
+ contactKicker: 'For information on courses, format and availability',
+ emailLink: 'Email me',
+ telegramLink: 'Message me on Telegram',
+ },
},
} as const satisfies Record
diff --git a/tests/e2e/i18n.spec.ts b/tests/e2e/i18n.spec.ts
index bd77cc2..abfdf96 100644
--- a/tests/e2e/i18n.spec.ts
+++ b/tests/e2e/i18n.spec.ts
@@ -41,11 +41,14 @@ test('language switch falls back to the English blog index for an untranslated a
await expect(languageSwitch).toHaveAttribute('href', '/en/blog')
})
-test('language switch on the Italian-only corralito page falls back to the English home page', async ({
- page,
-}) => {
+test('the corralito page has an English translation', async ({ page }) => {
await page.goto('/come-difendersi-dal-corralito')
const languageSwitch = page.getByRole('link', { name: 'English' })
- await expect(languageSwitch).toHaveAttribute('href', '/en')
+ await expect(languageSwitch).toHaveAttribute('href', '/en/come-difendersi-dal-corralito')
+
+ await page.goto('/en/come-difendersi-dal-corralito')
+ await expect(
+ page.getByRole('heading', { level: 1, name: 'How to protect yourself from the corralito' })
+ ).toBeVisible()
})