Skip to main content

Usage

1. Create Messages​

Create message files for each locale.

// src/messages/en.ts
export default {
common: {
title: "My Site",
description: "Welcome"
}
}

// src/messages/ja.ts
export default {
common: {
title: "マイサイト",
description: "ようこそ"
}
}

2. Define i18n Instance​

Import define from @i18n-tiny/astro to create your instance.

// src/i18n.ts
import { define } from '@i18n-tiny/astro'
import en from './messages/en'
import ja from './messages/ja'

export const { getMessages, getTranslations } = define({
messages: { en, ja }
})

3. Advanced Setup (Optional)​

Depending on your project's output mode, you can add an Integration (for SSG) or Middleware (for SSR).

SSG​

Use the Integration if you want to copy the default locale's content to the root directory after build, allowing access without a prefix (e.g., /about instead of /en/about).

// astro.config.mjs
import { defineConfig } from 'astro/config'
import { create } from '@i18n-tiny/astro/integration'

export default defineConfig({
output: 'static', // Default
integrations: [
create({ defaultLocale: 'en' })
]
})

SSR​

Use the Middleware for Server-Side Rendering to handle language detection and redirects.

// src/middleware.ts
import { defineMiddleware } from 'astro/middleware'
import { create } from '@i18n-tiny/astro/middleware'

export const onRequest = defineMiddleware(
create({
locales: ['en', 'ja'],
defaultLocale: 'en'
})
)

4. Use in Pages​

Retrieve messages within your [locale] directory.

---
// src/pages/[locale]/index.astro
import { getMessages } from '../../i18n'
const { locale } = Astro.params

const messages = getMessages(locale)
---

<html lang={locale}>
<body>
<h1>{messages.common.title}</h1>
</body>
</html>