TomasBankauskas / test-contentful-i18

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Localization (i18n) Example with Next.js + Contentful

ℹ️ Based on our Getting Started tutorial in its completed state.

This website supports localization in two flavours:

  1. Field-level localization is supported by both Contentful and Stackbit. It is only used here for the "Header Text" field in the Site Configuration content object.
  2. Document-level localization is not directly supported by Contentful. However, by configuring Stackbit appropriately, the visual editor provides a native-like localization experience at the content object-level for all localized models. See Stackbit config file.

Locale-aware routing in the website is implemented via Next.js i18n. Note that for the default locale (en-US in this site) no locale prefix is added to pathnames. See Next.js config file.

Notes:

  1. When switching between locales, the client-side code is navigating to the same route but with the selected locale. If there's no such page, a 404 page is shown (defining a different behavior is up to you).
  2. The code implements bi-directional syncing between the locale switcher in the Stackbit visual editor (which controls which pages & fields you can see & edit) and the custom locale switcher rendered in the header of all site pages. This is fully optional, but makes for a more streamlined experience for editors working on multiple locales.

There are two ways to start using this project: importing it via the UI, or developing locally.

Creating a Stackbit Project via the UI

To create a cloud-based Stackbit project based on this repository, click here.

You will need to connect your Contentful account (create a free account if needed), and a new Contentful space with sample content will be created for you.

A new GitHub repository with this codebase will be created for you. You can transfer ownership of the duplicated repository to you through the Project Settings.

Lastly, a live production build of the website on Netlify is automatically provisioned.

Developing Locally

Prerequisites

Before you begin, please make sure you have the following:

  • Contentful account
  • Node v14 or later

Clone this repository

Clone this repository, then run npm install in its root directory.

Create Contentful Space

After signing into Contentful, create a new space.

Generate Management Token

If you don't already have a management token (or personal access token), generate one. To do so, go into your new empty space, then:

  1. Click Settings
  2. Choose API Keys
  3. Select the Content management tokens tab
  4. Click the button to generate a new token

Generate content management token

Generate Preview & Delivery API Keys

From the same place you generated the management token, you can now generate API access keys.

  1. Select the content delivery / preview tokens tab
  2. Choose Add API key

Set Environment Variables

In your project, duplicate .env.example to .env.

Fill in the values in the file based on the keys you've created.

Note: the Contentful space ID can be viewed and copied via Settings->General Settings in Contentful.

Import Content

Import the provided content models & content into Contentful by running the import.js script:

node ./contentful/import.js

If the import fails to run, make sure that you've run npm install and that all keys in your .env file are set correctly.

Run the Website

Run the Next.js development server:

npm run dev

Visit localhost:3000 and you should see the example content you imported into your new Contentful space.

Run Stackbit in Local Development Mode

Keep the Next.js development server running, and open a new command-line window in the same directory.

Install Stackbit's CLI tools (once):

npm i -g @stackbit/cli@latest

Run the CLI:

stackbit dev

Click the displayed link to localhost:8090/_stackbit and the visual editor will open.

Create a Cloud-Based Stackbit Project

To deploy a cloud-based Stackbit project connected to your repository:

  1. Push your code to a GitHub repository (preferably, push only the contents of this directory as a new repository).
  2. Open the import page and choose Use my repository.

Support

If you get stuck along the way, drop into our Discord server and send a message in the #documentation or #help channels.

About


Languages

Language:JavaScript 76.0%Language:TypeScript 23.1%Language:CSS 1.0%