Setup with Vite
The Lingui Vite integration:
- Supports both @vitejs/plugin-react and @vitejs/plugin-react-swc
- Compiles
.pocatalogs on the fly
Setup with @vitejs/plugin-react
@vitejs/plugin-react uses Babel to transform your code. LinguiJS rely on babel-plugin-macros to compile JSX to ICU Message Format and for automatic ID generation.
Install
@lingui/cli,babel-plugin-macrosas development dependencies and@lingui/macro,@lingui/reactas a runtime dependency:- npm
- Yarn
npm install --save-dev @lingui/cli @lingui/vite-plugin babel-plugin-macros
npm install --save @lingui/react @lingui/macroyarn add --dev @lingui/cli @lingui/vite-plugin babel-plugin-macros
yarn add @lingui/react @lingui/macroSetup Lingui in
vite.config.ts:info@vitejs/plugin-reactdoes not use babel config (e.g.babel.rc) from your project by default. You have to enable it manually or specify babel options directly invite.config.tsvite.config.tsimport { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import { lingui } from "@lingui/vite-plugin";
export default defineConfig({
plugins: [
react({
babel: {
plugins: ["macros"],
},
}),
lingui(),
],
});
Setup with @vitejs/plugin-react-swc
@vitejs/plugin-react-swc uses SWC to transform your code, which is 20x faster than Babel. LinguiJS rely on @lingui/swc-plugin to compile JSX to ICU Message Format and for automatic ID generation.
Install
@lingui/cli,@lingui/swc-pluginas development dependencies and@lingui/macro,@lingui/reactas a runtime dependency:- npm
- Yarn
npm install --save-dev @lingui/cli @lingui/vite-plugin @lingui/swc-plugin
npm install --save @lingui/react @lingui/macroyarn add --dev @lingui/cli @lingui/vite-plugin @lingui/swc-plugin
yarn add @lingui/react @lingui/macroSetup Lingui in
vite.config.ts:vite.config.tsimport { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";
import { lingui } from "@lingui/vite-plugin";
export default defineConfig({
plugins: [
react({
plugins: [["@lingui/swc-plugin", {}]],
}),
lingui(),
],
});
Further Setup
- Create a
lingui.config.tsfile with LinguiJS configuration in the root of your project (next topackage.json). Replacesrcwith a directory name where you have source files:
import type { LinguiConfig } from "@lingui/conf";
const config: LinguiConfig = {
locales: ["en", "cs", "fr"],
catalogs: [
{
path: "<rootDir>/src/locales/{locale}",
include: ["src"],
},
],
};
export default config;
PO format is recommended for message catalogs, and could be compiled on the fly thanks to @lingui/vite-plugin.
See format documentation for other available formats.
- Add the following scripts to your
package.json:
{
"scripts": {
"messages:extract": "lingui extract"
}
}
Check the installation by running:
- npm
- Yarn
npm run messages:extractyarn messages:extractThere should be no error and you should see output similar following:
- npm
- Yarn
> npm run messages:extract
Catalog statistics:
┌──────────┬─────────────┬─────────┐
│ Language │ Total count │ Missing │
├──────────┼─────────────┼─────────┤
│ cs │ 0 │ 0 │
│ en │ 0 │ 0 │
│ fr │ 0 │ 0 │
└──────────┴─────────────┴─────────┘
(use "lingui extract" to update catalogs with new messages)
(use "lingui compile" to compile catalogs for production)> yarn messages:extract
Catalog statistics:
┌──────────┬─────────────┬─────────┐
│ Language │ Total count │ Missing │
├──────────┼─────────────┼─────────┤
│ cs │ 0 │ 0 │
│ en │ 0 │ 0 │
│ fr │ 0 │ 0 │
└──────────┴─────────────┴─────────┘
(use "lingui extract" to update catalogs with new messages)
(use "lingui compile" to compile catalogs for production)This command should create
.pocatalogs in thesrc/locales/folder:src
└── locales
├── cs.po
├── en.po
└── fr.poImport
.pothose files directly in your Vite processed code:export async function dynamicActivate(locale: string) {
const { messages } = await import(`./locales/${locale}.po`);
i18n.load(locale, messages);
i18n.activate(locale);
}
Don't miss the Lingui ESLint Plugin which can help you find and prevent common l10n mistakes in your code.
See the guide about dynamic loading catalogs for more info.
See Vite's official documentation for more info about Vite dynamic imports.
Congratulations! You've successfully set up a Vite project with LinguiJS. Now it's a good time to follow React tutorial or read about ICU Message Format which is used in messages.