Contents
Outline
In this blog post, I will introduce how to support the localization on the Next.js project based on TypeScript using next-translate
.
You can see the full source code of thie blog post on the following link.
Blog list
This blog post is a series. If you want to check other blog posts of the series, see the links below.
- [Next.js] Getting Started
- [Next.js] TypeScript
- [Next.js] Prettier
- [Next.js] Absolute path
- [Next.js] Test
- [Next.js] Storybook
- [Next.js] Change Storybook background color
- [Next.js] Localization
- [Next.js] MUI
Create Next.js project with TypeScript
To see how to use next-translate
on the Next.js project based on TypeScript, execute the following command to create a Next.js
project based on TypeScript
.
npx create-next-app --typescript my-app
Install next-translate
To provide the localization by next-translate
on the Next.js
project, we need to install next-translate
. Execute the following command to install next-translate
.
npm install --save next-translate
Configure next-translate
To use next-translate
, we need to configure it. First, open the ./next.config.js
file and modify it like the below.
const nextTranslate = require('next-translate');
module.exports = nextTranslate();
And then, create the ./i18n.json
file and modify it like the below.
{
"locales": ["ja", "en", "ko"],
"defaultLocale": "en",
"localeDetection": false,
"pages": {
"*": ["common"]
}
}
In this blog post, I will provide ja
(Japanese), en
(English) and ko
(Korean) as the supported languages. And, the default language is en
.
{
"locales": ["ja", "en", "ko"],
"defaultLocale": "en",
...
}
To prevent Next.js
detect the browser language to decide the language, I set false
to localeDetection
.
{
...
"localeDetection": false,
...
}
We can make a language set for all pages and for specific pages separately with next-translate
.
{
...
"pages": {
"*": ["common"]
}
}
In this blog post, I will make a language set named common
for all pages(*
).
Language files
Next, let’s create language files for the localization. Create ./locales/en/common.json
file and modify it like the below.
{
"Japanese": "Japanese",
"English": "English",
"Korean": "Korean"
}
And, create the ./locales/ja/common.json
file and modify it like the below.
{
"Japanese": "日本語",
"English": "英語",
"Korean": "韓国語"
}
Lastly, create the ./locales/ko/common.json
file and modify it like the below.
{
"Japanese": "일본어",
"English": "영어",
"Korean": "한국어"
}
Support localization in Next.js
Let’s see how to use next-translate
on the Next.js
project to support the localization. Open the ./pages/index.tsx
file and modify it like the below.
...
import useTranslation from 'next-translate/useTranslation';
const Home: NextPage = () => {
const { t } = useTranslation();
return (
<div className={styles.container}>
...
<main className={styles.main}>
...
<h2>{t('common:Japanese')}</h2>
<h2>{t('common:English')}</h2>
<h2>{t('common:Korean')}</h2>
...
</main>
...
</div>
);
};
We can provide the localization by the t
function in the useTranslation
hook of the next-translate
package.
t('common:Japanese')
When you use the t
function, you can specify the word(Japanese
) in the specific language file(common
).
Check localization
To check next-translate
works well on the Next.js
, execute the following command to start the Next.js
project.
npm run dev
After starting, you can open the http://localhost:3000
URL in the browser and you can see the en
language is displayed well.
To check the other languages, when you open the http://localhost:3000/ja
URL in the browser, you can see the ja
language is displayed well.
Also, when you open the http://localhost:3000/ko
URL in the browser, you can see the ko
language is displayed well.
Test
Let’s see how to test the Next.js
project with next-translate
. If you want to know how to configure the test environment, see the previous blog post.
The code on the previous blog post is like the below.
import { render, screen } from '@testing-library/react';
import Home from '../../pages/index';
describe('Home', () => {
it('renders a heading', () => {
const { container } = render(<Home />);
const heading = screen.getByRole('heading', {
name: /welcome to next\.js!/i,
});
expect(heading).toBeInTheDocument();
expect(container).toMatchSnapshot();
});
});
You can execute the code by the following command.
npm run test
After testing, you can see the snapshot test result on the ./test/index/__snapshots__/index.test.tsx.snap
file. When you open the file, you can see the language is not displayed well like the below.
<h2>
common:Japanese
</h2>
<h2>
common:English
</h2>
<h2>
common:Korean
</h2>
To change the language to the specific language, you need to use I18nProvider
and the specific language file.
...
import commonEN from '../../locales/en/common.json';
import I18nProvider from 'next-translate/I18nProvider';
describe('Home', () => {
it('renders a heading', () => {
const { container } = render(
<I18nProvider lang="en" namespaces={{ common: commonEN }}>
<Home />
</I18nProvider>
);
...
});
});
After updating the snapshot test and opening the snapshot result file(./test/index/__snapshots__/index.test.tsx.snap
) again, you can see the language is displayed well like the below.
<h2>
Japanese
</h2>
<h2>
English
</h2>
<h2>
Korean
</h2>
Complated
Done! we’ve seen how to use next-translate
for the localization in the Next.js
project based on the TypeScript
. Also, we’ve seen how to make a test code for next-translate
in the Next.js
project by Jest
.
Was my blog helpful? Please leave a comment at the bottom. it will be a great help to me!
App promotion
Deku
.Deku
created the applications with Flutter.If you have interested, please try to download them for free.