npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@gravity-ui/i18n-optimize-plugin

v1.2.0

Published

Plugin for optimizing translation file delivery. Can be used with webpack, rspack, and vite.

Downloads

301

Readme

@gravity-ui/i18n-optimize-plugin

Plugin for optimizing translation file delivery. Can be used with webpack, rspack, and vite.

Under the hood, uses i18n-babel-plugin.

Transforms i18n.ts files:

  • Removes meta from messages (id, description, etc.)
  • Converts markdown to html (when meta.markdown === true)
  • Applies typograf rules to key content
  • Creates per-locale chunks and optimizes their runtime loading

TODO:

  • Validates syntax according to ICU MessageFormat
  • Compiles ICU MessageFormat to AST
  • Replaces original keys with hashes (allows reducing key length)

Usage

Install the plugin:

npm install @gravity-ui/i18n-optimize-plugin --save-dev

Connect the plugin to the build. Example if you're using app-builder with rspack:

import {defineConfig} from '@gravity-ui/app-builder';
import applyI18nOptimizePlugin from '@gravity-ui/i18n-optimize-plugin/rspack';

export default defineConfig({
    client: {
        rspack: (config) => {
            const plugins = config.plugins ? [...config.plugins] : [];

            return applyI18nOptimizePlugin(config);
        }
    },
});

Example if you're using app-builder with webpack:

import {defineConfig} from '@gravity-ui/app-builder';
import applyI18nOptimizePlugin from '@gravity-ui/i18n-optimize-plugin/webpack';

export default defineConfig({
    client: {
        webpack: (config) => {
            const plugins = config.plugins ? [...config.plugins] : [];

            return applyI18nOptimizePlugin(config);
        }
    },
});

Settings

typograf

Allows configuring typograf rules.

By default, uses DEFAULT_TYPOGRAF_CONFIG rules.

Example of customizing typograf rules:

applyI18nOptimizePlugin(webpackConfig, {
    typograf: {
        enabled: ['common/nbsp/afterNumber', 'common/nbsp/afterParagraphMark'],
        disabled: ['common/symbols/cf', 'common/space/trimRight', 'common/space/trimLeft'],
    }
})

Example of disabling typograf:

applyI18nOptimizePlugin(webpackConfig, {
    typograf: false,
})

optimizeLocaleChunks

Optimizes chunk loading at runtime: only translations for the current language are loaded to the client.

Works only in production mode for webpack/rspack. Disabled by default (false).

How to enable?

  1. For proper chunk loading, you need to define the runtimeLanguageVariableName variable with the current user language in window.

    For example, if you're using core, you can do this through inlineScripts:

    return res.renderLayout2({
        inlineScripts: [
            `window.I18N_LANG = "${userLanguage}";`,
            'window.YC = window.__DATA__;'
        ],
    })

    By default, window.I18N_LANG is used for runtimeLanguageVariableName.

  2. Configure dynamic manifest depending on user language (production only).

    For example, when using core this can be done through middleware:

    import {createMiddleware, getDefaultManifestPath} from '@gravity-ui/ui-core-layout';
    
    export const layoutMiddleware = createMiddleware(({lang}) => {
        let manifestName = 'assets-manifest.json';
    
        if (process.env.NODE_ENV === 'production' && lang) {
            manifestName = `assets-manifest.${lang}.json`;
        }
    
        return getDefaultManifestPath(manifestName);
    });
  3. Enable the optimizeLocaleChunks option in plugin settings.

  4. Add the line .compiled-locales* to .arcignore.

Optimization Strategies

The strategy parameter determines how language chunks are formed:

  • by-module (default) - separate language chunks are created for each i18n.ts module. This allows loading translations only for modules used on the page.

  • all-in-one - creates a common chunk for each language containing all project translations. Suitable for small projects where translation volume is small.

  • custom - custom strategy allowing you to define your own chunk naming logic through the getChunkName function.

Language Variable Configuration

The runtimeLanguageVariableName parameter allows specifying the variable name that stores the current language. By default, window.I18N_LANG is used.

Example of enabling optimization:

// Default by-module strategy
applyI18nOptimizePlugin(webpackConfig, {
    optimizeLocaleChunks: true,
})

// all-in-one strategy
applyI18nOptimizePlugin(webpackConfig, {
    optimizeLocaleChunks: {
        strategy: 'all-in-one',
    },
})

// Changing runtime variable that stores user language
applyI18nOptimizePlugin(webpackConfig, {
    optimizeLocaleChunks: {
        strategy: 'by-module',
        runtimeLanguageVariableName: 'window.USER_LANG',
    },
})