Created
May 6, 2020 07:43
-
-
Save jonashendrickx/c37e4d3ff1b411e4318ad66f7e357313 to your computer and use it in GitHub Desktop.
next.js with next-i18next translations
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Do not copy/paste this code. It is used internally | |
to manage end-to-end test suites. | |
*/ | |
const NextI18Next = require('next-i18next').default | |
const { localeSubpaths } = require('next/config').default().publicRuntimeConfig | |
const localeSubpathVariations = { | |
none: {}, | |
foreign: { | |
nl: 'nl', | |
}, | |
all: { | |
en: 'en', | |
nl: 'nl', | |
}, | |
} | |
module.exports = new NextI18Next({ | |
otherLanguages: ['nl'], | |
localeSubpaths: localeSubpathVariations[localeSubpaths], | |
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module.exports = { | |
publicRuntimeConfig: { | |
localeSubpaths: typeof process.env.LOCALE_SUBPATHS === 'string' | |
? process.env.LOCALE_SUBPATHS | |
: 'none', | |
}, | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "nextjs", | |
"version": "0.1.0", | |
"private": true, | |
"scripts": { | |
"dev": "node index.js", | |
"build": "next build", | |
"start": "NODE_ENV=production node index.js" | |
}, | |
"dependencies": { | |
"express": "^4.17.1", | |
"i18next": "^19.4.4", | |
"next": "9.3.6", | |
"next-i18next": "^4.4.1", | |
"react": "16.13.1", | |
"react-dom": "16.13.1" | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import React from 'react' | |
import App from 'next/app' | |
import { appWithTranslation } from '../i18n' | |
class MyApp extends App { | |
render() { | |
const { Component, pageProps } = this.props | |
return ( | |
<Component {...pageProps} /> | |
) | |
} | |
} | |
export default appWithTranslation(MyApp); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import React from 'react' | |
import PropTypes from 'prop-types' | |
import { withTranslation } from '../i18n' | |
const Error = ({ statusCode, t }) => ( | |
<p> | |
{statusCode | |
? t('error-with-status', { statusCode }) | |
: t('error-without-status')} | |
</p> | |
) | |
Error.getInitialProps = async ({ res, err }) => { | |
let statusCode = null | |
if (res) { | |
({ statusCode } = res) | |
} else if (err) { | |
({ statusCode } = err) | |
} | |
return { | |
namespacesRequired: ['common'], | |
statusCode, | |
} | |
} | |
Error.defaultProps = { | |
statusCode: null, | |
} | |
Error.propTypes = { | |
statusCode: PropTypes.number, | |
t: PropTypes.func.isRequired, | |
} | |
export default withTranslation('common')(Error) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Head from 'next/head' | |
import PropTypes from 'prop-types' | |
import { i18n, Link, withTranslation } from '../i18n' | |
const Home = ({ t }) => { | |
return ( | |
<div className="container"> | |
<Head> | |
<title>{t('title')}</title> | |
<link rel="icon" href="/favicon.ico" /> | |
</Head> | |
<main> | |
<h1 className="title"> | |
Welcome to <a href="https://nextjs.org">Next.js!</a> | |
</h1> | |
<button | |
type='button' | |
onClick={() => i18n.changeLanguage(i18n.language === 'en' ? 'nl' : 'en')} | |
> | |
{t('change-locale')} | |
</button> | |
</main> | |
<footer> | |
<a | |
href="https://vercel.com?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app" | |
target="_blank" | |
rel="noopener noreferrer" | |
> | |
Powered by{' '} | |
<img src="/vercel.svg" alt="Vercel Logo" className="logo" /> | |
</a> | |
</footer> | |
</div> | |
) | |
} | |
Home.getInitialProps = async () => ({ | |
namespacesRequired: ['common'], | |
}) | |
Home.propTypes = { | |
t: PropTypes.func.isRequired, | |
} | |
export default withTranslation('common')(Home); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const express = require('express') | |
const next = require('next') | |
const nextI18NextMiddleware = require('next-i18next/middleware').default | |
const nextI18next = require('./i18n') | |
const port = process.env.PORT || 3000 | |
const app = next({ dev: process.env.NODE_ENV !== 'production' }) | |
const handle = app.getRequestHandler(); | |
(async () => { | |
await app.prepare() | |
const server = express() | |
await nextI18next.initPromise | |
server.use(nextI18NextMiddleware(nextI18next)) | |
server.get('*', (req, res) => handle(req, res)) | |
await server.listen(port) | |
console.log(`> Ready on http://localhost:${port}`) // eslint-disable-line no-console | |
})(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"title": "Create new Next.js app.", | |
"change-locale": "Change Language" | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"title": "Maak nieuwe Next.js app.", | |
"change-locale": "Taal veranderen" | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment