DEV Community

Cover image for Multilingual website with Gatsby and Contentful - Part 3
Louis Bertin
Louis Bertin

Posted on β€’ Edited on

Multilingual website with Gatsby and Contentful - Part 3

Final part, the deployment! πŸš€

I'm going to use Netlify because I really appreciate the service, their UI and their features

Prerequisite

  • My previous tutorials works
  • Or, you have a Gatsby project who runs locally

🚨 Your project should be hosted on a version-control platform like Github, Gitlab or Bitbucket.

Few steps before going online

  • create an .env file at your project root repository
  • add your Contentful credentials and require the dotenv package at the top
CONTENTFUL_SPACE_ID=dbveb9zaujav
CONTENTFUL_ACCESS_TOKEN=StN-7u3ijFP5IoDwg9-fxP4HdbNiQwmVSRnrOO11IUY
Enter fullscreen mode Exit fullscreen mode
  • replace your credentials in your gatsby-config.js
require("dotenv").config({
  path: `.env`,
})

module.exports = {
  siteMetadata: {
    title: `Gatsby Default Starter`,
    description: `Kick off your next, great Gatsby project with this default starter. This barebones starter ships with the main Gatsby configuration files you might need.`,
    author: `@louisbertin`,
  },
  plugins: [
    `gatsby-plugin-react-helmet`,
    {
      resolve: `gatsby-source-filesystem`,
      options: {
        name: `images`,
        path: `${__dirname}/src/images`,
      },
    },
    `gatsby-transformer-sharp`,
    `gatsby-plugin-sharp`,
    {
      resolve: `gatsby-plugin-manifest`,
      options: {
        name: `gatsby-starter-default`,
        short_name: `starter`,
        start_url: `/`,
        background_color: `#663399`,
        theme_color: `#663399`,
        display: `minimal-ui`,
        icon: `src/images/gatsby-icon.png`, // This path is relative to the root of the site.
      },
    },
    {
      resolve: `gatsby-source-contentful`,
      options: {
        spaceId: process.env.CONTENTFUL_SPACE_ID,
        accessToken: process.env.CONTENTFUL_ACCESS_TOKEN,
      },
    },
    {
      resolve: `gatsby-plugin-intl`,
      options: {
        // language JSON resource path
        path: `${__dirname}/src/intl`,
        // supported language
        languages: [`en`, `fr`],
        // language file path
        defaultLanguage: `en`,
        // option to redirect to `/en` when connecting `/`
        redirect: true,
      },
    },
    // this (optional) plugin enables Progressive Web App + Offline functionality
    // To learn more, visit: https://gatsby.dev/offline
    // `gatsby-plugin-offline`,
  ],
}

Enter fullscreen mode Exit fullscreen mode

Netlify setup

  • Create your account on Netlify
  • Then, log you in and click on "New site from Git"
  • Pick your repository with your prefered platform
  • Personally, I'm using Github. I have to click on "Configure Netlify on Github". After the redirection you have to choose if you prefer to give all access or restrict to a few repositories.
  • You can go back to Netlify and select your repository
  • Use the master branch, gatsby build command line and public/ folder at the configuration step
  • ⚠️ Click on "Show advanced" and add your Contentful environment variables based on your .env values Environment variables
  • If everything's good.. click on "Deploy site"! πŸš€

Wait a little and Netlify give you an url to access your website, this is mine : https://practical-villani-66d629.netlify.com/

By the way, your multilingual website reach the 100 score on Google Pagespeed 😎
Google score

What can you do after ?

  • You can add your own domain name
  • You can add a form Netlify Forms or FormSpree
  • Finalize your blog! You only have a demo app!

πŸ‘‹ By the way, my repository is still available on Github !

Top comments (6)

Collapse
Β 
dinhhuyams profile image
TrinhDinhHuy β€’

Do you have the repo?

Collapse
Β 
louisbertin profile image
Louis Bertin β€’

Of course!
Juste here : github.com/LouisBertin/gatsby-cont...

Collapse
Β 
rafaelmouradev profile image
Rafael.js β€’

You can show up with printscreens how you setup your CMS(contentful)
Its would save my life

Collapse
Β 
louisbertin profile image
Louis Bertin β€’

Sorry for the late answer!

First, you should create a Content model :

Content model

Then, you can create a Content item :
Content item

Finally you can fill up your fields with content and don't forget to enable multiple locales on the right side πŸ™‚ :

Content fields

Collapse
Β 
musicformellons profile image
musicformellons β€’

I have a similar setup. It works, but when I alter the languages JSON it does not Hot Reload. Is this the same in your setup?

Collapse
Β 
louisbertin profile image
Louis Bertin β€’

Hi!

Yes, you have to re-run your project with gatsby develop to see your changes πŸ™‚