i18next-hmr
    TypeScript icon, indicating that this package has built-in type declarations

    1.7.4 • Public • Published

    i18next-hmr

    npm CI

    I18Next HMR🔥 webpack plugin that allows reloading translation resources on the client & the server

    Requirements

    • Node.js v10 or above
    • Webpack 4.x - 5.x

    Installation

    $ npm install --save-dev i18next-hmr

    Usage

    Add the plugin to your webpack config (or nextjs).

    // webpack.config.js
    const { I18NextHMRPlugin } = require('i18next-hmr/plugin');
    
    module.exports = {
      ...
      plugins: [
        new I18NextHMRPlugin({
          localesDir: path.resolve(__dirname, 'static/locales'),
        })
      ]
    };
    // i18next.config.js
    const i18next = require('i18next');
    i18next.init(options, callback);
    if (process.env.NODE_ENV !== 'production') {
      const { applyClientHMR } = require('i18next-hmr/client');
      applyClientHMR(i18next);
    }
    // server.js
    const express = require('express');
    
    const i18n = require('./i18n');
    
    if (process.env.NODE_ENV !== 'production') {
      const { applyServerHMR } = require('i18next-hmr/server');
      applyServerHMR(i18n);
    }
    
    const port = process.env.PORT || 3000;
    
    (async () => {
      const server = express();
      server.get('*', (req, res) => handle(req, res));
    
      await server.listen(port);
      console.log(`> Ready on http://localhost:${port}`);
    })();

    Start the app with NODE_ENV=development

    Server side

    The 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 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. 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 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

    Install

    npm i i18next-hmr

    DownloadsWeekly Downloads

    3,071

    Version

    1.7.4

    License

    MIT

    Unpacked Size

    28.2 kB

    Total Files

    16

    Last publish

    Collaborators

    • avatar