PocketBase gains optional, manually-authored English fields on articles and categories (same record, same slug), and the frontend serves an /en counterpart of every dynamic route via thin page wrappers around shared view components — no i18n library, consistent with the project's existing minimalism stance for a two-locale site with ~20 UI strings. An article/category with no translation 404s cleanly on its own /en detail page and is filtered out of /en listings, and the header's language-switch link falls back to the English blog index rather than a dead link; resolving that requires a global route middleware, since the layout's header renders before the page content in document order and so can't react to state a page component sets during its own async setup.
43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
import { SITE_NAME } from './shared/utils/site'
|
|
|
|
// https://nuxt.com/docs/api/configuration/nuxt-config
|
|
export default defineNuxtConfig({
|
|
compatibilityDate: '2025-07-15',
|
|
devtools: { enabled: true },
|
|
|
|
css: ['~/assets/css/main.css'],
|
|
|
|
// Default auto-import prefixes nested component dirs with their path
|
|
// (e.g. `components/views/HomeView.vue` -> `<ViewsHomeView>`) — disabled so
|
|
// the it/en thin page wrappers can reference `<HomeView>` etc. directly.
|
|
components: [{ path: '~/components', pathPrefix: false }],
|
|
|
|
app: {
|
|
head: {
|
|
htmlAttrs: { lang: 'it' },
|
|
titleTemplate: `%s · ${SITE_NAME}`,
|
|
meta: [{ name: 'viewport', content: 'width=device-width, initial-scale=1' }],
|
|
link: [
|
|
{ rel: 'icon', href: '/favicon.ico', sizes: '16x16 32x32 48x48 64x64' },
|
|
{ rel: 'apple-touch-icon', href: '/apple-touch-icon.png' },
|
|
],
|
|
},
|
|
},
|
|
|
|
runtimeConfig: {
|
|
// Server-only: internal PocketBase address, never exposed to the browser.
|
|
pocketbaseUrl: 'http://localhost:8090',
|
|
public: {
|
|
// Canonical origin of the public website.
|
|
siteUrl: 'http://localhost:3000',
|
|
// Browser-reachable PocketBase origin, used to build absolute media URLs.
|
|
pocketbaseUrl: 'http://localhost:8090',
|
|
},
|
|
},
|
|
|
|
typescript: {
|
|
strict: true,
|
|
},
|
|
|
|
modules: ['@nuxt/eslint'],
|
|
}) |