• Stars
    star
    107
  • Rank 323,587 (Top 7 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created almost 5 years ago
  • Updated 23 days ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

I18Next HMR🔥 webpack / vite plugin that allows reload translation resources instantly on the client & the server.

i18next-hmr

npm CI

I18Next HMR🔥 webpack / vite plugin that allows reload translation resources instantly on the client & the server.

Requirements

  • Node.js v10 or above
  • Webpack v4.x - v5.x
  • Vite v3

Installation

$ npm install --save-dev i18next-hmr

Usage

Add the plugin to your webpack config (or next.config.js).

// webpack.config.js
const { I18NextHMRPlugin } = require('i18next-hmr/webpack');

module.exports = {
  ...
  plugins: [
    new I18NextHMRPlugin({
      localesDir: path.resolve(__dirname, 'static/locales'), 
      localesDirs: [
         // use this property for multiple locales directories   
      ]
    })
  ]
};
// i18next.config.js
const Backend = require('i18next-http-backend');
const i18next = require('i18next');
const { HMRPlugin } = require('i18next-hmr/plugin');

const instance = i18next.use(Backend); // http-backend is required for client side reloading

if (process.env.NODE_ENV !== 'production') {
   instance.use(new HMRPlugin({
      webpack: {
         client: typeof window !== 'undefined', // enables client side HMR in webpack
         server: typeof window === 'undefined'  // enables server side HMR in webpack
      },
      vite: {
         client: typeof window !== 'undefined', // enables client side HMR in Vite
      }
   }));
}

instance.init(options, callback);

module.exports = instance;

Start the app with NODE_ENV=development

Server side

This lib will trigger i18n.reloadResources([lang], [ns]) on the server side with lang & namespace extracted from the translation filename that was changed.

⚠️ If your server side is bundled using Webpack, the lib will use the native HMR (if enabled), for it to work properly the lib must be bundled, therefore, you should specify the lib as not external. There are 2 ways to do that:

  1. If you are using webpack-node-externals specify i18next-hmr in the whitelist.
  2. (deprecated method) use a relative path to node_modules, something like:
    // server.entry.js
    if (process.env.NODE_ENV !== 'production') {
      const { applyServerHMR } = require('../node_modules/i18next-hmr/server');
      applyServerHMR(i18n);
    }

Client side

The lib will invoke Webpack's / Vite HMR to update client side, that will re-fetch (with cache killer) the updated translation files and trigger i18n.changelanguage(lang) to trigger listeners (which in React apps it will update the UI).

Example

Working examples can be found in the examples folder.

nextjs with next-i18next

screenshot

More Repositories

1

bull-board

🎯 Queue background jobs inspector
TypeScript
2,309
star
2

turborepo-gh-artifacts

A TurboRepo local cache server which uploads artifact cache to GH artifacts.
TypeScript
123
star
3

knex-paginate

An extension of Knex's query builder with `paginate` method that will help with your pagination tasks.
JavaScript
112
star
4

knex-mock-client

A mock client for knex which allows you to write unit tests with DB interactions
TypeScript
53
star
5

knex-on-duplicate-update

A Knex plugin that adds .onDuplicateUpdate() function to knex's query builder.
JavaScript
28
star
6

i18next-locales-sync

Syncs i18next locale resource files against a primary language.
TypeScript
24
star
7

turborepo-gh-artifacts-example

Turborepo with Github action cache
JavaScript
8
star
8

postcss-extract-styles

PostCSS plugin that extracts styles from css based on decelerations matching.
JavaScript
4
star
9

postcss-decrease-specificity

PostCSS plugin that decreases the specificity of given selector
JavaScript
3
star
10

rspack-express-js

Express.js app bundled with Rspack with HMR
TypeScript
2
star
11

kodi-addon-release

Bump KODI addon version, create tag, update changelog, commit and release the addon in one step.
JavaScript
2
star
12

cibus-chrome-extension

A Chrome Extension to help you monitor your Cibus expenses.
TypeScript
2
star
13

babel-plugin-transform-react-remove-display-name

Make React component `displayName` property available only in none production environment during the build ✨
TypeScript
1
star
14

electric-pulse

A pi pico electric pulse meter
Python
1
star
15

tpa-style-scss

Set of SCSS functions that help you to build TPA style custom syntax.
SCSS
1
star