Internationalize your Gatsby site.
- 
Turn your gatsby site into an internationalization-framework out of the box powered by react-intl. 
- 
Support automatic redirection based on the user's preferred language in browser provided by browser-lang. 
- 
Support multi-language url routes in a single page component. This means you don't have to create separate pages such as pages/en/index.jsorpages/ko/index.js.
When you build multilingual sites, Google recommends using different URLs for each language version of a page rather than using cookies or browser settings to adjust the content language on the page. (read more)
Demo: http://gatsby-starter-default-intl.netlify.com
Source: https://github.com/wiziple/gatsby-plugin-intl/tree/master/examples/gatsby-starter-default-intl
- https://picpick.app
- https://www.krashna.nl (Source)
- https://vaktija.eu
- https://anhek.dev (Source)
- https://pkhctech.ineo.vn (Source)
- https://www.neonlaw.com (Source)
- https://ethereum.org (Source)
- https://marscollective.co (Source)
Feel free to send us PR to add your project.
npm install --save gatsby-plugin-intl
// In your gatsby-config.js plugins: [ { resolve: `gatsby-plugin-intl`, options: { // language JSON resource path path: `${__dirname}/src/intl`, // supported language languages: [`en`, `ko`, `de`], // language file path defaultLanguage: `ko`, // option to redirect to `/ko` when connecting `/` redirect: true, }, }, ]
For example,
| language resource file | language | 
|---|---|
| src/intl/en.json | English | 
| src/intl/ko.json | Korean | 
| src/intl/de.json | German | 
You can use injectIntl HOC on any react components including page components.
import React from "react" import { injectIntl, Link, FormattedMessage } from "gatsby-plugin-intl" const IndexPage = ({ intl }) => { return ( <Layout> <SEO title={intl.formatMessage({ id: "title" })} /> <Link to="/page-2/"> {intl.formatMessage({ id: "go_page2" })} {/* OR <FormattedMessage id="go_page2" /> */} </Link> </Layout> ) } export default injectIntl(IndexPage)
Or you can use the new useIntl hook.
import React from "react" import { useIntl, Link, FormattedMessage } from "gatsby-plugin-intl" const IndexPage = () => { const intl = useIntl() return ( <Layout> <SEO title={intl.formatMessage({ id: "title" })} /> <Link to="/page-2/"> {intl.formatMessage({ id: "go_page2" })} {/* OR <FormattedMessage id="go_page2" /> */} </Link> </Layout> ) } export default IndexPage
Let's say you have two pages (index.js and page-2.js) in your pages directory. The plugin will create static pages for every language.
| file | English | Korean | German | Default* | 
|---|---|---|---|---|
| src/pages/index.js | /en | /ko | /de | / | 
| src/pages/page-2.js | /en/page-2 | /ko/page-2 | /de/page-2 | /page-2 | 
Default Pages and Redirection
If redirect option is true, / or /page-2 will be redirected to the user's preferred language router. e.g) /ko or /ko/page-2. Otherwise, the pages will render defaultLangugage language. You can also specify additional component to be rendered on redirection page by adding redirectComponent option.
| Option | Type | Description | 
|---|---|---|
| path | string | language JSON resource path | 
| languages | string[] | supported language keys | 
| defaultLanguage | string | default language when visiting /pageinstead ofko/page | 
| redirect | boolean | if the value is true,/or/page-2will be redirected to the user's preferred language router. e.g)/koor/ko/page-2. Otherwise, the pages will renderdefaultLangugagelanguage. | 
| redirectComponent | string (optional) | additional component file path to be rendered on with a redirection component for SEO. | 
To make it easy to handle i18n with multi-language url routes, the plugin provides several components.
To use it, simply import it from gatsby-plugin-intl.
| Component | Type | Description | 
|---|---|---|
| Link | component | This is a wrapper around @gatsby’s Link component that adds useful enhancements for multi-language routes. All props are passed through to @gatsby’s Link component. | 
| navigate | function | This is a wrapper around @gatsby’s navigate function that adds useful enhancements for multi-language routes. All options are passed through to @gatsby’s navigate function. | 
| changeLocale | function | A function that replaces your locale. changeLocale(locale, to = null) | 
| IntlContextConsumer | component | A context component to get plugin configuration on the component level. | 
| injectIntl | component | https://github.com/yahoo/react-intl/wiki/API#injection-api | 
| FormattedMessage | component | https://github.com/yahoo/react-intl/wiki/Components#string-formatting-components | 
| and more... | https://github.com/yahoo/react-intl/wiki/Components | 
MIT © Daewoong Moon