nextjs-locale
TypeScript icon, indicating that this package has built-in type declarations

2.0.2 • Public • Published

NextJS-Locale (For New "App directory")

NextJS Tiny localization (~3kb) package for new App directory with server components + client components support

Installation

  1. Add nextjs-locale to your project with npm
  npm install nextjs-locale
  1. Now all pages should be moved within a [lang] folder so that we can use this segment to provide content in different languages (e.g. /en, /en/about, etc.).
src
└── app
    └── [lang]
        ├── another-page
        |   └── page.js
        ├── layout.js
        └── page.js
  1. Add middleware to your src directory [./src/middleware.ts]
import createNextJsLocaleMiddleware from 'nextjs-locale/middleware'

export default createNextJsLocaleMiddleware({
    // A list of all locales that are supported
    locales: ['en', 'fa'],

    // If this locale is matched, pathnames will be removed from the URL (e.g., `/about`).
    defaultLocale: 'en'
})

export const config = {
    // Skip all paths that aren't pages that you'd like to internationalize
    matcher: ['/((?!api|_next|favicon.ico|assets).*)']
}

that's it! now you can use translations in your page and components.

Usage

  • In Server pages and components
import { useTranslate } from "nextjs-locale"

const ServerComponent = ({}) => {
    const { t, locale } = useTranslate()

    return (
        <div>
            {t(locales.test)}
        </div>
    )
}

const locales: any = {
    test: {
        en: 'Hello World!',
        fa: 'سلام دنیا‍!'
    }
}

export default ServerComponent

  • In Client page and components if you plans to use this library in your client component you need first add LocaleProvider (once) to your root Layout like this
'use client'

import { LocaleProvider } from 'nextjs-locale/context'
import './globals.css'

export const generateMetadata = async ({ params: { lang } }: any) => {
    return { title: lang }
}

export default function RootLayout({
    children,
    params: { lang }
}: {
    children: React.ReactNode
    params: any
}) {
    return (
        <html lang={lang} dir={lang === 'fa' ? 'rtl' : 'ltr'}>
            <body>
                <LocaleProvider locale={lang}>{children}</LocaleProvider>
            </body>
        </html>
    )
}

then you can use translation in your all client components like server components:

'use client'

import { useTranslate } from "nextjs-locale"

const ClientComponent = ({}) => {
    const { t, locale } = useTranslate()

    return (
        <div>
            {t(locales.test)}
        </div>
    )
}

const locales: any = {
    test: {
        en: 'Hello World!',
        fa: 'سلام دنیا‍!'
    }
}

export default ClientComponent

Authors

Package Sidebar

Install

npm i nextjs-locale

Weekly Downloads

14

Version

2.0.2

License

MIT

Unpacked Size

33.7 kB

Total Files

65

Last publish

Collaborators

  • mehdihs