Getting Started with Intlayer and React Create App
Setting up Intlayer in a Create React App application is straightforward:
Step 1: Install Dependencies
Install the necessary packages using npm:
npm install intlayer react-intlayer
yarn install intlayer react-intlayer
pnpm install intlayer react-intlayer
Step 2: Configuration of your project
Create a config file to configure the languages of your application:
// intlayer.config.ts
import { Locales, type IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
internationalization: {
locales: [
Locales.ENGLISH,
Locales.FRENCH,
Locales.SPANISH,
// Your other locales
],
defaultLocale: Locales.ENGLISH,
},
};
export default config;
To see all available parameters, refer to the configuration documentation here.
Step 3: Integrate Intlayer in Your CRA Configuration
Change your scripts to use react-intlayer
"scripts": {
"build": "react-intlayer build",
"start": "react-intlayer start",
"transpile": "intlayer transpile"
},
Note: react-intlayer scripts are based on craco. You can also implement your own setup based on the intlayer craco plugin. See example here.
Step 4: Declare Your Content
Create and manage your content dictionaries:
// src/app.content.tsx
import { t, type DeclarationContent } from "intlayer";
import React, { type ReactNode } from "react";
const appContent: DeclarationContent = {
id: "app",
getStarted: t<ReactNode>({
en: (
// Don't forget to import React if you use react node in your content
<>
Edit <code>src/App.tsx</code> and save to reload
</>
),
fr: (
<>
Éditez <code>src/App.tsx</code> et enregistrez pour recharger
</>
),
es: (
<>
Edita <code>src/App.tsx</code> y guarda para recargar
</>
),
}),
reactLink: {
href: "https://reactjs.org",
content: t({
en: "Learn React",
fr: "Apprendre React",
es: "Aprender React",
}),
},
};
export default appContent;
Note: If your content file includes TSX code, you should consider importing import React from "react"; in your content file.
See how to declare your Intlayer declaration files.
Step 5: Utilize Intlayer in Your Code
Access your content dictionaries throughout your application:
import logo from "./logo.svg";
import "./App.css";
import { IntlayerProvider, useIntlayer } from "react-intlayer";
import { LocaleSwitcher } from "./components/LangSwitcherDropDown";
function AppContent() {
const content = useIntlayer("app");
return (
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
{content.getStarted}
<a
className="App-link"
href={content.reactLink.href.value}
target="_blank"
rel="noopener noreferrer"
>
{content.reactLink.content}
</a>
</header>
);
}
function App() {
return (
<IntlayerProvider>
<div className="App">
{/* To use the useIntlayer hook properly, you should access your data in a children component */}
<AppContent />
</div>
<div className="absolute bottom-5 right-5 z-50">
<LocaleSwitcher />
</div>
</IntlayerProvider>
);
}
export default App;
Note: If you want to use your content in a string attribute, such as alt, title, href, aria-label, etc., you must call the value of the function, like:
<img src={content.image.src.value} alt={content.image.value} />
(Optional) Step 6: Change the language of your content
To change the language of your content, you can use the setLocale function provided by the useLocale hook. This function allows you to set the locale of the application and update the content accordingly.
import { Locales } from "intlayer";
import { useLocale } from "react-intlayer";
const MyComponent = () => {
const { setLocale } = useLocale();
return (
<button onClick={() => setLocale(Locales.English)}>
Change Language to English
</button>
);
};
Configure TypeScript
Intlayer use module augmentation to get benefits of TypeScript and make your codebase stronger.
Ensure your TypeScript configuration includes the autogenerated types.
// tsconfig.json
{
// your custom config
include: [
"src",
"types", // <- Include the auto generated types
],
}
Git Configuration
It is recommended to ignore the files generated by Intlayer. This allows you to avoid committing them to your Git repository.
To do this, you can add the following instructions to your .gitignore file:
# Ignore the files generated by Intlayer
.intlayer